RN v0.55集成react-native-device-info v0.21.5遇Manifest合并失败求助
解决React Native Manifest合并冲突问题
嘿,这个Manifest合并冲突的问题我太熟了,在React Native项目里经常碰到,主要是依赖的Android Support库版本不统一闹的,我来一步步帮你搞定它。
问题根源
你看错误提示里说的,com.android.support:cardview-v7:25.3.1 这个库内部带了版本为26.0.1的android.support.VERSION元数据,而你项目里的com.android.support:support-v4:26.1.0用的是另一个版本,两个版本撞在一起,Manifest合并的时候就报错了。另外你的react-native-device-info v0.21.5默认配置的SDK版本也和项目不一致,也可能添乱。
解决方案
我们分三步来解决:统一Support库版本、添加Manifest覆盖规则、同步第三方库的构建配置。
1. 强制所有Support库用同一个版本
在你的app/build.gradle里,添加一段配置,让所有依赖的Support库都统一用26.1.0版本(和你项目里support-v4的版本对齐),同时把appcompat的版本也改成一致的:
// 加在android块的上方,统一第三方库的SDK配置 ext { compileSdkVersion = 26 buildToolsVersion = "26.0.1" targetSdkVersion = 25 } android { // 保留你原来的android配置内容 compileSdkVersion 26 buildToolsVersion "26.0.1" // ... 其他配置不变 ... } // 新增这段配置,放在android块后面,强制统一support库版本 configurations.all { resolutionStrategy.eachDependency { details -> def requested = details.requested if (requested.group == 'com.android.support') { // 除了multidex,所有support库都用26.1.0 if (!requested.name.startsWith("multidex")) { details.useVersion '26.1.0' } } } } dependencies { // ... 保留其他依赖,把appcompat的版本改成26.1.0 compile "com.android.support:appcompat-v7:26.1.0" // ... 其他依赖不变 ... }
2. 修改AndroidManifest.xml添加覆盖规则
按照错误提示的建议,在application标签里加上tools:replace="android:value",用来覆盖冲突的元数据值:
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true" android:theme="@style/AppTheme" tools:replace="android:value"> <!-- 新增这一行 --> <!-- 原来的activity、meta-data等内容都保留 --> </application>
3. 清理缓存重新构建
做完上面的修改后,先清理一下构建缓存,避免旧的依赖残留:
./gradlew clean
然后重新运行你的RN项目:
react-native run-android
这样应该就能顺利构建了!
内容的提问来源于stack exchange,提问作者Imran Noor
相关产品推荐
相关产品推荐

