Flutter Android:排查FOREGROUND_SERVICE_MEDIA_PROJECTION使用来源
问题场景
Google Play要求说明FOREGROUND_SERVICE_MEDIA_PROJECTION权限的使用位置,但执行grep -nr "android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION"后,仅在build目录的合并Manifest、打包文件及合并报告中找到匹配项,无法确定权限的来源和实际代码使用位置。
解决步骤
查看Manifest合并报告定位权限来源
打开./build/app/outputs/logs/manifest-merger-release-report.txt,找到第1294行的uses-permission#android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION条目。报告中会明确标注该权限的来源:- 如果是本地代码添加,会指向
src/main/AndroidManifest.xml; - 如果来自第三方依赖,会显示对应的aar或库名称。
- 如果是本地代码添加,会指向
检查Manifest合并溯源文件
查看./build/app/intermediates/manifest_merge_blame_file/release/manifest-merger-blame-release-report.txt的第101行,这里会标注该权限行的具体来源文件(比如某个依赖的Manifest或本地Manifest),帮你快速定位是谁添加了这个权限。搜索代码中MediaProjection相关的实际使用
这个权限用于支持基于MediaProjection的前台服务(通常是屏幕录制、截图类功能),直接搜索代码中相关的API调用:# 搜索MediaProjection相关类和前台服务启动方法 grep -r "MediaProjectionManager\|MediaProjection\|startForegroundService" ./app/src/main/java也可以在Android Studio中全局搜索这些关键词,找到启动对应前台服务的代码位置,这就是权限的实际使用场景。
排查第三方依赖
如果权限来自第三方库,先通过依赖树确认可疑库:./gradlew app:dependencies然后搜索所有解压后的aar文件,定位具体哪个依赖添加了权限:
grep -r "FOREGROUND_SERVICE_MEDIA_PROJECTION" ./app/build/intermediates/exploded-aar
内容的提问来源于stack exchange,提问作者Chris

