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

Why a feature is still required though declared as optional in AndroidManifest?

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

根据文档,我声明

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

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

此处免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 播放列表中复制了它。所以,小伙伴们,去那里检查的时候要小心。你平时做什么? - 你构建 APK,将其上传到 Google 播放,然后检查 version/permissions/features - 不,那是陷阱!你在那里看到它是大写的。不要上当:)

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

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