1

一直在做一些 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 确实免费继承了一些权限......

4

1 回答 1

1

据我所知,必须始终在清单中明确设置权限。

如果应用程序需要访问受权限保护的功能,它必须使用清单中的元素声明它需要该权限。然后,当应用程序安装在设备上时,安装程​​序通过检查签署应用程序证书的机构并在某些情况下询问用户来确定是否授予请求的权限。如果授予权限,则应用程序可以使用受保护的功能。如果没有,它访问这些功能的尝试将简单地失败,而不会通知用户。

来源

我相信您看到的差异是由于权限的protectionLevel属性。任何设置为“正常”的权限都不需要用户确定,因此它们只会显示在“详细信息”部分中。

于 2011-11-28T23:19:05.220 回答