Студия Android добавляет нежелательное разрешение после запуска приложения на реальном устройстве
После запуска приложения на устройстве требуется разрешение нежелательного расположения, которое не упоминается в файле манифеста. Хотя, когда я запускаю тот же код из моего друга Android Studio, чем обычно, без дополнительного разрешения требуется.
Файл манифеста
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
![enter image description here]()
Build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "xxxxxxx"
}
dexOptions {
javaMaxHeapSize "4g"
}
packagingOptions {
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
lintOptions{
abortOnError false
}
}
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.android.gms:play-services:+'
compile 'com.android.support:multidex:1.0.0'
compile 'com.android.support:appcompat-v7:21.0.3'
}
Поэтому я не могу понять, почему требуется разрешение на местоположение. Как добавить это разрешение в мое приложение?
Ответы
Ответ 1
compile 'com.google.android.gms:play-services:+'
В этой библиотеке будут запрашиваться разрешения на доступ, так как это необходимо нескольким компонентам Служб Службы.
Во-первых, никогда не используйте +
. Если вы хотите разрешить свободно плавающие уровни патчей (например, 22.0.+
), это не совсем безумно, но использование +
для версии является безумным.
Затем рассмотрите возможность использования одной (или более) более ориентированных зависимостей, а не полного SDK Служб Службы. Мало того, что это, возможно, устранит разрешение, которого вы не хотите, но ваш APK будет намного меньше. Документация охватывает доступные параметры (см. раздел "Выборочная компиляция API в ваш исполняемый файл" ).
Если у вас все еще есть разрешения, которые вам не нужны, вам нужно будет определить, откуда идут разрешения. В build/outputs/logs/
вашего модуля должен быть отчет о слиянии. Это будет немного сложно понять, но, надеюсь, вы можете определить библиотеку, которая вносит это разрешение. Кроме того, Android Studio 2.2+ покажет ваш объединенный манифест на суб-вкладке при редактировании манифеста.
В этот момент вам нужно решить, как действовать:
-
Самый безопасный ответ, который удаляет разрешение, больше не использует эту библиотеку, а вместо этого найдет другое решение любой проблемы, которую вы пытаетесь решить с помощью этой библиотеки.
-
Или, живите с разрешением
-
Или попробуйте добавить в манифест приложения следующее:
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
tools:node="remove" />
Это потребует добавить xmlns:tools="http://schemas.android.com/tools"
к корневому элементу <manifest>
, если он еще не существует. Это покажет, что инструменты сборки явно исключают это разрешение, даже если библиотеки вносят его. Однако использование этих библиотек может сломаться. Выполняйте это только в том случае, если у вас есть специальная группа тестирования, которая может потратить время, необходимое для того, чтобы ваше решение заблокировать это разрешение не привело бы к сбоям или другим поведением, которое влияет на пользователя.
Ответ 2
Для новых версий библиотек Служб Google Play вы должны добавить только необходимую часть библиотеки в качестве зависимости. Например, если вы используете Google Play Service только для показа объявлений из Admob, замените
compile 'com.google.android.gms:play-services:+'
с
compile 'com.google.android.gms:play-services-ads:7.5.0'
Это приведет к удалению других ненужных разрешений.
Ответ 3
Вам необходимо проверить объединенный манифест.
Библиотеки, которые вы используете, также могут запрашивать разрешения.
Вот откуда это разрешение.
![enter image description here]()