背景:我在一个demo里面导入一个依赖的时候,报了如下错误:
> Task :app:processDebugManifest FAILED
[com.test.haha:pay-s:1.1.5] /Users/xxxx/.gradle/caches/transforms-1/files-1.1/pay-s-1.1.5.aar/58880848b778871b82d9587be82cd8c2/AndroidManifest.xml:14:9-63 Error:
Missing 'package' key attribute on element package at [com.test.haha:pay-s:1.1.5] AndroidManifest.xml:14:9-63
[com.test.haha:pay-s:1.1.5] /Users/xxxx/.gradle/caches/transforms-1/files-1.1/pay-s-1.1.5.aar/58880848b778871b82d9587be82cd8c2/AndroidManifest.xml:17:9-52 Error:
Missing 'package' key attribute on element package at [com.test.haha:pay-s:1.1.5] AndroidManifest.xml:17:9-52
[com.test.haha:pay-s:1.1.5] /Users/xxxx/.gradle/caches/transforms-1/files-1.1/pay-s-1.1.5.aar/58880848b778871b82d9587be82cd8c2/AndroidManifest.xml Error:
Validation failed, exiting
See http://g.co/androidstudio/manifest-merger for more information about the manifest merger.
Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
思考:
1. 看日志知道是manifest的属性冲突了,按照惯性思维肯定是要去app模块的AndroidManifest.xml添加一个replace属性。于是这么做了,但是并未解决问题
然后运行了(gradlew processDebugManifest --stacktrace) 这个命令查看细节,也并未解决。
2.我想起另一个项目也是引用了这个依赖为什么就没报错呢?难道版本不一样?我去主项目里面看了下版本一样都是有这个属性
<queries>
<!-- 正式环境 -->
<package android:name="com.eg.android.AlipayGphone" />
<!-- <!– 沙箱环境 –> -->
<!-- <package android:name="com.eg.android.AlipayGphoneRC" /> -->
<package android:name="hk.alipay.wallet" />
</queries>
所以排除了版本导致的问题。
3. 于是网上搜了一下问题:
看到了如下标题
4.1.3编译不通过,提示Missing 'package' key attribute on element package #26
这个问题的链接:https://github.com/gzu-liyujiang/Android_CN_OAID/issues/26
其中有这个描述:
到这里答案就清楚了了,我去看了gradle版本 还是3.2.0
于是我改成如下:
classpath "com.android.tools.build:gradle:4.0.0"
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
这问题就就修复了。
总结:起始一般不会考虑到这个问题是由gradle版本引起导致的。而且这个问题我记得以前遇到类似的忘了,但是再次遇到这类问题有会多一种解决思路。