Почему мое приложение запрашивает разрешение на использование телефона?

В моем манифесте я прошу только эти два разрешения:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Но когда я устанавливаю приложение на свой телефон, я также получаю это уведомление:

 Low-risk permissions Phone ID Get your phone ID, including IMEI, IMSI, etc. 

Из того, что я собираю из этого ответа SO , мне нужно использовать TelephonyManager и позвонить

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

Потребовать это разрешение. Но я не использую TelephonyManager или не вызываю это разрешение. Я не хочу просить пользователей дать это разрешение. Я просмотрел свои файлы манифеста и градации. Может быть, какой-то код, который я использовал, вызвал это разрешение, вызванное без меня, специально спрашивающего об этом? Я знаю, что я не даю тебе многого, я не знаю, где еще искать.

Обновление 1

Я создал совершенно новый проект в Android Studio и создал из него подписанный APK. Я установил его, но никаких разрешений не было задано. (Это, по крайней мере, подтвердило для меня, что это не была «новая функция» в Android Studio, которая автоматически запрашивала это разрешение.)

Обновление 2

Что касается ответа @ antonio, то я нашел app/build/outputs/logs/manifest-merger-release-report.txt Однако я не нашел требуемых разрешений.

Обновление 3

Вот зависимости, которые использует мое приложение (от gradle.build):

 dependencies { compile 'com.android.support:support-v4:21.0.3' compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' } 

Я тестировал новое приложение с обеих этих зависимостей, и никаких разрешений не запрашивалось.

Мой следующий шаг – добавить все действия снова с нуля и посмотреть, могу ли я найти, где это разрешение начинает получать. Продолжение следует…

Обновление 4

Я играл, копируя все в новый проект и реорганизовывая название проекта и удаляя куски, но оказалось, что он довольно сложный. Я не смог выделить причину.

Обновление 5

Я установил targetSdkVersion в 1. Это дает новое сообщение при объявлении разрешений перед установкой приложения:

Читать статус телефона и личность

Приложение сможет получать доступ к функциям телефона устройства. Это разрешение позволяет приложению определять номер телефона и идентификаторы устройств, независимо от того, активен ли звонок и удаленный номер, связанный с вызовом.

Знание о разрешении старого телефона, о котором я писал в начале, все еще существует (появляется после установки приложения). Это заставляет меня задаться вопросом, связано ли это с ОС (я использую MIUI Android на телефоне Xiaomi). В приложении все еще есть что-то, что заставляет его отображать в этом приложении, но не в других приложениях. Мне нужно проверить это на других устройствах.

Solutions Collecting From Web of "Почему мое приложение запрашивает разрешение на использование телефона?"

Это происходит из-за того, что вы импортируете библиотеку с targetSdkVersion ниже целевого целевого приложения вашего приложения

Из документации Manifest Merger :

При импорте библиотеки с targetSdkVersion ниже, чем импортируемое приложение targetSdkVersion, некоторые разрешения могут быть автоматически добавлены в результирующий объединенный файл манифеста. Это необходимо, поскольку такие библиотеки ориентированы на время выполнения, когда такие разрешения были неявно предоставлены. Поэтому объявление такого разрешения не было необходимым. Однако в более поздних версиях Android эти разрешения не предоставляются автоматически. Поэтому библиотека, ориентированная на такую ​​старую рабочую среду без разрешений, не будет работать должным образом после объединения в приложении, ориентированного на более позднюю среду выполнения.

Разрешения, которые могут быть добавлены:

  • WRITE_EXTERNAL_STORAGE Добавлен при импорте библиотеки с targetSdkVersion <4
  • READ_EXTERNAL_STORAGE Добавлен при импорте библиотеки, которая объявила WRITE_EXTERNAL_STORAGE
  • READ_PHONE_STATE Добавлен при импорте библиотеки с targetSdkVersion <4
  • READ_CALL_LOG Добавлен при импорте библиотеки с targetSdkVersion <16 и использованием разрешения READ_CONTACTS
  • WRITE_CALL_LOG Добавлен при импорте библиотеки с targetSdkVersion <16 и использованием разрешения WRITE_CONTACTS

Вы можете проверить отчет, сгенерированный с помощью Manifest Merger (In \ app \ build \ output \ apk \ manifest-merger-XXX-report), чтобы узнать, какая библиотека вызвала добавление разрешения READ_PHONE_STATE. Вы увидите что-то вроде:

 android:uses-permission#android.permission.READ_PHONE_STATE IMPLIED from AndroidManifest.xml:2:1 reason: the.library has a targetSdkVersion < 4 

Добавьте следующий код в свой AndroidManifest.xml, чтобы удалить ненужные разрешения:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" /> 

Источник:

https://stackoverflow.com/a/27542669/406295