8

假设我已经接管了一个 Android 应用程序的开发,我的老板问我为什么我们的应用程序需要某些权限才能显示给在 Android 市场上购买该应用程序的用户。

我可以使用任何工具或技巧来确定哪些代码触发了每个权限,这样我就可以弄清楚为什么我们的应用程序在功能上需要这些权限?特别是,我对这些权限感兴趣:

  • 电话 - 读取电话状态和身份

  • 系统工具 - 检索正在运行的应用程序 - 允许应用程序检索有关当前和最近运行的任务的信息,可能允许恶意应用程序发现有关其他应用程序的私人信息。

该应用程序是一个 GPS 跟踪应用程序,不清楚为什么可能需要此权限。

即使您不能告诉我如何直接分析代码以找出答案,获取有关为什么需要此权限的任何提示也会很有帮助。

4

4 回答 4

15

这是我将如何追踪这些。

第 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 个搜索结果中,我看到以下类:

  • 电话经理
  • 电话状态监听器

单击类并获取它们的包名称:

  • android.telephony.TelephonyManager
  • android.telephony.PhoneStateListener

步骤 3在您的项目中查找导入这些包的类

一个简单的 grep 就可以了,或者 Eclipse 中的 Ctrl-H,文件搜索 -> 包含文本

第 4 步注释掉导入,看看有什么问题

这些可能是需要许可的原因。通过查看开发门户来确认有问题的方法,以验证该方法确实需要权限。

最后你应该可以告诉你的老板,READ_PHONE_STATE 是必需的,因为我们调用函数 XYZ,它给了我们 UVW。

于 2012-10-25T03:47:49.700 回答
2

删除权限并查看应用程序失败的地方。答案将在 logcat 输出中。

不过,这不是一个理想的解决方案,因为您可能不知道在应用程序中需要做什么才能触发该权限。

我怀疑“读取手机状态和身份”意味着该应用程序正在使用设备 IMEI 或类似的识别信息来唯一地识别设备,以确保该应用程序仅在注册的设备上运行。或者它可能只是用作一种 cookie 来跟踪所有者。寻找那个代码。并删除它,因为那是错误的做法。如果您需要识别特定的 android 设备,请使用 Settings.Secure 类中的 ANDROID_ID。 http://developer.android.com/reference/android/provider/Settings.Secure.html

至于“检索正在运行的应用程序”,我觉得有点可疑。实现 GPS 跟踪的一种非常常见的方法是在其自己的进程中启动单独的服务。这样,如果应用程序崩溃,服务将继续运行并可以重新连接。在这种情况下,应用程序可能正在使用“检索正在运行的应用程序”来识别和终止服务进程。但如果是这样,这是一种笨拙的方法。

于 2012-10-24T23:48:55.133 回答
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 方库也可以集成权限注释

在此处输入图像描述

于 2015-07-31T07:18:14.023 回答
0

您的老板的答案是“因为我们在应用程序中使用的某些 API 功能/调用/方法需要calee 持有某些权限。出于安全原因,这就是 Android 的工作方式”。至于提到的权限 - 您必须检查代码以查看是否真的需要这些权限。Read phone status and identity可能表明您的应用尝试获取 IMEI 或类似的东西来唯一识别设备。Retrieve running applications- 没有理由让 GPS 跟踪应用程序持有这个。但也许你使用使用它的 3rd 方库/代码。

于 2012-10-24T23:28:50.127 回答