集成Google Play服务定位库时Manifest合并失败求助
解决Android Manifest合并冲突(support版本不一致)
嘿,这个问题我碰到过好多次了!本质就是你项目里的Android Support库版本不统一导致的——com.android.support:design:25.4.0和com.android.support:support-v4:26.1.0这两个库都在Manifest里声明了android.support.VERSION的元数据,但版本号不一样,Gradle合并Manifest时就出现了冲突。
给你两种靠谱的解决办法:
办法一:统一所有Support库版本(从根源解决,推荐)
这种方法能避免后续出现更多类似的版本冲突问题,步骤如下:
- 打开项目根目录下的
build.gradle(注意不是app模块下的那个),在allprojects区块里添加版本统一的策略:
allprojects { repositories { google() jcenter() // 或者你用到的其他仓库 } // 添加这段强制统一support版本的配置 configurations.all { resolutionStrategy { // 把所有support库都强制指定为同一个版本,比如你想要的26.1.0 force 'com.android.support:support-v4:26.1.0' force 'com.android.support:design:26.1.0' // 如果还有其他support库(比如appcompat、cardview),也一起添加进来 } } }
- 更优雅的方式是用变量管理版本号:
在根build.gradle里定义版本变量:
ext { supportLibVersion = '26.1.0' }
然后在app模块的build.gradle里引用这个变量:
dependencies { implementation "com.android.support:design:${supportLibVersion}" implementation "com.android.support:support-v4:${supportLibVersion}" // 其他support库也用同样的方式引用变量 }
办法二:用tools:replace强制替换(快速临时修复)
如果只是想快速解决当前冲突,可以用这种方式:
- 先确保你的
AndroidManifest.xml根标签引入了tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名">
- 在Manifest里添加指定版本的meta-data标签,并用
tools:replace覆盖冲突的值:
<meta-data android:name="android.support.VERSION" android:value="26.1.0" <!-- 选择你想要保留的版本号 --> tools:replace="android:value" />
小提醒:优先用办法一,统一版本能从根本上避免后续其他support库之间的不兼容问题,减少潜在的bug。
内容的提问来源于stack exchange,提问作者Dehodson
相关产品推荐
相关产品推荐

