为什么在 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"/>
我的应用程序从 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"/>