почему функция android.hardware.telephony добавляется автоматически в приложение для Android - PullRequest
0 голосов
/ 26 октября 2018

Выпуская apk для play store, я обнаружил, что моему приложению требуется функция 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" />

Так почему требуется по умолчанию, не добавляя его куда-либо?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Google Play автоматически добавляет некоторые функции, в зависимости от того, какие разрешения вы запрашивали.

Поскольку вы запрашивали разрешения READ_SMS и RECEIVE_SMS, это означает, что вы используете функцию telephony.Итак, Google Play реагирует так, как если бы у вас было AndroidManifest.xml:

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

Когда вы добавляете это вручную и объявляете его required="false", это говорит Google Play, что пока вы запрашиваете разрешениеВы можете обработать случай, когда у пользователя нет функции telephony.

Это подтверждается с помощью этой заметки в документах :

ПримечаниеНекоторые системные разрешения неявно требуют наличия функции устройства.Например, если ваше приложение запрашивает разрешение на доступ к BLUETOOTH, это неявно требует наличия функции устройства FEATURE_BLUETOOTH.

Полный список разрешений и подразумеваемых требований к функции: доступно здесь ,и включает вашу ситуацию:

sms permissions implying telephony

Наконец, со своим ACCESS_COARSE_LOCATION вы также объявляете требование к функции для android.hardware.location, просто для вашей информации.

Существует также более подробная информация о GameDev StackExchange .

0 голосов
/ 31 октября 2018

Одна или несколько зависимостей / модулей / библиотек, которые использует ваш проект, добавляет это требование к вашему Android Manifest.

. Для исследования откройте ваш основной файл Android Manifest в Android Studio и нажмитевкладка Merged Manifest внизу страницы.

Это покажет вам окончательный объединенный манифест, а также источники каждой строки.

Подробнее об этом здесь: https://developer.android.com/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts

КАК ИСПРАВИТЬ

Если вы не хотите добавлять это требование в свой окончательный манифест, вы можете использовать маркеры узлов в своем манифесте, чтобы контролировать работу слияния.

Подробнее о маркерах узлов можно узнать здесь: https://developer.android.com/studio/build/manifest-merge#node_markers

Например, попробуйте это:

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