已移除的权限仍然出现在Play商店中

4
我将一个beta版本推送到Google Play,与当前在生产中的版本相比,该版本意外添加了更多权限。
在通过分阶段发布向生产环境推送最终新版本之前,我删除了这些权限,但尽管如此,在Play商店接收更新后,用户仍然抱怨新权限。
为什么新权限仍然可见?我从beta渠道中删除了APK,两个生产环境APK(旧版和分阶段发布的新版)都没有新权限。我甚至在Play商店列表中看到了那些新权限。

3
你真的确定权限已经不存在,而不是被你使用的库添加了吗?将你的 APK 文件复制到 Dropbox 或其他知道 APK MIME 类型的私人 Web 主机上,并从那里尝试安装。如果你仍然看到权限,则它们是 APK 文件的一部分,你需要查看清单合并报告来尝试确定原因。如果权限不存在,则这些权限绝对不会出现在 APK 文件中,而 Google Play 商店可能是问题的根源。 - CommonsWare
谢谢 Mark,我忘记了库可以添加权限 - 我只看了主 AndroidManifest.xml。有工具可以从 APK 中提取权限吗? - EboMike
1
aapt dump badging 应该可以做到这一点。 - CommonsWare
1个回答

3
通过使用较新的 SDK,但不更改所有导入模块的 targetSdkVersion,我自动继承了一些隐式权限。
首先,有一个目标 SDK 版本为 3 的库 - 这将自动添加 READ_PHONE_STATE 权限,如 this answerthe official docs 中已经记录的那样。
这可以通过查看 build/output/logs/manifest-merger-release-report.txt 中的清单合并日志轻松地看到。
android:uses-permission#android.permission.READ_PHONE_STATE
IMPLIED from AndroidManifest.xml:2:1 reason: com.foo.library has a targetSdkVersion < 4

另一个问题是设置了READ_CONTACTS,但至少有一个库使用了minSdkVersion和targetSdkVersion < 15。这自动添加了READ_CALL_LOG权限,请参见相关文档。有趣的是,我在合并日志中没有看到提到它,但我可能错过了。可以使用aapt检查最终APK的权限。
aapt dump badging build\outputs\apk\foo-release.apk

这将打印出权限列表。
感谢CommonsWare带领我找到了这个方法。谢谢Mark!

非常感谢您,我不知道在日志中可以进行验证,这解决了我的问题。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接