如何查找React Native App中使用的所有权限?
RN应用权限排查与冗余权限清理方案
1 全量采集已声明的所有权限
你需要先拿到应用最终构建版本的完整权限列表,不要只看本地源码的配置文件,第三方原生依赖会自动注入额外权限:
- Android端:源码的权限声明在
android/app/src/main/AndroidManifest.xml,最终合并所有依赖权限的构建产物路径为app/build/intermediates/merged_manifest/release/AndroidManifest.xml,这个文件里的权限就是上架Play Store的版本实际携带的所有权限。 - iOS端:源码的权限声明在
ios/[项目名]/Info.plist,所有带NS*UsageDescription后缀的字段都是权限声明,构建release包后可以直接查看产物中的Info.plist确认全量权限,也可以在Xcode的「Info」标签下的「Custom iOS Target Properties」面板直接查看。
2 排查实际使用的权限,筛选冗余项
- 先排查RN侧调用:全局搜索代码中的权限相关调用,包括
react-native-permissions库的请求方法、原生模块封装的权限API,还有RN内置API比如定位Geolocation、媒体读写CameraRoll、麦克风相关调用,把这些调用对应的权限标记为「在用」。 - 再排查原生侧调用:
- Android端全局搜索
ContextCompat.checkSelfPermission、ActivityCompat.requestPermissions相关的权限申请代码,同时核对你接入的第三方SDK官方要求的必填权限,非必填的直接标记为冗余。 - iOS端全局搜索
requestWhenInUseAuthorization这类权限申请方法,同时核对第三方SDK的权限要求,非必要的标记为冗余。
- Android端全局搜索
- 动态校验兜底:打release包后走通App所有功能路径,记录所有弹出的权限申请弹窗,所有触发过的权限就是实际在用的,全程没触发的就是可移除的冗余权限。
3 冗余权限移除&上架合规配置
- Android端:如果第三方依赖自动注入了多余权限,可以在本地
AndroidManifest.xml中加remove标记强制移除,示例如下,注意要在manifest根节点加xmlns:tools="http://schemas.android.com/tools"属性才能生效:<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" /> - iOS端:直接删掉
Info.plist里冗余的NS*UsageDescription字段即可,如果是Pod依赖自动注入的权限,可以在Podfile中加post_install钩子批量移除不需要的权限声明。 - 上架前预校验:
- Play Store提交前可以用App Bundle的「App bundle explorer」查看最终的权限列表,平台会自动检测敏感权限的使用场景,提前移除未使用的敏感权限即可避免风险预警。
- App Store提交前用Xcode的「Validate App」功能做预校验,会提前检测未提供使用说明的权限,提前移除冗余权限就不会触发审核预警。
注意:所有保留的权限都要在隐私政策里明确说明使用目的,和权限申请弹框的描述保持一致,避免因权限用途不明确被拒。
内容的提问来源于stack exchange,提问作者yasirtrimulabs
相关产品推荐
相关产品推荐

