flutter上架权限问题

99 阅读2分钟

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.CAMERAandroid.permission.RECORD_AUDIOandroid.permission.POST_NOTIFICATIONScom.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" 移除不需要的敏感权限。