一直在做一些 Android 权限研究,并遇到了一个应用程序——根据 AndroidManifest.xml 文件——只声明WRITE_EXTERNAL_STORAGE
为权限。Android Market 也只报告这一点。使用 aapt 工具转储使用权限它也只报告一个权限。
但是,在 Android 设备(或模拟器)上运行的代码中,执行以下操作:
PackageManager pm = getPackageManager();
List<PackageInfo> pkgList = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS | PackageManager.GET_SIGNATURES);
...
PackageInfo p = pkgList.get(i); // where i is the index of the apk in question
String[] perms = p.requestedPermissions;
我获得了此 APK 的 2 个权限,READ_PHONE_STATE
清单中的一个WRITE_EXTERNAL_STORAGE
. 查看“管理应用程序”屏幕并为此选择详细信息也会显示附加READ_PHONE_STATE
权限。
是否存在 Android 清单中不需要的权限可以/被“暗示”(在代码中、通过功能使用等)的情况?或者换一种说法,为什么aapt
返回一组权限,而getPackageManager().getPackageInfo()
API 返回一组不同的权限?
编辑:
用“更好”的术语搜索发现了我正在寻找的答案: Android 权限:电话:读取电话状态和身份
简而言之,使用早期版本 SDK 编译的 APK 确实免费继承了一些权限......