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

React Native旧应用构建时Camera权限被自动添加至AndroidManifest问题排查

React Native旧应用中CAMERA权限自动插入的排查方案

问题概述

我们维护的旧版React Native应用,未在主AndroidManifest.xml中显式声明CAMERA权限(依据react-native-image-picker库文档说明无需手动添加),但构建后发现该权限被自动插入到生成的manifest文件内,需定位其来源。

主工程AndroidManifest.xml(原文件)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.tego">

    <uses-permission android:name="android.permission.INTERNET" />
    <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_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.VIBRATE" />

    <!-- If "android.permission.CAMERA" is added, explicit request is required for react-native-image-picker -->

构建后生成的AndroidManifest.xml(片段)

<uses-permission android:name="android.permission.VIBRATE" />
...
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Required by older versions of Google Play services to create IID tokens -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

排查步骤

  • 查看Manifest合并报告:Android构建时会自动合并所有依赖库的Manifest文件,权限大概率来自第三方依赖。执行以下命令生成合并详情报告:

    ./gradlew app:mergeDebugAndroidManifest --info
    

    报告中会明确标注每个权限的来源库,重点排查除react-native-image-picker外的其他依赖(从构建后新增的USE_BIOMETRIC、C2DM_RECEIVE等权限来看,Google Play Services相关组件、生物识别库、推送服务库都是可疑对象)。

  • 校验react-native-image-picker实际配置:库文档描述可能与旧版本不符,直接检查node_modules/react-native-image-picker/android/src/main/AndroidManifest.xml,确认该库是否内部声明了CAMERA权限。

  • 检查Gradle构建配置:部分构建插件或自定义Gradle脚本可能自动注入权限。查看项目根目录及app模块的build.gradle文件,排查是否存在manifestPlaceholders、权限自动注入的配置,或引入了权限处理插件。

  • 分析依赖树:执行Gradle命令查看完整依赖关系,定位包含相机权限的依赖:

    ./gradlew app:dependencies
    

    重点查找名称含camera的依赖项,或间接依赖相机库的组件。

临时移除权限方案

若确认应用无需CAMERA权限,可在主AndroidManifest.xml中通过tools:node="remove"强制移除:

<uses-permission android:name="android.permission.CAMERA" tools:node="remove" />

内容的提问来源于stack exchange,提问作者Marty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:12:02