React-native-onesignal: A fusão de manifesto falha ao montar o aplicativo de teste Android

Criado em 12 jun. 2019  ·  15Comentários  ·  Fonte: OneSignal/react-native-onesignal

Descrição

Ao montar o aplicativo de teste Android usando ./gradlew assembleAndroidTest , a fusão de manifesto falha com os seguintes erros:

> Task :react-native-onesignal:processDebugAndroidTestManifest FAILED
/…/react-native-onesignal/examples/RNOneSignal/node_modules/react-native-onesignal/android/build/intermediates/tmp/manifest/androidTest/debug/manifestMerger8422387923641009676.xml Error:
        Attribute meta-data#onesignal_app_id<strong i="9">@value</strong> at manifestMerger8422387923641009676.xml requires a placeholder substitution but no value for <onesignal_app_id> is provided.
/…/react-native-onesignal/examples/RNOneSignal/node_modules/react-native-onesignal/android/build/intermediates/tmp/manifest/androidTest/debug/manifestMerger8422387923641009676.xml Error:
        Attribute meta-data#onesignal_google_project_number<strong i="10">@value</strong> at manifestMerger8422387923641009676.xml requires a placeholder substitution but no value for <onesignal_google_project_number> is provided.

See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.

Um problema semelhante foi relatado com # 579 em julho de 2018 e posteriormente encerrado em janeiro de 2019 sem qualquer resolução aparente.

Meio Ambiente

O projeto de exemplo em examples/RNOneSignal@31b5242 que usa react-native-onesignal v3.2.14.

Passos para reproduzir

  1. git clone https://github.com/geektimecoil/react-native-onesignal.git
  2. cd react-native-onesignal
  3. git checkout 31b52420c807c22405e70b44800e20f3a8e3456e
  4. cd examples/RNOneSignal
  5. yarn
  6. cd android
  7. ./gradlew assembleAndroidTest
Android Help Wanted

Comentários muito úteis

Agradecemos sua paciência enquanto investigamos o problema.

Todos 15 comentários

Correndo para isso também.

@sonicdoe Você está usando productFlavors ? Nesse caso, você precisará alterar o comando como:

buildType = "debug"
productFlavor = "dev"

./gradlew assembleDevDebugAndroidTest

Não, o projeto de exemplo em examples/RNOneSignal@31b5242 (que usei para reproduzir isso) não usa variações de produto.

Também estou encontrando isso - uma pesquisa aleatória do Google mostrou esse problema https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview/issues/207, que sugere o uso de buildToolsVersion: 28.0.0.

Já fazemos isso, mas então percebi um aviso durante a compilação

<br i="8"/> OneSignalPlugin: WARNING: OneSignalPlugin: Downgraded 'com.android.support:28.0.0' -> 27.+ to prevent compile errors! Recommend updating your project's compileSdkVersion!<br i="9"/>

onde este projeto está forçando o downgrade; (

Meu problema pessoal foi resolvido quando eu construí usando o task-name apropriado após o comando gradlew (descrito acima).

FWIW, aqui está parte do meu arquivo android/build.gradle :

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 28
                buildToolsVersion '28.0.3'
            }
        }
    }
    project.configurations.all {
        resolutionStrategy.eachDependency { details ->
            if (details.requested.group == 'com.android.support'
                    && !details.requested.name.contains('multidex') ) {
                details.useVersion "28.0.0"
            }
        }
    }
}

Agradecemos sua paciência enquanto investigamos o problema.

Olá a todos,
Não temos certeza de como consertar isso permanentemente. Enquanto isso, você pode executar:
./gradlew app:assembleAndroidTest

Também percebemos que estávamos tendo problemas com ./gradlew build portanto, estamos criando um PR que também corrigirá isso.

Obrigado por trazer esse assunto a nossa atenção.

Consegui fazer assembleAndroidTest funcionar injetando os marcadores de posição do manifesto no próprio react-native-onesignal (semelhante a https://github.com/geektimecoil/react-native-onesignal/issues/579#issuecomment- 442504553) e removendo a classe ApplicationTest em android/src/androidTest (que parece não ter efeito de qualquer maneira). Veja minha filial gradle-android-test para todas as mudanças.

Infelizmente, não consegui descobrir por que esse problema ocorre e por que essas alterações são necessárias. Pelo que pude descobrir, androidTest resolve para uma árvore de dependência diferente, que é o motivo pelo qual a fusão de manifesto se comporta de maneira diferente nesse caso.

@rgomezp Deixe-me saber se você tiver mais informações e se as alterações acima seriam adequadas. Nesse caso, abriria uma solicitação pull.

@sonicdoe ,
Obrigado pela correção @sonicdoe! Por favor, crie o PR

@rgomezp adicionando minha pergunta aqui desde que você fechou o outro tíquete

Esse diretório é necessário para ser incluído no pacote npm ou pode residir apenas no repositório GitHub?

Porque se a resposta for não, então esse problema está resolvido para mim.

Estou perguntando porque não sei quais são as boas práticas, mas não vejo outros pacotes RN com este diretório androidTest, então acho que ninguém está testando ou eles não incluem testes no pacote npm?

@ mtt87 ,
Não é necessário. Os criadores originais devem tê-lo incluído acidentalmente. Vamos removê-lo no próximo lançamento do RN OneSignal SDK. Obrigado!

Fantástico 😄 Obrigado

Olá a todos,
Estaremos lançando a versão mais recente do SDK react-native com correções em breve. Se você gostaria de testar as mudanças agora, simplesmente altere o seu react-native-onesignal em seu package.json para apontar para este repositório.

"react-native-onesignal":"geektimecoil/react-native-onesignal"

Gostaríamos muito de ouvir seus comentários antes do lançamento. Saúde!

EDITAR: IGNORE ESTAS INSTRUÇÕES COMO O PLUGIN FOI ENVIADO PARA NPM

Vejo que você já lançou a versão mais recente, v3.3.0 . Esta versão deve mudar alguma coisa sobre esse problema? Se eu repetir as etapas de reprodução da postagem original , estou executando exatamente o mesmo erro.

@sonicdoe ,
Tem certeza de que o reinstalou corretamente?

Editar: acabei de testar. Você está certo. Minhas desculpas aqui. Achei que o # 791 corrigisse isso. Vou discutir com @ jkasten2 sobre # 789

Esta página foi útil?
0 / 5 - 0 avaliações