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

问题描述 投票:1回答:2

在释放apk到Play商店时,我发现我的应用程序需要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" />

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

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

那么为什么默认情况下不需要添加它呢?

android telephonymanager
2个回答
1
投票

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

正如您已请求READ_SMSRECEIVE_SMS权限,这意味着您使用telephony功能。因此,Google Play的反应就像您在AndroidManifest.xml中有以下内容一样:

<uses-feature
    android:name="android.hardware.telephony"
    android:required="true" />

当您手动添加并声明required="false"时,这会告诉Google Play,当您确实要求获得权限时,您可以处理用户没有telephony功能的情况。

这是通过this note in the docs确认的:

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

完整的权限列表和隐含的功能要求是available here,包括您的情况:

sms permissions implying telephony

最后,使用您的ACCESS_COARSE_LOCATION,您还要声明android.hardware.location的功能要求,仅供参考。

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


0
投票

您的项目正在使用的一个或多个依赖项/模块/库是将该需求添加到Android Manifest

要调查在Android Manifest中打开您的主要Android Studio文件,然后单击页面底部的Merged Manifest选项卡。

这将显示最终合并的Manifest的视图,以及每行的源。

在这里阅读更多相关信息:https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts

怎么修

如果您希望避免将该要求添加到最终的Manifest,可以在Manifest中使用Node Markers来控制合并的工作方式。

在这里阅读更多关于节点标记的信息:https://developer.android.com/studio/build/manifest-merge#node_markers

例如试试这个:

<uses-feature
    android:name="android.hardware.telephony"
    android:required="false"
    tools:node="replace" />
© www.soinside.com 2019 - 2024. All rights reserved.