Expo 46:eas build中blockedPermissions配置不生效问题排查
Expo 46下EAS Build未移除REQUEST_INSTALL_PACKAGES权限的排查方案
以下是几个可能的原因和对应的解决办法:
构建缓存残留
EAS Build默认会缓存构建资源,旧的AndroidManifest可能未被替换。执行构建时加上--clear-cache参数强制清空缓存:eas build --platform android --clear-cacheapp.json配置未生效
先确认blockedPermissions的层级是否正确,必须放在expo.android节点下:{ "expo": { "android": { "blockedPermissions": ["android.permission.REQUEST_INSTALL_PACKAGES"] } } }同时检查代码提交情况,确保修改后的app.json已经推送到EAS构建使用的分支上。
Expo 46的blockedPermissions存在局限性
这个版本的blockedPermissions可能无法覆盖第三方依赖自动添加的权限。直接在生成的AndroidManifest.xml中手动声明移除:
先在根标签添加tools命名空间:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.your.app">然后添加权限移除规则:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove" />第三方依赖注入权限
有些npm包会在构建时自动添加权限。可以执行expo prebuild后,查看生成的AndroidManifest文件,定位是哪个依赖引入了该权限。也可以在android/app/build.gradle中添加gradle规则强制排除:android { packagingOptions { permissions { exclude 'android.permission.REQUEST_INSTALL_PACKAGES' } } }EAS构建环境版本不一致
确保EAS Build使用的Expo CLI版本和本地一致,在eas.json中指定版本:{ "build": { "production": { "android": { "expoCliVersion": "46.0.0" } } } }
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

