Expo EAS构建因react-native-google-mobile-ads失败求助
解决react-native-google-mobile-ads在Expo EAS托管构建中的AndroidManifest冲突问题
问题原因
构建报错是因为com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT这个meta-data存在值冲突:你的项目AndroidManifest中设为true,而react-native-google-mobile-ads库的Manifest中设为false,导致构建时Manifest合并失败。
解决步骤(Expo托管工作流)
托管工作流无法直接修改本地原生文件,所有配置需通过app.json或app.config.js完成:
- 给AndroidManifest添加tools命名空间
在app.json的expo.android.androidManifest下,为manifest节点补充xmlns:tools属性:
{ "expo": { "android": { "androidManifest": { "manifest": { "xmlns:tools": "http://schemas.android.com/tools" } } } } }
- 覆盖冲突的meta-data配置
在expo.android.androidManifest.application.metaData中添加(或修改)对应meta-data元素,通过tools:replace强制覆盖冲突值:
{ "expo": { "android": { "androidManifest": { "application": { "metaData": [ { "name": "com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT", "value": "true", // 可根据需求设为true或false,建议和原项目配置保持一致 "tools:replace": "android:value" } ] } } }, "...": "保留原有其他配置" }, "react-native-google-mobile-ads": { "android_app_id": "ca-app-pub-************~**********", "ios_app_id": "ca-app-pub-***********/**********" } }
- 清理残留依赖(可选)
如果项目还残留expo-admob依赖,先卸载并清理缓存:
npm uninstall expo-admob npm cache clean --force npm install
- 重新触发EAS构建
提交配置修改后,重新运行构建命令:
eas build --platform android
说明
tools:replace="android:value"的作用是告知Android构建工具,当该meta-data出现值冲突时,优先使用当前配置中的值覆盖库提供的默认值,以此解决Manifest合并冲突。
内容的提问来源于stack exchange,提问作者AnyamBorogass
相关产品推荐
相关产品推荐

