You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo 46:eas build中blockedPermissions配置不生效问题排查

Expo 46下EAS Build未移除REQUEST_INSTALL_PACKAGES权限的排查方案

以下是几个可能的原因和对应的解决办法:

  • 构建缓存残留
    EAS Build默认会缓存构建资源,旧的AndroidManifest可能未被替换。执行构建时加上--clear-cache参数强制清空缓存:

    eas build --platform android --clear-cache
    
  • app.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:31:07