¿Por qué play-services-location necesita los permisos android.permission.WRITE_EXTERNAL_STORAGE y android.permission.READ_EXTERNAL_STORAGE?

Todo lo que tengo en AndroidManifest.xml es:

    

Después de cargar la APK en la consola de desarrollador, agrega dos nuevos permisos: enter image description here

Mi build.gradle:

 apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "net.perspiratron.ifpaprofile" minSdkVersion 15 targetSdkVersion 22 versionCode 3 versionName "1.2" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // wearApp project(':wear') compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.google.android.gms:play-services-analytics:7.5.0' compile 'com.google.android.gms:play-services-location:7.5.0' compile 'com.jjoe64:graphview:4.0.0' } 

Lo único que agregué fue play-services-location. ¿Por qué esta biblioteca lo necesita?

Respuesta corta: no creo que play-services-location necesite esos permisos. Tampoco parece necesitar android.permission.ACCESS_NETWORK_STATE o android.permission.INTERNET , que también se están agregando.

Respuesta más larga: al examinar mi registro de fusión manifiesta, parece que los cuatro de estos permisos se están incluyendo a petición de play-services-maps, cuya ubicación está ligando por sí misma. Mi aplicación no usa mapas, solo ubicación.

Además, descubrí que este comportamiento acaba de aparecer en la versión 7.5.0 de play-services-location; las versiones anteriores no incluían -mapas, y no agregan esos permisos.

De hecho, sospecho que esta conexión a play-services-maps es accidental y se eliminará en una versión futura de GMS.

Siguiendo el enlace proporcionado por Mark Murphy (CommonsWare), puede eliminar estos permisos de su aplicación agregando las siguientes líneas a su manifiesto:

     

Tenga en cuenta que también necesitará xmlns:tools="http://schemas.android.com/tools" en su elemento de apertura para que funcionen. Y las advertencias habituales se aplican: mi aplicación funcionó bien después de dar este paso, pero YMMV.


Actualización del 10 de septiembre de 2015: Mark Murphy (@commonsware) ha realizado una excelente reseña sobre este tema en su blog, incluida una discusión sobre los riesgos de mi solución.