描述
使用./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 月关闭,没有任何明显的解决方案。
环境
examples/RNOneSignal@31b5242
的示例项目使用 react-native-onesignal v3.2.14。
重现步骤
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 = "调试"
productFlavor = "开发"
./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"
}
}
}
}
感谢您在我们调查问题期间的耐心等待。
大家好,
我们目前不确定如何永久解决此问题。 同时,您可以运行:
./gradlew app:assembleAndroidTest
我们也意识到我们遇到了./gradlew build
问题,所以我们正在创建一个 PR 来解决这个问题。
谢谢让我们注意到这个。
通过将清单占位符注入 react-native-onesignal 本身(类似于 https://github.com/geektimecoil/react-native-onesignal/issues/579#issuecomment-),我能够让assembleAndroidTest
工作442504553),并删除ApplicationTest
类android/src/androidTest
(这似乎有反正也没效果)。 请参阅我的gradle-android-test
分支以了解所有更改。
不幸的是,我无法弄清楚为什么会出现此问题以及为什么需要进行这些更改。 据我所知, androidTest
解析为不同的依赖树,这就是清单合并在这种情况下表现不同的原因。
@rgomezp让我知道您是否有更多见解以及上述更改是否
@sonicdoe ,
感谢您修复@sonicdoe! 请创建 PR
@rgomezp在这里添加我的问题,因为您关闭了另一张票
这个目录是否必须包含在 npm 包中,还是只能存在于 GitHub 存储库中?
因为如果答案是否定的,那么这个问题就为我解决了。
我问是因为我不知道什么是好的做法,但我没有看到其他带有此目录 androidTest 的 RN 包,所以我猜要么没有人在测试,要么他们没有在 npm 包中包含测试?
@mtt87 ,
没有必要。 原作者一定是不小心把它包含了。 我们将在即将发布的 RN OneSignal SDK 版本中删除它。 谢谢!
太棒了😄 谢谢
大家好,
我们将很快发布带有修复程序的最新版本的 react-native SDK。 如果您现在想测试更改,只需将 package.json 中的 react-native-onesignal 更改为指向此存储库。
"react-native-onesignal":"geektimecoil/react-native-onesignal"
希望在发布之前听到您的反馈。 干杯!
编辑:忽略这些说明,因为插件已被推送到 NPM
@sonicdoe ,
你确定你重新安装正确吗?
编辑:刚刚测试。 你是对的。 我在这里道歉。 我以为#791 解决了这个问题。 我将与@jkasten2讨论 #789
最有用的评论
感谢您在我们调查问题期间的耐心等待。