升级Android Studio与Gradle后Manifest合并失败求助
嘿,这个问题我太熟悉了!你遇到的是两个依赖库(com.awareframework:aware-core:4.0.555和com.github.denzilferreira:aware-client:4.0.555)都声明了同一个com.aware.ui.PermissionsHandler Activity,而且给它设置了不同的launchMode值,导致Manifest合并工具卡壳不知道该用哪个。下面给你几个实用的解决办法:
办法1:在主Manifest里强制指定属性
最简单的方式是在你自己项目的AndroidManifest.xml里重新声明这个Activity,明确你想要的launchMode,同时告诉合并工具替换掉依赖库中的冲突值:
<!-- 先确保Manifest根标签里有tools命名空间,如果没有就加上 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <!-- 然后添加这个Activity声明 --> <activity android:name="com.aware.ui.PermissionsHandler" android:launchMode="singleTop" <!-- 这里选你需要的模式,比如保留aware-core的singleTop,或者换成另一个库的取值 --> tools:replace="android:launchMode" /> </manifest>
tools:replace的作用就是告诉合并工具:“听我的,用我这里的launchMode值覆盖掉其他地方的冲突值”。
办法2:移除其中一个冗余的Activity声明
如果其中一个库的这个Activity声明对你的项目没用,你可以直接在主Manifest里把它删掉:
<activity android:name="com.aware.ui.PermissionsHandler" tools:node="remove" />
这样合并工具就会只保留另一个库的Activity声明。不过用这个办法前,最好确认一下移除其中一个不会影响功能哦。
办法3:检查是否存在重复依赖
看这两个库的版本号都是4.0.555,说不定aware-client已经包含了aware-core的功能?你可以先排查一下依赖树,看看是不是重复引入了。
在Android Studio里,你可以打开File > Project Structure > Modules,选中你的app模块,切换到Dependencies标签查看;或者在终端运行这个命令:
./gradlew app:dependencies
如果发现aware-client已经依赖了aware-core,那你直接去掉单独的aware-core依赖就行,这样就不会有两个Manifest声明打架了。
内容的提问来源于stack exchange,提问作者Ricardo Faria

