如何移除Expo托管工作流中安卓应用的非必要权限?
多余权限无法移除解决方案
SDK 41版本通过EAS构建时,默认会自动合并所有第三方依赖声明的权限,仅声明需要的权限不会主动移除默认/依赖自带的多余权限,按以下步骤操作即可解决:
1. 修正构建配置
你之前的配置存在两处错误:一是权限配置需要放在app.json而非app.js中,二是缺少移除多余权限的配置项。
在app.json的android字段下添加blockedPermissions配置,明确列出所有需要禁用的权限:
"android": { "permissions": [ "WRITE_EXTERNAL_STORAGE", "READ_EXTERNAL_STORAGE" ], "blockedPermissions": [ "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_NETWORK_STATE", "android.permission.INTERNET", "android.permission.MODIFY_AUDIO_SETTINGS", "android.permission.READ_PHONE_STATE", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.VIBRATE", "android.permission.WAKE_LOCK", "com.google.android.c2dm.permission.RECEIVE", "com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE" ] }
注:READ_INTERNAL_STORAGE不属于Android官方权限,无需配置,Async Storage仅需要读写外部存储两个权限即可正常运行。
如果是原生工作流(bare workflow),直接修改android/app/src/main/AndroidManifest.xml,添加tools:node="remove"属性强制移除不需要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名"> <!-- 保留所需权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 强制移除多余权限,不需要的都按以下格式添加 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" /> </manifest>
2. 清理缓存重新构建
不要直接修改package-lock.json,先确认package.json中已经移除expo-location等不需要的依赖,删除node_modules和package-lock.json后重新执行npm install。
执行构建时添加参数清理EAS缓存,避免旧缓存导致配置不生效:eas build --platform android --clear-cache
构建完成后可以用APK分析工具检查最终APK的权限列表,确认多余权限已经被移除。
内容的提问来源于stack exchange,提问作者Hristo Ivanov
相关产品推荐
相关产品推荐

