El estudio de Android agrega permisos no deseados después de ejecutar la aplicación en un dispositivo real

Después de ejecutar la aplicación en el dispositivo, se requiere un permiso de ubicación no deseado que no se menciona en el archivo de manifiesto. Mientras que cuando estoy ejecutando el mismo código de mi amigo estudio de Android que su ejecución normal sin necesidad de un permiso adicional.

Archivo manifiesto

             

enter image description here

Build.gradle

 apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "xxxxxxx" minSdkVersion 14 targetSdkVersion 21 // Enabling multidex support. multiDexEnabled true } 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 project(':boxAndroidLibraryV2') compile 'com.google.http-client:google-http-client-gson:1.19.0' compile 'com.google.code.gson:gson:2.1' compile 'com.google.android.gms:play-services:+' compile files('libs/HockeySDK-3.0.2.jar') compile files('libs/dropbox-android-sdk-1.6.3.jar') compile 'com.google.apis:google-api-services-drive:v2-rev164-1.20.0' compile files('libs/in-app-purchasing-2.0.59.jar') compile files('libs/json_simple-1.1.jar') compile 'com.android.support:multidex:1.0.0' compile 'com.android.support:appcompat-v7:21.0.3' compile files('libs/slf4j-api-1.7.5.jar') compile files('libs/jackrabbit-webdav-2.7.2.jar') compile files('libs/commons-httpclient-3.1.jar') compile project(':utilities') compile files('libs/pass-v1.1.3.jar') compile files('libs/sdk-v1.0.0.jar') compile 'com.google.api-client:google-api-client:1.20.0' compile 'com.google.oauth-client:google-oauth-client:1.20.0' compile 'com.google.api-client:google-api-client-android:1.20.0' compile 'com.google.http-client:google-http-client-android:1.20.0' } configurations { all*.exclude group: 'com.google.guava', module:'guava-jdk5' } 

Por lo tanto, no puedo entender por qué requiere permiso de ubicación. ¿Cómo se agregó este permiso de ubicación en mi aplicación?

 compile 'com.google.android.gms:play-services:+' 

Esta biblioteca solicitará permisos de ubicación, ya que varias piezas de Play Services lo necesitan.

Primero, nunca use + . Si desea permitir niveles de par flotante (por ejemplo, 22.0.+ ), Eso no es completamente loco, pero usar + para la versión es una locura.

A continuación, considere usar una (o más) de las dependencias más específicas, en lugar del SDK completo de Play Services. Esto no solo eliminará el permiso que no desea, sino que su APK será mucho más pequeño. La documentación cubre las opciones disponibles (consulte la sección “API que comstack selectivamente en su ejecutable”).

Si todavía terminas con permisos que no deseas, entonces deberás determinar de dónde provienen los permisos. Debería haber un informe de fusión manifiesto en build/outputs/logs/ de su módulo. Será un poco difícil de entender, pero es de esperar que pueda identificar la biblioteca que está contribuyendo con este permiso. Además, Android Studio 2.2+ mostrará su manifiesto combinado en una subpestaña cuando edite su manifiesto.

En ese punto, debe decidir cómo proceder:

  • La respuesta más segura que elimina el permiso es no usar más esa biblioteca, sino encontrar alguna otra solución para cualquier problema que intente resolver con esa biblioteca

  • O, vive con el permiso

  • O intente agregar lo siguiente al manifiesto de su aplicación:

      

Esto requerirá que agregue xmlns:tools="http://schemas.android.com/tools" al elemento raíz si aún no está allí. Esto indicará a las herramientas de comstackción que excluyan explícitamente este permiso, aunque las bibliotecas lo estén contribuyendo. Sin embargo, su uso de esas bibliotecas puede romperse . Solo haga esto si cuenta con un equipo de pruebas dedicado que puede emplear el tiempo necesario para garantizar que su decisión de bloquear este permiso no genere fallas u otro comportamiento que afecte al usuario.

Para las nuevas versiones de las bibliotecas del servicio Google Play, solo debe agregar la parte requerida de la biblioteca como dependencia. Por ejemplo, si está utilizando la biblioteca de servicios de Google Play solo para mostrar anuncios de Admob, entonces reemplace

 compile 'com.google.android.gms:play-services:+' 

con

 compile 'com.google.android.gms:play-services-ads:7.5.0' 

Esto eliminará los otros permisos innecesarios.