【问题标题】:How do I determine why my Android app requires certain permissions?如何确定我的 Android 应用为什么需要某些权限?
【发布时间】:2012-10-24 23:24:14
【问题描述】:

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

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

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

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

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

即使您无法告诉我如何直接分析代码以找出答案,也可以获得有关为什么需要此权限的任何提示。

【问题讨论】:

    标签: android


    【解决方案1】:

    这是我将如何追踪这些。

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

    • 电话经理
    • PhoneStateListener

    点击类并获取它们的包名:

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

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

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

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

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

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

    【讨论】:

    • 是的,我回来说这个。这是正确的答案,恕我直言。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      使用最新的构建工具,您可以运行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 注释,经过一段时间的采用,第三方库也可以集成权限注释

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我不认为告诉他的老板 Android 应用程序需要权限才能做事真正回答了这个问题。最终用户总是需要知道哪些功能需要权限,特别是如果它们不明显,他的老板可能想知道为什么需要这些权限才能将其添加到应用程序的描述中。
        • 恐怕你无法回答比我没有看到代码更详细的方式。
        • 我的意思是,将他老板的问题丢弃为“Android 就是这样工作的”可能不是预期的结果。我认为 Andrew 只是在寻找一种方法来确定代码在哪里实际使用了这些权限(对您的答案的编辑确实解决了这些权限)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        • 2011-02-10
        • 1970-01-01
        • 2018-03-04
        • 2013-01-27
        相关资源
        最近更新 更多