【发布时间】:2012-01-08 08:29:10
【问题描述】:
一直在做一些 Android 权限研究,并遇到了一个应用程序——根据 AndroidManifest.xml 文件——仅将 WRITE_EXTERNAL_STORAGE 声明为权限。 Android Market 也只报告这一点。使用 aapt 工具转储 uses-permission 它也只报告一个权限。
但是,在 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 Manifest 中不需要“暗示”权限(在代码中,由feature use 等)?或者换一种说法,为什么aapt 返回一组权限,而getPackageManager().getPackageInfo() API 返回一组不同的权限?
编辑:
用“更好”的术语搜索发现了我正在寻找的答案:Android permissions: Phone Calls: read phone state and identity
简而言之,使用早期版本 SDK 编译的 APK 确实免费继承了一些权限...
【问题讨论】:
标签: android android-manifest aapt