假设我接管了Android应用程序的开发,我的老板问我为什么我们的应用程序需要向在Android Market上购买应用程序的用户显示某些权限。
我是否可以使用任何工具或技巧来确定哪些代码触发了每个权限,因此我可以弄清楚为什么我们的应用程序在功能上需要这些权限?特别是,我对这些权限感兴趣:
电话 - 阅读电话状态和身份
系统工具 - 检索正在运行的应用程序 - 允许应用程序检索有关当前和最近运行的任务的信息,可以允许恶意应用程序发现有关其他应用程序的私人信息。
该应用是一款GPS追踪应用,但为何可能需要此权限并不明显。
获取有关为什么可能需要此权限的任何提示也会有所帮助,即使您无法告诉我如何直接分析代码以查找。
答案 0 :(得分:14)
以下是我如何追踪这些内容。
第1步 - 查找AndroidManifest.xml中声明的清单权限
基本上<uses-permission />
标签内的所有内容,例如:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
第2步 - 在developer.android.com上搜索使用这些权限的类
让我们以READ_PHONE_STATE为例,目标是找到哪些包需要此权限。在“READ_PHONE_STATE”的开发门户网站上进行简单搜索即可开始我们的搜索,我们正在这里查找类,在前5个搜索结果中,我看到以下类:
单击类并获取其包名称:
第3步在项目中查找导入这些包的类
一个简单的grep会做,或者在eclipse中的Ctrl-H,文件搜索 - &gt;包含文字
第4步注释掉导入,看看有什么中断
这些可能候选人为何需要许可。通过查看开发门户来确认相关方法,以验证该方法确实需要该权限。
最后你应该能够告诉你的老板,READ_PHONE_STATE是必需的,因为我们调用函数XYZ给了我们UVW。
答案 1 :(得分:2)
删除权限并查看应用失败的位置。答案将在logcat输出中。
这不是一个理想的解决方案,因为您可能不知道在应用程序中需要做什么来触发该权限。
我怀疑“阅读手机状态和身份”意味着应用正在使用设备IMEI或类似的识别信息来唯一识别设备,以确保应用仅在注册设备上运行。或者它可能只是用作跟踪所有者的一种cookie。寻找那个代码。并删除它,因为这是错误的方法。如果您需要识别特定的Android设备,请使用Settings.Secure类中的ANDROID_ID。 http://developer.android.com/reference/android/provider/Settings.Secure.html
对于“检索正在运行的应用程序”,我发现有点可疑。实现GPS跟踪的一种非常常见的方法是在其自己的过程中启动单独的服务。这样,如果应用程序崩溃,服务将继续运行并可以重新连接。在这种情况下,应用程序可能正在使用“检索正在运行的应用程序”来识别和终止服务进程。但如果是这样的话,这是一种笨拙的方式。
答案 2 :(得分:1)
使用最新的构建工具,您可以运行lint
检查,这将突出显示所有需要权限的android SDK方法调用。
请参阅此处的公告http://android-developers.blogspot.com/2015/07/get-your-hands-on-android-studio-13.html以及此处的文档https://developer.android.com/tools/debugging/annotations.html#permissions。
这是基于android注释的,并且在一些采用时间之后第三方库也可以集成权限注释
答案 3 :(得分:0)
老板的答案是“因为我们在应用中使用的某些API功能/调用/方法需要 calee来保留某些权限。这是出于安全原因,这就是Android的工作方式” 。至于提到的权限 - 您必须检查代码以查看是否真的需要这些权限。 Read phone status and identity
可能表示您的应用尝试获取IMEI或类似内容以唯一标识设备。 Retrieve running applications
- 没有理由让GPS跟踪应用程序保留此功能。但是可能你使用第三方lib /代码来使用它。