説明
./gradlew assembleAndroidTest
を使用してAndroidテストアプリケーションをアセンブルすると、マニフェストのマージが失敗し、次のエラーが発生します。
> 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.
同様の問題が2018年7月に#579で報告され、その後2019年1月に明確な解決策なしにクローズされました。
環境
react-native-onesignalv3.2.14を使用するexamples/RNOneSignal@31b5242
のサンプルプロジェクト。
再現する手順
git clone https://github.com/geektimecoil/react-native-onesignal.git
cd react-native-onesignal
git checkout 31b52420c807c22405e70b44800e20f3a8e3456e
cd examples/RNOneSignal
yarn
cd android
./gradlew assembleAndroidTest
これにも遭遇します。
@sonicdoe productFlavors
ますか? その場合は、次のようにコマンドを変更する必要があります。
buildType = "debug"
productFlavor = "dev"
./gradlew assembleDevDebugAndroidTest
いいえ、 examples/RNOneSignal@31b5242
のサンプルプロジェクト(これを再現するために使用しました)は、製品フレーバーを使用していません。
私もこれに遭遇しています-ランダムなグーグル検索はこの問題を示しましたhttps://github.com/crosswalk-project/cordova-plugin-crosswalk-webview/issues/207これはbuildToolsVersion:28.0.0の使用を示唆しています。
すでにこれを行っていますが、ビルド中に警告に気づきました
<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"/>
このプロジェクトがダウングレードを強制しているところ;(
私の個人的な問題は、 gradlew
コマンド(上記)の後に適切なtask-name
を使用してビルドしたときに解決されました。
FWIW、これが私の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"
}
}
}
}
問題を調査する間、今しばらくお待ちいただきますようお願いいたします。
Howdy y'all、
現在、これを恒久的に修正する方法はわかりません。 それまでの間、次のコマンドを実行できます。
./gradlew app:assembleAndroidTest
また、 ./gradlew build
問題が発生していることに気付いたので、これも修正するPRを作成しています。
これを私たちの注意を引いてくれてありがとう。
マニフェストプレースホルダーをreact-native-onesignal自体に挿入することでassembleAndroidTest
を機能させることができました(https://github.com/geektimecoil/react-native-onesignal/issues/579#issuecomment-と同様) 442504553)そしてandroid/src/androidTest
のApplicationTest
クラスを削除します(とにかく効果がないようです)。 すべての変更については、私のgradle-android-test
ブランチを参照してください。
残念ながら、なぜこの問題が発生するのか、なぜこれらの変更が必要なのかを理解することができませんでした。 私が知る限り、 androidTest
は別の依存関係ツリーに解決されるため、その場合、マニフェストのマージの動作は異なります。
@rgomezp他に洞察があり、上記の変更で問題がないかどうかを
@sonicdoe 、
@sonicdoeを修正してくれてありがとう! PRを作成してください
@rgomezpは、他のチケットを閉じたので、ここに私の質問を追加します
このディレクトリはnpmパッケージに含める必要がありますか、それともGitHubリポジトリにのみ存在できますか?
答えがノーの場合、この問題は私のために解決されるからです。
グッドプラクティスがわからないので質問していますが、このディレクトリandroidTestを持つ他のRNパッケージが表示されないので、誰もテストしていないか、npmパッケージにテストが含まれていないと思いますか?
@ mtt87 、
必要ありません。 元の作成者が誤ってそれを含めたに違いありません。 今後のRNOneSignalSDKリリースで削除されます。 ありがとう!
素晴らしい😄ありがとう
Howdy y'all、
間もなく修正されたreact-nativeSDKの最新バージョンをリリースする予定です。 今すぐ変更をテストしたい場合は、package.jsonのreact-native-onesignalを変更して、このリポジトリを指すようにしてください。
"react-native-onesignal":"geektimecoil/react-native-onesignal"
リリース前にフィードバックをお聞かせください。 乾杯!
編集:プラグインがNPMにプッシュされたため、これらの指示は無視してください
@sonicdoe 、
正しく再インストールしましたか?
編集:テスト済みです。 あなたは正しいです。 ここでお詫び申し上げます。 #791で修正されたと思いました。 #789について@ jkasten2と話し合います
最も参考になるコメント
問題を調査する間、今しばらくお待ちいただきますようお願いいたします。