如何检查是不是实际使用了 Android 权限?

Posted

技术标签:

【中文标题】如何检查是不是实际使用了 Android 权限?【英文标题】:How to check if Android Permission is actually being used?如何检查是否实际使用了 Android 权限? 【发布时间】:2014-09-11 13:36:04 【问题描述】:

我正在维护一个现有的(非常庞大、非常敏感的)android 应用程序。 前几天,我收到了一封来自客户的电子邮件,说应用程序可能正在声明没有被积极使用的权限。

例如,他们希望我删除“WRITE_EXTERNAL_STORAGE”权限。 我已将其删除并编译并运行该应用程序。根本没有错误。 但是,正因为如此,我认为我不能假设权限根本没有被积极使用。

我的问题是“如果它正在被积极使用,我是否可以轻松简单地检查权限?”

坦率地说,我不想通过该应用程序的每个细节方面来确定是否需要许可。 我只是没有时间。

我的目标是检查权限是否正在被积极使用。如果没有,请删除权限。 希望有一种更省时的方法。

问候

【问题讨论】:

没有办法以编程方式证明它是或不是。最好的方法是删除并尝试。我想您可能能够在某处找到哪些功能需要哪些权限的列表,但除非由 google 发布,否则我不会 100% 相信它,并且有些像 WRITE_EXTERNAL_STORAGE 可能很难分辨(因为理论上任何文件功能都可能需要它,具体取决于其设置方式)。 是的。完全同意。更糟糕的是,我刚刚得到了代码库和关于它是如何构建的简要说明。该应用程序没有关于该角度的任何文档。看来我需要检查应用程序的每个流程以找出正在使用的权限。 是的,去过那里。如果您的组织有能力,我会在您学习代码库时将除紧急更改之外的任何内容放在次要位置。并尝试在重构的时间表上留出一些时间,那里会有你不喜欢的东西。 sanddroid.xjtu.edu.cn 【参考方案1】:

在 Android Studio 1.3 和 Android 支持库 v7:22.2.0 中,您有解决方案。

步骤:

    将 Android Studio 更新到 V1.3 将您的 Android 支持库更新到 v7:22.2.0 运行 Android Lint(分析 -> 检查代码),在 Lint 错误中,请参阅类型“Android -> 常量和资源类型不匹配”,其中显示了所有需要权限的方法。

说明

    Android 引入了新的注解 @requirespermission。 所有需要权限的 SDK 方法都使用 @requirespermission 进行注释。 当我们调用任何需要权限的 sdk 方法而没有正确检查我们是否有权限时,Android Studio 会出现 lint 错误。

【讨论】:

我正在使用 Android Stugio 1.3.2 和 Android 支持库 v7:22.2.0,我没有看到需要权限的方法 :(。我在“Android -> 常量”下看到了其他内容& 资源类型不匹配” 此方法不适用于所有权限。例如它忽略 INTERNET 和 ACCESS_NETWORK_STATE。【参考方案2】:

伯克利的一个小组写了一封关于 Android 权限的paper。他们谈论过度权限,并开发了一个名为 Stowaway 的工具,可以分析您的 APK 中未使用的权限。该分析基于应用程序的 API 调用以及它们自己对每个 API 调用所需权限的映射(详见论文)。如果清单中的权限未映射到 APK 中的任何 API 调用,则该工具会抛出一个标志。

有一段时间,该工具的基于 Web 的版本可在 http://www.android-permissions.org/ 获得,但它来自 Gingerbread 时代,从未更新。该页面现在建议使用PScout。

PScout 在生成权限映射方面比 Stowaway 做得更好。但是,PScout 不包含 APK 分析器,因此您必须手动将它们提供的映射与您的应用程序进行的 API 调用进行比较。不幸的是,如果您对 5.1.1 之后的版本感兴趣,则必须使用提供的 PScout 代码和您自己的框架源代码自己生成它们。

您还可以查看各种 APK 分析器 here,看看它们是否包含您正在寻找的功能。

【讨论】:

一定会检查的。谢谢保罗。【参考方案3】:

我尝试了 Vasanth 建议的方法,但它对我不起作用。事实上,因为我的项目有风味,而代码检查不适用于具有风味的项目。见https://code.google.com/p/android/issues/detail?id=210073。

但是从控制台运行 Lint 可以。所以步骤很简单:

    从清单中删除权限。 按照此处https://***.com/a/32708435/1170154 的描述运行 Lint 以获取风味。 打开 Lint 结果并找到正确性部分 > 错误 MissingPermission: Missing Permissions。它将包含所有需要权限的调用。

【讨论】:

【参考方案4】:

从 Android Studio 3.3 开始,运行 Analyze → Inspect Code 将通知您在 Android → Lint → Correctness → Missing Permissions 下缺少权限

【讨论】:

以上是关于如何检查是不是实际使用了 Android 权限?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户是不是已在 React Native Android 中授予相机权限?

如何检查特定目录的权限?

检查Android中的用户是不是已经授予权限

如何检查是不是允许“允许管理所有文件”?

如何在 android 中检查我的 android 设备是不是有互联网连接? [复制]

检查 App 是不是对 Flutter 有 DND 权限