10

Tutto quello che ho in AndroidManifest.xml è:Perché play-services-location necessita delle autorizzazioni android.permission.WRITE_EXTERNAL_STORAGE e android.permission.READ_EXTERNAL_STORAGE?

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

Dopo aver caricato l'APK alla console sviluppatore, aggiunge due nuove permesso: enter image description here

mio 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' 
} 

L'unica cosa che ho aggiunto era play-services-location. Perché questa biblioteca ne ha bisogno?

+0

http://stackoverflow.com/questions/30546197/android-studio-add-unwanted-permission-after-running-application-on-real-device – CommonsWare

+0

ok sì, ho aggiunto play-services-location ... – dols

+0

Modificato il titolo della domanda .. – dols

risposta

16

Risposta breve: non credo che la posizione dei servizi di gioco abbia bisogno di tali autorizzazioni. Nemmeno sembra necessario android.permission.ACCESS_NETWORK_STATE o android.permission.INTERNET, che vengono aggiunti anche.

Risposta più lunga: Guardando il mio registro di fusione manifest, sembra che tutte e quattro queste autorizzazioni siano state incluse su richiesta di play-services-maps, la cui posizione è collegata in modo autonomo. La mia app non sta usando -maps, solo -location.

Inoltre, ho trovato che questo comportamento è appena apparso nella versione 7.5.0 di play-services-location; le versioni precedenti non includevano -maps e non aggiungevano tali permessi.

In realtà sospetto che questa connessione a giochi-servizi-mappe sia accidentale e verrà rimossa in una versione futura di GMS.

In seguito al link indicato da Mark Murphy (CommonsWare), è possibile rimuovere queste autorizzazioni dalla tua app aggiungendo le seguenti righe al manifesto:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" tools:node="remove" /> 
<uses-permission android:name="android.permission.INTERNET" tools:node="remove" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" /> 

Si noti che avrete anche bisogno xmlns:tools="http://schemas.android.com/tools" in l'elemento <manifest ... > di apertura per far funzionare questi elementi. E i soliti avvertimenti si applicano: la mia app ha funzionato bene dopo aver fatto questo passo, ma YMMV.


Aggiornamento 10 Settembre 2015: Mark Murphy (@commonsware) ha fatto an excellent writeup on this issue sul suo blog, tra cui una discussione dei rischi di mia soluzione.

+0

grazie, ho usato apktool per verificare che AndroidManifest.xml nell'apk avesse le autorizzazioni che mi aspettavo. – dols

+1

Una cosa da notare è che la posizione si basa sulle mappe perché le mappe sono quelle che contengono [LatLng] (https://developers.google.com/android/reference/com/google/android/gms/maps/model/LatLng) , la base di molte delle API di localizzazione. – ianhanniballake

+0

non ho capito come una libreria che utilizzo come i servizi di gioco può chiedere i permessi per me? –

Problemi correlati