问题
Flutter项目的安卓 manifest 文件回声明 app 的权限。考虑到权限可以是主 app 以及三方插件声明的,而且安卓项目引入了很多三方插件,那么如何确定这些权限是哪些三方插件引入的?
方案
Manifest Merger Report
【操作步骤】
- 执行一次项目构建(Build)。
-
构建完成后,在项目目录中找到以下文件:
/build/app/outputs/logs/manifest-merger-[build-variant]-report.txt
【如何分析】
这个 .txt 文件是一个详细的日志,记录了合并过程中的每一个决策。可以直接在文件中搜索你关心的权限名称,比如 POST_NOTIFICATIONS
uses-permission#android.permission.POST_NOTIFICATIONS
ADDED from [:vkm_car_control] /Users/vz4qt9/Workspace/dgapp_dms/DGAPP_216769_gmpi_mobile_app/build/vkm_car_control/intermediates/merged_manifest/debug/AndroidManifest.xml:12:5-77
MERGED from [com.microsoft.appcenter:appcenter-distribute:5.0.0] /Users/vz4qt9/.gradle/caches/transforms-3/c84f1acf45316aaeb1e3fa66d6d8184e/transformed/jetified-appcenter-distribute-5.0.0/AndroidManifest.xml:15:5-77
MERGED from [com.microsoft.appcenter:appcenter-distribute:5.0.0] /Users/vz4qt9/.gradle/caches/transforms-3/c84f1acf45316aaeb1e3fa66d6d8184e/transformed/jetified-appcenter-distribute-5.0.0/AndroidManifest.xml:15:5-77
android:name
ADDED from [:vkm_car_control] /Users/vz4qt9/Workspace/dgapp_dms/DGAPP_216769_gmpi_mobile_app/build/vkm_car_control/intermediates/merged_manifest/debug/AndroidManifest.xml:12:22-74
这个报告会明确告诉 android.permission.POST_NOTIFICATIONS 这个权限是由两个地方共同引入的:
- ADDED from [:vkm_car_control] 表示本地的模块引入
- 一个三方库 MERGED from [com.microsoft.appcenter:appcenter-distribute:5.0.0] 引入
ADDED (添加)
含义:ADDED 表示这个 XML 节点(在这里是 <uses-permission> 声明)是 第一次 被合并器发现并添加到最终的清单文件中的。
这行日志说明,合并器在处理众多 AndroidManifest.xml 文件时,首先 在你的本地模块 :vkm_car_control 的清单文件中遇到了 POST_NOTIFICATIONS 这个权限声明,并将其加入了正在构建的、最终的清单文件中。可以把 :vkm_car_control 看作是这个权限的“发起者”或“第一个引入者”。
MERGED (合并)
含义:MERGED 表示合并器在 后续 的处理中,又从另一个来源(另一个库或模块)发现了 完全相同 的 XML 节点。由于这个节点已经被 ADDED 过了,所以合并器不会重复添加,而是将这个新的来源信息“合并”到已存在的节点记录上。这用于记录所有请求了该权限的来源。








网友评论