Expo使用config插件修改AndroidManifest内容无效果如何解决
问题原因
- 根配置的
name字段修改生效不代表withAndroidManifest内的逻辑已执行:你直接在插件顶层修改了config对象的name属性,这个属性是Expo构建系统直接读取的全局配置,不需要走Android原生配置修改流程,因此无法证明withAndroidManifest回调内的代码正常运行。 - 你使用的
expo build:android是已废弃的经典构建服务,该服务不支持自定义Config Plugins对原生清单文件的修改逻辑,只有新版EAS Build支持完整的Config Plugins能力。 - 你的
setCustomConfigAsync3声明为async但内部无任何异步操作,不必要的异步声明可能导致mod处理流程异常。 - 插件注册格式存在冗余:无参数的插件直接注册即可,不需要嵌套两层数组。
解决步骤
- 首先修改插件代码,修正冗余问题:
import { AndroidConfig, withAndroidManifest } from "@expo/config-plugins"; const { removePermissions, } = AndroidConfig.Permissions; const withCustomConfig = (config) => { config.name = "NEWNAME" // 去掉不必要的async声明,内部没有异步操作不需要用async return withAndroidManifest(config, (config) => { config.modResults = setCustomConfig3(config, config.modResults); return config; }); }; // 去掉async声明 function setCustomConfig3(config, androidManifest) { removePermissions(androidManifest,["android.permission.SYSTEM_ALERT_WINDOW"]) // 可添加日志确认执行,本地预构建时能在控制台看到输出 console.log("已执行AndroidManifest修改,移除SYSTEM_ALERT_WINDOW权限") return androidManifest } const config = { name: "TEST", // 无参数插件不需要嵌套两层数组 plugins : [withCustomConfig], slug: "TEST", // 其余原有配置保持不变 } export default config;
- 弃用
expo build:android,改用EAS Build构建APK:先安装EAS CLI:npm install -g eas-cli,登录账号后执行eas build -p android --profile preview生成测试APK即可。 - 如果要本地验证修改是否生效,可执行
npx expo prebuild --clean命令,生成完整的android原生项目文件夹后,直接查看android/app/src/main/AndroidManifest.xml文件确认修改是否生效,不用等待云端构建完成。 - 若仍然不生效,检查是否有其他插件在你的插件执行后重新添加了对应权限/属性,可以调整插件在plugins数组中的顺序,把你的自定义插件放在数组最后执行,避免被其他插件覆盖修改结果。
内容的提问来源于stack exchange,提问作者hasan
相关产品推荐
相关产品推荐

