【问题标题】:PackageManager and AndroidManifest.xml reporting different uses-permissionPackageManager 和 AndroidManifest.xml 报告不同的使用权限
【发布时间】: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


    【解决方案1】:

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

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

    source

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 2012-02-24
      • 1970-01-01
      • 2021-12-18
      • 2014-07-02
      相关资源
      最近更新 更多