清理未使用的Android权限

如果我想研究在Android应用程序中如何使用Mainfest.xml中的权限(在Mainfest.xml中请求),以便删除它们,是否有一种简单的方法呢? lint或findbugs是否提供某种支持追踪项目中使用/滥用的权限?

我来自未来拯救你的生命。

在这里(在将来),LINT会检查缺less的权限,就像你在LINT检查中看到的一样。

  • 因此,请转到您的AndroidManifest.xml使用Android权限 (也就是说,不要删除属于您的应用的权限,如UA_DATAC2D_MESSAGE )删除所有标记<uses-permission>
  • 然后运行LINT分析。 点击Analyze然后Inspect Code...
  • Android -> Constant and Resource Type Mismatches下查看Android -> Constant and Resource Type Mismatches
  • 您应该看到所有缺less的权限。
  • 然后,您可以右键单击它们并selectApply fix "Add Permission" 。 如果您select此选项,则Android Studio将包含每个错误的一个权限。 所以你最终会在Manifest文件中得到相同权限的多个副本,只需删除重复项即可。 您也可以手动执行。

这里是LINT规则的描述:

ID ResourceType

描述

此检查将查看已使用各种支持注释(如RequiresPermission或UiThread)进行注释的Android API调用,并按注释中指定的方式标记未正确使用API​​的任何调用。 此检查标记的错误示例:

  • 将错误types的资源整数(例如R.string)传递给期望不同types的API(例如R.dimen)。
  • 忘记在需要它的方法中调用重载的方法(通过super)
  • 调用需要权限的方法,而不必在清单中声明权限
  • 将资源颜色引用传递给期望RGB整数值的方法。

…还有很多。 有关更多信息,请参阅http://developer.android.com/tools/debugging/annotations.html上的文档;


我正在使用Android Studio 2.1.2。

对于我没有编写代码的应用程序,我将这样做的方法是逐个删除权限,并每次testing应用程序端对端。 当它失败时,缩小它的范围。 如果不是,则可能不会使用该权限。

您将不得不尝试逐个删除它们,并检查我的应用程序仍然正常工作。 这不是由lint以任何方式检查(它应该是)。

当他们回来(他们正在下降),你可以上传你的apk到这个网站(如果你可以的话),让他们静态分析你正在使用的权限: http : //www.android-permissions.org/

最好的方法是了解可能实际做了什么。 如果它将要使用相机,那么你知道你需要相机的权限。

在你的应用清单文件中,你应该有一个标签“合并清单” ,你可以看到你的最终清单和你请求的权限,你可以点击权限来查看它来自哪里。 (谁加了它 – 前':sdk或它来自哪个代码)

还有一种简单的方法,通过添加到清单来删除权限:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" /> 

还要记住在顶部添加工具:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="..."> 

或者你可以学习你的应用程序,然后通过权限,看看哪些是额外的。 你的应用程序做了什么,它使用什么电话function。 应该有什么文件应该做些什么,在那里有什么方法