React Native集成react-native-admob时run-android出现Manifest合并错误
解决React Native 0.59.9集成react-native-admob时的Android清单合并冲突问题
我之前在React Native旧版本里集成admob的时候也碰到过一模一样的问题,本质就是Android Support库和AndroidX库的冲突——你的RN 0.59.9默认还在使用旧的Android Support框架,但你用的react-native-admob@2.0.0-beta.5已经切换到了AndroidX,两者的appComponentFactory属性在清单合并时“打架”,所以才报这个错。
下面给你两个可行的解决思路:
方案一:临时绕过冲突(快速解决)
按照错误提示直接修改AndroidManifest.xml就能快速编译通过:
- 打开
android/app/src/main/AndroidManifest.xml,在根<manifest>标签里添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.awesomeproject">
- 在
<application>标签里添加tools:replace属性,强制指定用Support库的工厂类:
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="false" android:theme="@style/AppTheme" tools:replace="android:appComponentFactory" android:appComponentFactory="android.support.v4.app.CoreComponentFactory">
这个方法能快速搞定当前编译问题,但后续如果引入更多依赖AndroidX的库,可能还会出现其他兼容问题,适合临时救急。
方案二:迁移项目到AndroidX(推荐长期方案)
React Native后续版本都全面切换到AndroidX了,迁移后能从根源上避免这类冲突:
- 打开
android/gradle.properties,添加以下两行配置:
android.useAndroidX=true android.enableJetifier=true
- 检查
android/build.gradle里的gradle构建工具版本,至少要3.2.0以上(推荐用3.2.1):
buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.2.1' // 其他依赖保持不变 } }
- 安装jetifier工具来自动转换第三方依赖到AndroidX:
npm install --save-dev jetifier
- 在
package.json的scripts里添加postinstall脚本,确保每次安装依赖后自动转换:
"scripts": { "start": "react-native start", "test": "jest", "postinstall": "jetifier" }
- 手动执行一次转换:
npx jetify
- 最后重新运行项目:
react-native run-android
另外如果你暂时不想迁移AndroidX,也可以考虑降级react-native-admob到1.3.2版本,这个版本还是基于Android Support库开发的,不会有冲突,但功能不如新版完善。
内容的提问来源于stack exchange,提问作者Nameer
相关产品推荐
相关产品推荐

