React Native Android编译时AndroidManifest meta-data属性冲突如何解决?
问题解决方案
冲突原因说明
这个报错是因为你的项目同时引入了已停止维护的旧版expo依赖unimodules-react-native-adapter,和新版官方维护的expo-modules-core,两个包在AndroidManifest里声明了同名的meta-data属性,导致构建冲突。
取值选择
优先使用expo.modules.adapters.react.apploader.RNHeadlessAppLoader作为最终取值,unimodules相关包已经在expo SDK 44之后全面废弃,使用旧值会导致后续新的expo生态依赖运行异常。
具体配置步骤
- 第一步:打开
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="你的项目包名">
- 第二步:在
application节点内添加如下meta-data配置,覆盖冲突属性:
<meta-data android:name="org.unimodules.core.AppLoader#react-native-headless" android:value="expo.modules.adapters.react.apploader.RNHeadlessAppLoader" tools:replace="android:value" />
- 第三步:清理构建缓存重新编译:
cd android ./gradlew clean cd .. npx react-native run-android
根治方案(可选)
如果不需要兼容旧版unimodules插件,可以直接移除所有旧的unimodules相关依赖,从根源避免后续同类冲突:
- 卸载npm旧依赖:
npm uninstall unimodules unimodules-react-native-adapter # 如果你用yarn就执行 yarn remove unimodules unimodules-react-native-adapter
- 执行上述第三步的清理编译操作即可。
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

