AndroidManifest.xml隐含vs显式权限(uses-feature vs uses-permission)

时间:2012-09-28 16:25:19

标签: android sdk permissions android-manifest filtering

我的应用中有一些权限,例如

<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

我怀疑他们实际上并不是必需的。

根据Android文档,他们都暗示

<uses-feature
    android:name="android.hardware.location"/>

是真实的,也是必需的。

所以,举例来说,如果我拿出其中三分之二的命令,我的所有A-GPS相关电话仍然会以完全的方式工作?

除了重复安装Android文档的人之外,似乎没有太多关于此的文献。

最终,我认为对于代码的这么多元素来说暗示android:required = true会限制我可以访问的设备数量。

 <uses-feature
    android:name="android.hardware.location" android:required="false"/>

将向应用程序开放更多设备,我可以在应用程序中使用条件逻辑来允许执行某些功能。

但我的主要问题是android.hardware.location涵盖了许多<uses-permission/>功能。没有android.hardware.location.ACCESS_MOCK_LOCATIONandroid.hardware.location.CONTROL_LOCATION_UPDATES,只有android.hardware.location

这里有几个假设,但android开发人员文档确实没有详细说明,除了揭示那些单独的uses-permissions暗示需要一个uses-feature。当它一定不是必需的时候我只是想确保我的android sdk调用有权运行

问题:

1)如果我取出其中三分之一的uses-permissions,我的所有与A-GPS相关的呼叫是否仍然可以像我拥有所有这些个人权限一样工作?

2)android.hardware.location更具体吗?我看过android.hardware.location.NETWORK但我在哪里可以看到所有可能性是什么?

1 个答案:

答案 0 :(得分:4)

  

所以,例如,如果我拿出其中三分之二的命令,我的所有A-GPS相关呼叫仍然会以完全相同的方式工作?

嗯,这三个权限中的两个不应该是必要的。 ACCESS_MOCK_LOCATION与GPS无关,但与您自己的模拟位置提供商无关。引用Cyril Mottier

  

请大家,在发布您的应用之前,先从您的清单中删除ACCESS_MOCK_LOCATION权限。忘记让你成为一个业余爱好者。

普通SDK应用无法保留CONTROL_LOCATION_UPDATES - 仅适用于使用固件签名密钥签名或安装在固件中的应用。

因此,普通的SDK应用程序可以删除这两个用于生产的应用程序,并且可以删除CONTROL_LOCATION_UPDATES以进行开发。如果您未在应用中使用模拟位置提供商,则可以删除开发中的ACCESS_MOCK_LOCATION。最有可能的是,您应该从未将这两个权限添加到您的应用中。

这些都与<uses-feature>无关。

  

我可以在应用程序中使用条件逻辑来允许执行某些功能。

绝对。在麻烦处理hasSystemFeature()之前,您可以使用PackageManager上的android.hardware.location查看您是否LocationManager

  

但我的主要问题是android.hardware.location涵盖了许多功能。

动词“封面”对我来说没有任何意义,或者就其而言,你的方向是相反的。 <uses-permission>元素可能意味着<uses-feature>元素,但不是相反的。

  

如果我拿出其中三个使用权限中的两个,我的所有与A-GPS相关的呼叫是否仍然可以像我拥有所有这些个人权限一样工作?

见上文。

  

我见过android.hardware.location.NETWORK

您可能已经看过android.hardware.location.network

  

我见过android.hardware.location.NETWORK

<uses-feature>的文档中:http://developer.android.com/guide/topics/manifest/uses-feature-element.html