flutter上架权限问题总结
1. Android 权限问题
-
android.permission.QUERY_ALL_PACKAGES被合并进 APK
虽然主项目未声明,但极光推送(jpush 5.7.0)SDK 在其自身的AndroidManifest.xml中声明了该权限,Manifest 合并时自动加入。已通过tools:node="remove"明确移除,最终 APK 未包含该敏感权限。<uses-permission android:name="android.permission.ACCESS_QUERY_ALL_PACKAGES" tools:node="remove"/>并确保在 manifest 的根节点加上
-
android.permission.ACCESS_BACKGROUND_LOCATION被合并进 APK
虽然主项目未声明,但权限管理插件(permission_handler 12.0.0+1)SDK 在其自身的AndroidManifest.xml中声明了该权限,Manifest 合并时自动加入。已通过tools:node="remove"明确移除,最终 APK 未包含该敏感权限。<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove"/>并确保在 manifest 的根节点加上
-
APK 中出现多余权限
如android.permission.CAMERA、android.permission.RECORD_AUDIO、android.permission.POST_NOTIFICATIONS、com.huawei.android.launcher.permission.CHANGE_BADGE等,均为三方库(扫码、推送、统计等插件)自动加入。
目前已确认这些权限对主功能有必要或为推送、归因、桌面角标等功能所需。 -
com.google.android.gms.permission.AD_ID来源追踪
该权限由 Facebook SDK(com.facebook.android:facebook-core:17.0.0)自动添加,主要用于广告归因和统计分析。
2. iOS Info.plist 配置问题
- 定位权限配置过多
原Info.plist包含了NSLocationAlwaysAndWhenInUseUsageDescription等后台定位权限声明,导致 App Store 审核时被认定为后台定位 App。已调整为仅保留NSLocationWhenInUseUsageDescription,避免不必要的权限声明。
3. 依赖和版本号问题
- Flutter pubspec.yaml 版本号疑惑
version: 1.1.0+30的含义,明确+30为内部构建号,须每次发版递增,保证 Google Play 和 App Store 审核通过。
4. 检查最终 APK 里的权限,
- 通过 如下命令检查最终 APK 里的权限(需安装 Android Build Tools,aapt(Android Asset Packaging Tool) 是 Android SDK 的一部分,用于分析 APK 文件、列出权限和资源等,非常适合检查最终 APK 包含了哪些权限)。
aapt dump permissions app-release.apk
5. 总结
- 仅靠权限关键词,全局搜索,并不可靠,有可能,敏感权限来自你依赖插件的依赖,这时候,全局项目搜索权限关键词是找不到的。
- 最稳妥的问题,就是用aapt 命令列出权限列表,再根据自己项目
AndroidManifest.xml两者做对比,然后根据具体业务情况,考虑删掉或用 tools:node="remove" 移除不需要的敏感权限。