为什么 android.hardware.telephony 功能会自动添加到 android 应用程序中

cto*_*tor 2 android telephonymanager

在发布 apk 以播放商店时,我发现我的应用程序需要该android.hardware.telephony功能,但我没有在清单中的任何地方添加它。我还检查了 android studio 中的合并清单,它也不包含此功能,因此我认为没有第三方 sdk 会添加此功能。此功能的来源可能是什么?

作为参考,我在清单中声明了以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

此外,当我使用以下代码将其设为可选时,该应用程序可在没有此功能的设备上使用:

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

那么为什么默认情况下需要而不在任何地方添加它呢?

Jak*_*eam 6

Google Play 会自动添加一些功能,具体取决于您请求的权限。

根据您的请求READ_SMSRECEIVE_SMS权限,这意味着您使用了该telephony功能。因此,Google Play 的反应就像您的AndroidManifest.xml:

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

当您手动添加并声明它时required="false",这会告诉 Google Play 在您请求许可的同时,您可以处理用户没有该telephony功能的情况。

这是通过文档中的此注释确认

注意:某些系统权限隐含地要求设备功能的可用性。例如,如果您的应用请求访问 BLUETOOTH 的权限,则这隐含地需要 FEATURE_BLUETOOTH 设备功能。

此处提供了完整的权限列表和隐含的功能要求,其中包括您的情况:

短信权限暗示电话

最后,您ACCESS_COARSE_LOCATION还在 上声明了一个功能要求android.hardware.location,仅供参考。

还有关于GameDev StackExchange 的更多详细信息。