如果我想研究在 Android 应用程序中如何以及在何处使用权限 [在 Mainfest.xml 中请求] 以删除它们,是否有一种简单的方法可以做到这一点?lint 或 findbugs 是否为跟踪项目中使用/滥用的权限提供某种支持?
7 回答
我从未来来拯救你的生命。
在这里(将来),LINT 会检查缺少的权限,正如您在LINT checks中看到的那样。
- 因此,请转到您的并删除所有使用 Android 权限
AndroidManifest.xml
的标签(意思是,不要删除属于您的应用的权限,例如和)。<uses-permission>
UA_DATA
C2D_MESSAGE
- 然后运行 LINT 分析。
Analyze
然后点击Inspect Code...
- 往下看
Android -> Constant and Resource Type Mismatches
- 您应该看到所有缺少的权限。
- 然后,您只需右键单击它们并选择
Apply fix "Add Permission"
. 如果您选择此选项,Android Studio 将为每个错误包含一个权限。因此,您最终会在清单文件上获得相同权限的多个副本,只需删除重复项即可。你也可以手动完成。
以下是 LINT 规则的说明:
标识资源类型
描述
此检查查看已使用各种支持注释(例如 RequiresPermission 或 UiThread)注释的 Android API 调用,并标记任何未按照注释指定的正确使用 API 的调用。此检查标记的错误示例:
- 将错误类型的资源整数(例如 R.string)传递给需要不同类型(例如 R.dimen)的 API。
- 忘记在需要它的方法中调用被覆盖的方法(通过 super)
- 调用需要权限的方法,而无需在清单中声明该权限
- 将资源颜色引用传递给需要 RGB 整数值的方法。
...还有很多。有关详细信息,请参阅http://developer.android.com/tools/debugging/annotations.html上的文档
我正在使用 Android Studio 2.1.2。
在您的应用清单文件中,您应该有一个“合并清单”选项卡,在那里您可以看到您的最终清单和您请求的权限,您可以单击权限以查看它的来源。(谁添加了它 - ex':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="...">
对于我没有编写代码的应用程序,我会这样做的方式是逐个删除权限并每次端到端测试应用程序。当它失败时,缩小范围。如果没有,则可能不会使用该权限。
您将不得不尝试一一删除它们并检查应用程序是否仍然可以正常工作。lint 不会以任何方式检查这一点(应该是)。
当他们回来时(他们目前处于关闭状态),您可以将您的 apk 上传到该网站(如果您同意的话)并让他们静态分析您正在使用的权限:http ://www.android-permissions.org/
最好的方法是了解可能实际做了什么。如果它要使用相机,那么您知道您需要相机许可。
查看http://developer.android.com/reference/android/Manifest.permission.html 查找您在 Mainfest 中使用的权限
或者您可以只了解您的应用程序的功能,然后查看权限并查看哪些权限是额外的。您的应用程序做什么,它使用什么电话功能。应该有一些关于它应该做什么以及那里有什么方法的文档