如何检查Android权限是否被实际使用?

我正在维护一个现有的(非常大的,非常敏感的)Android应用程序。
有一天,我收到了我的客户发来的电子邮件,这个应用程序可能会声明那些没有被正在使用的权限。

例如,他们希望我删除“WRITE_EXTERNAL_STORAGE”权限。
我已经删除它并编译它并运行应用程序。 没有任何错误。
但是,正因为如此,我不认为我可以认为许可没有被主动使用。

我的问题是“无论如何,我可以轻松简单地检查权限是否正在被使用?”

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

我的目标是检查是否正在使用权限。 如果没有,删除权限。
希望有一个不那么耗时的方式。

问候

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

脚步:

  1. 将Android Studio更新到V1.3
  2. 将您的Android支持库更新至v7:22.2.0
  3. 运行Android Lint(Analyze – > Inspect Code),在Lint Error中input“Android – > Constant&Resource Type MisMatch”,显示所有需要权限的方法。

说明

  1. Android已经引入了新的注解@requirespermission。
  2. 所有需要权限的SDK方法都用@requirespermission注解。
  3. 当我们调用任何需要权限的sdk方法而没有正确地检查我们是否有权限时,Android工作室将通过lint错误。

伯克利有一个小组写了一篇关于Android权限的文章。 他们谈论的是过度的权限,并开发了一个名为Stowaway的工具来分析您的APK未使用的权限。 分析是基于应用程序的API调用以及他们自己的每个API调用所需的权限映射(详细信息请参阅文章)。 如果清单中没有映射到APK中find的任何API调用的权限,则该工具会抛出一个标志。

有一段时间,该工具的基于Web的版本可以在http://www.android-permissions.org/上find ,但是它来自姜饼时代,从未更新过。 该页面现在build议使用PScout 。

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

您也可以在这里查看各种APK分析器,看看它们是否包含您正在寻找的function。

我尝试了Vasanth提出的方法,但它不适用于我。 事实上,因为我的项目有口味,Code Inspection不适合带有口味的项目。 请参阅https://code.google.com/p/android/issues/detail?id=210073

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

  1. 从清单中删除权限。
  2. 运行皮特的味道,如这里所述https://stackoverflow.com/a/32708435/1170154
  3. 打开Lint结果并find部分正确性>错误MissingPermission:缺less权限。 它将包含所有需要权限的调用。