React Native - gradle,清单合并错误
React Native - gradle, manifest merge error
在尝试构建我的 android React 本机应用程序时,我收到此错误
Execution failed for task ':app:processReleaseMainManifest'.
> Manifest merger failed : Attribute meta-data#org.unimodules.core.AppLoader#react-native-headless@value value=(org.unimodules.adapters.react.apploader.RNHeadlessAppLoader) from [:unimodules-react-native-adapter] AndroidManifest.xml:14:13-88
is also present at [:expo-modules-core] AndroidManifest.xml:14:13-86 value=(expo.modules.adapters.react.apploader.RNHeadlessAppLoader).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:12:9-14:91 to override.
现在我知道,就我而言,node_modules 文件夹中的两个清单文件之间存在冲突:
> cd <YOUR_PROJECT_DIR>/node_modules
> grep -r -i RNHeadlessAppLoader | grep AndroidMan
./expo-modules-core/android/src/main/AndroidManifest.xml:
android:value="expo.modules.adapters.react.apploader.RNHeadlessAppLoader" />
./@unimodules/react-native-adapter/android/src/main/AndroidManifest.xml:
android:value="org.unimodules.adapters.react.apploader.RNHeadlessAppLoader"/>
解决方案
- 将这样的
xmlns:tools="http://schemas.android.com/tools"
属性添加到 <YOUR_PROJECT_DIR>/android/app/src/main/AndroidManifest.xml
中的 <manifest>
标签
- 在清单文件的
application
部分添加此类标签
<meta-data
tools:replace="android:value"
android:name="org.unimodules.core.AppLoader#react-native-headless"
android:value="org.unimodules.adapters.react.apploader.RNHeadlessAppLoader"/>
更新到上一个 expo SDK 似乎对我有用(版本 43)。因为他们用 expo
替换了 react-native-unimodules
包。
我从 expo 42 更新到 expo 43 时遇到了这个问题(我已经弹出但仍在使用一些 expo 模块)
我卸载 react-native-unimodules
并备份我的 android 文件夹
然后我运行expo prebuild
(以一些错误结束,但最后,它工作正常)
它会生成新的android文件夹,然后我慢慢将它与旧的android文件夹进行比较,然后添加我需要的东西
终于,我成功拿到了运行宁
expo 43 似乎比 expo 42 快,所以我认为这是值得的问题
在尝试构建我的 android React 本机应用程序时,我收到此错误
Execution failed for task ':app:processReleaseMainManifest'.
> Manifest merger failed : Attribute meta-data#org.unimodules.core.AppLoader#react-native-headless@value value=(org.unimodules.adapters.react.apploader.RNHeadlessAppLoader) from [:unimodules-react-native-adapter] AndroidManifest.xml:14:13-88
is also present at [:expo-modules-core] AndroidManifest.xml:14:13-86 value=(expo.modules.adapters.react.apploader.RNHeadlessAppLoader).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:12:9-14:91 to override.
现在我知道,就我而言,node_modules 文件夹中的两个清单文件之间存在冲突:
> cd <YOUR_PROJECT_DIR>/node_modules
> grep -r -i RNHeadlessAppLoader | grep AndroidMan
./expo-modules-core/android/src/main/AndroidManifest.xml:
android:value="expo.modules.adapters.react.apploader.RNHeadlessAppLoader" />
./@unimodules/react-native-adapter/android/src/main/AndroidManifest.xml:
android:value="org.unimodules.adapters.react.apploader.RNHeadlessAppLoader"/>
解决方案
- 将这样的
xmlns:tools="http://schemas.android.com/tools"
属性添加到<YOUR_PROJECT_DIR>/android/app/src/main/AndroidManifest.xml
中的 - 在清单文件的
application
部分添加此类标签
<manifest>
标签
<meta-data
tools:replace="android:value"
android:name="org.unimodules.core.AppLoader#react-native-headless"
android:value="org.unimodules.adapters.react.apploader.RNHeadlessAppLoader"/>
更新到上一个 expo SDK 似乎对我有用(版本 43)。因为他们用 expo
替换了 react-native-unimodules
包。
我从 expo 42 更新到 expo 43 时遇到了这个问题(我已经弹出但仍在使用一些 expo 模块)
我卸载 react-native-unimodules
并备份我的 android 文件夹
然后我运行expo prebuild
(以一些错误结束,但最后,它工作正常)
它会生成新的android文件夹,然后我慢慢将它与旧的android文件夹进行比较,然后添加我需要的东西
终于,我成功拿到了运行宁
expo 43 似乎比 expo 42 快,所以我认为这是值得的问题