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

CQM*_*CQM 8 permissions sdk android filtering android-manifest

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

<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" />
Run Code Online (Sandbox Code Playgroud)

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

根据Android文档,他们都暗示了这一点

<uses-feature
    android:name="android.hardware.location"/>
Run Code Online (Sandbox Code Playgroud)

是真实的和必需的.

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

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

最终,我认为暗示android:required = true代码的许多元素限制了我可以访问的设备数量.

 <uses-feature
    android:name="android.hardware.location" android:required="false"/>
Run Code Online (Sandbox Code Playgroud)

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

但我的主要问题是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但在哪里可以看到所有可能性是什么?

Com*_*are 5

因此,举例来说,如果我从三个命令中拿出两个,我所有与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涵盖了许多功能。

动词“ cover”在这里对我没有意义,或者在一定程度上,您的方向相反。<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