已删除的权限仍会显示在 Play 商店中

Removed permissions still show up in Play Store

我向 Google Play 推送了一个 Beta 版本,与当前正在生产的版本相比,它不小心添加了更多权限。

在通过分阶段推出将最终新版本推向生产之前,我删除了这些权限,但尽管如此,用户在 Play 商店收到更新时仍然抱怨新权限。

为什么新权限仍然可见?我从 Beta 频道中删除了 APK,生产 APK(旧的和分阶段推出的新 APK)都没有新权限。我什至在 Play 商店列表中看到了这些新权限。

通过使用更新的 SDK 但不更改我所有导入模块的 targetSdkVersion,我自动继承了一些隐式权限。

首先,有一个库的 targetSdkVersion 为 3 - 它将自动添加 READ_PHONE_STATE,如 this answer, and the 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。参见 the documentation about this。奇怪的是,我在合并日志中没有看到提到它,但我可能错过了。

最终的 APK 权限可以使用 aapt 检查:

aapt dump badging build\outputs\apk\foo-release.apk

打印权限列表。

完全归功于 CommonsWare 引导我做到这一点。谢谢马克!