2012-10-24 30 views
6

假设我已经接管了Android应用程序的开发,并且我的老板问我为什么我们的应用程序需要向在Android Market上购买应用程序的用户显示某些权限。如何确定我的Android应用程序需要某些权限的原因?

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

  • 电话呼叫 - 读取手机状态和身份

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

的应用程序是一个GPS跟踪应用程序,这不是显而易见的,为什么会需要这个权限。

这也将有助于了解了为什么可能需要这个权限的任何提示,即使你不能告诉我如何直接对代码进行分析,找出。

回答

0

你的老板的回答是“因为某些API功能/电话/我们在我们的应用程序使用方法需要飞翔距离保持一定的权限,这是出于安全考虑,这就是Android的工作方式”。至于提到的权限 - 你必须检查代码,看看这些权限是否真的需要。 Read phone status and identity可能表明您的应用尝试获取IMEI或类似的东西来唯一标识设备。 Retrieve running applications - 查看GPS追踪应用没有理由持有这个。但是也许你使用第三方lib /代码使用这个。

+0

我不认为告诉他的老板是Android应用程序需要的权限*做的东西*真的回答了这个问题。最终用户总是知道哪些功能需要权限,尤其是如果它们不明显,并且他的老板可能想知道为什么必须将这些权限添加到应用的描述中。 –

+0

恐怕你不能以比我没有看到代码更详细的方式回答。 –

+2

我的意思是把他的老板的问题放弃为“这就是Android的工作原理”可能不是预期的。我认为安德鲁正在寻找一种方法来确定代码实际使用这些权限的位置(编辑您的答案的地址)。 –

2

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

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

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

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

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名的搜索结果我看到了下面的类:

  • TelephonyManager
  • PhoneStateListener

点击类和得到他们的包名:

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

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

一个简单的grep会做,或在Eclipse中,文件搜索一个按Ctrl-H - >包含文字

步骤4注释掉进口,看看有什么突破

这些可能候选人为什么许可 是必须的。通过查看开发者门户来确认该方法确实需要权限,从而确认有问题的方法。

最后,你应该能够告诉你的老板,READ_PHONE_STATE是必需的,因为我们称之为XYZ,它给了我们UVW。

+0

是的,我回来说这个。这是正确的答案,恕我直言。 –

相关问题