为什么在AndroidManifest中声明为可选功能仍然需要功能?

时间:2015-10-19 15:40:00

标签: android google-play android-manifest

我的应用从手机收集诊断数据。当然,它需要android.permission.ACCESS_WIFI_STATE等权限才能访问硬件。 Android因此假定需要android.hardware.WIFI功能。虽然在大多数情况下这确实是一个有效的猜测,但在我的情况下,Wi-Fi并不是正常操作所必需的。该应用程序检查实际存在的模块,如果没有Wi-Fi,它将跳转到下一个模块。

在文档之后,我宣布了

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

在我的AndroidManifest中。不幸的是,它没有按预期工作!该功能仍然按要求列出。

以下是免除aapt检查。虽然我的声明有初步效果,但它被权限立即覆盖:

    uses-feature-not-required: name='android.hardware.WIFI'
    uses-feature: name='android.hardware.wifi'
    uses-implied-feature: name='android.hardware.wifi' reason='requested android.permission.ACCESS_WIFI_STATE permission'

有谁知道如何使该功能成为可选功能?真的很感谢你的帮助,伙计们!

更新:解决方案

感谢CommonsWare的回答,问题确实是我的声明中的大写(facepalm)。

为:

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

好:

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

对于小写字母,一切都按照文档记录。

现在,最令人沮丧的是:我怎么最终得到大写字母? - 我只是将其从Google Play列表中复制出来。所以,伙计们,在那里检查时要小心。你通常做什么? - 你建立APK,你上传到谷歌播放,你检查版本/权限/功能 - NOPE,这是陷阱!你在那里看到它是大写的。不要堕落:)

1 个答案:

答案 0 :(得分:2)

与许多操作系统一样,Android区分大小写。尝试:

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