Flutter Android应用未声明uses-permission权限来源查询方法
Flutter Android 额外权限来源定位方法
方法1:查看Android Studio合并清单面板
- 用Android Studio打开项目根目录下的
android文件夹 - 打开主模块的
src/main/AndroidManifest.xml文件 - 点击编辑区底部的Merged Manifest标签页
- 左侧会展示最终合并后的所有权限,点击任意权限,右侧就会显示该权限的来源模块/依赖包信息,可精确到具体的依赖版本
方法2:导出Manifest合并报告
如果不用Android Studio,也可以通过Gradle命令生成完整的合并日志:
- 进入项目的
android目录 - 执行以下命令生成Release模式的合并报告:
# Mac/Linux ./gradlew app:mergeReleaseManifest # Windows gradlew app:mergeReleaseManifest
- 报告生成后可以在以下路径找到:
app/build/outputs/logs/manifest-merger-release-report.txt
打开文件后搜索对应的权限名,就能看到完整的引入链路,明确是哪个第三方依赖引入的额外权限。
多余权限移除方案
如果确认某权限是不需要的,可以在主项目的AndroidManifest.xml中主动声明移除:
- 首先在manifest根标签添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="myPackage">
- 针对要移除的权限添加
tools:node="remove"属性即可,例如移除蓝牙权限:
<uses-permission android:name="android.permission.BLUETOOTH" tools:node="remove" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" tools:node="remove" />
注:额外权限出现的原因是Android原生的Manifest合并机制,你依赖的Flutter插件原生层的AndroidManifest中声明的权限会自动合并到主项目的最终清单中,无需你手动声明。
内容的提问来源于stack exchange,提问作者rulila52
相关产品推荐
相关产品推荐

