2014-07-21 63 views
39


我正在维护一个现有的(非常庞大,非常敏感的)Android应用程序。
有一天,我收到了我的客户发来的一封电子邮件,该应用程序可能声明了未被使用的权限。如何检查Android权限是否被实际使用?

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

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

坦率地说,我不想通过该应用程序的每个小细节方面来完善权限是否需要。
我只是没时间。

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

问候

+2

没有办法通过编程方式证明它是或不是。最好的方法是删除并尝试。我想你可能能够在什么地方找到什么函数需要什么权限,但我不会相信它100%,除非由谷歌发布,有些像WRITE_EXTERNAL_STORAGE可能很难说(因为任何文件功能理论上可能需要它,这取决于它的设置)。 –

+0

是的。完全同意。更糟糕的是,我刚刚获得了代码库,并简要说明了它的结构。该应用程序没有关于该视角的任何文档。似乎我需要检查应用程序的每个流程,以确定哪些许可正在被使用。 –

+1

是的,一直在那里。如果您在组织中拥有权力,那么在学习代码库的同时,我会推动其他任何事情,除了紧急变更之外。并且尝试在重构计划上花费一些时间,那里会有你不喜欢的东西。 –

回答

11

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

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

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

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

+1

一定要检查一下。谢谢保罗。 –

21

在Android Studio 1.3中& Android支持库v7:22.2.0,你有它的解决方案。

步骤:

  1. 更新的Android Studio来V1.3
  2. 更新Android支持库到V7:22.2.0
  3. 执行Android Lint(分析 - >检查代码),在Lint错误参见类型“Android - >常量&资源类型错误匹配”,它显示了所有需要权限的方法。

说明

  1. Android已经推出了新的诠释@requirespermission。
  2. 所有需要权限的SDK方法都使用@requirespermission进行注释。
  3. 当我们调用任何需要权限的sdk方法而没有正确地检查我们是否有权限时,Android studio会通过lint错误。
+6

我正在使用Android Stugio 1.3.2&Android支持库v7:22.2.0,我没有看到需要权限的方法:(我在“Android - > Constant&Resource Type MisMatch”下看到其他内容 – acrespo

+1

This方法不适用于所有权限,例如忽略INTERNET和ACCESS_NETWORK_STATE。 – anber

2

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

但从控制台运行Lint工作。因此,步骤很简单:

  1. 从清单中删除权限。
  2. 如此处所述运行皮棉https://stackoverflow.com/a/32708435/1170154
  3. 打开Lint结果并找到部分正确性>错误MissingPermission:缺少权限。它将包含所有需要权限的调用。
相关问题