2015-05-30 6 views
19

Dopo l'esecuzione dell'applicazione sull'applicazione del dispositivo è richiesta l'autorizzazione di posizione indesiderata che non è menzionata nel file manifest. Mentre sto eseguendo lo stesso codice dal mio amico studio Android rispetto alla normale esecuzione senza l'autorizzazione aggiuntiva richiesta.Studio Android aggiunge autorizzazioni indesiderate dopo l'esecuzione dell'applicazione sul dispositivo reale

file di manifesto

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

, quindi sono in grado di comprendere il motivo per cui la sua posizione richiede il permesso. Come è stata aggiunta questa autorizzazione di posizione nella mia app?

+1

forse stai usando alcune librerie che usano questa permessione aggiunta – Abdellah

+0

Controlla il manifest situato in "app \ build \ intermediates \ manifests \ debug" (dove "app" è il nome del modulo principale della tua applicazione). Contiene il permesso di localizzazione? – fRoStBiT

+1

Puoi mostrarci eventuali librerie aggiuntive che potresti utilizzare nel tuo progetto? –

risposta

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

Questa libreria richiede i permessi di localizzazione, in quanto molti dei Play Services ne hanno bisogno.

Innanzitutto, non utilizzare mai +. Se si desidera consentire i patchlevel fluttuanti (ad es., 22.0.+), ciò non è completamente folle, ma l'utilizzo di + per la versione è insano.

Quindi, considera l'utilizzo di una (o più) delle dipendenze più mirate, piuttosto che l'SDK completo di Play Services. Questo non solo eliminerà il permesso che non vuoi, ma il tuo APK sarà molto più piccolo. The documentation copre le opzioni disponibili (vedere la sezione "API che compilano in modo selettivo nel tuo eseguibile").

Se si continuano a disporre di autorizzazioni che non si desidera, è necessario determinare da dove provengono le autorizzazioni. Dovrebbe essere presente un rapporto di fusione manifest nel build/outputs/logs/ del modulo. Sarà un po 'difficile da capire, ma si spera che tu possa identificare la biblioteca che sta contribuendo con questa autorizzazione. Inoltre, Android Studio 2.2+ mostrerà il tuo manifest unito in una sottoscheda quando modifichi il manifest.

A quel punto, è necessario decidere come procedere:

  • La risposta più sicuro che rimuove il permesso è di non utilizzare più quella biblioteca, ma invece trovare qualche altra soluzione per qualsiasi problema che si sta cercando da risolvere con quella libreria

  • Oppure, vivere con il permesso

  • Oppure, provare ad aggiungere il seguente per manifestare la vostra applicazione:

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

Ciò richiederà di aggiungere xmlns:tools="http://schemas.android.com/tools" alla radice <manifest> elemento, se non è già presente. Questo dirà agli strumenti di compilazione di escludere esplicitamente questa autorizzazione, anche se le librerie lo stanno contribuendo. Tuttavia, l'utilizzo di tali librerie potrebbe interrompersi. Fai questo solo se hai un team di test dedicato che può impiegare il tempo necessario a garantire che la tua decisione di bloccare questa autorizzazione non comporti arresti anomali o altri comportamenti che riguardano l'utente.

+0

Grande! Grazie! Il servizio Google-Play aggiunge alcune strane autorizzazioni come android.permission.USE_CREDENTIALS e permesso.GET_ACCOUNTS, la mia app non ha bisogno di nessuno di questi, la soluzione "rimuovi" lancia queste autorizzazioni. In fatto, solo guardando nel file di registro ho potuto dire da dove venivano. –

4

Per le nuove versioni delle librerie di Google Play Service, è necessario aggiungere solo la parte richiesta della libreria come dipendenza. Per esempio, se si utilizza Google libreria Giocare servizio solo per visualizzare gli annunci di Admob, quindi sostituire

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

con

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

Questo rimuoverà le altre autorizzazioni necessarie.

+0

Grazie mille! Tu, buon signore, mi hai salvato! –

Problemi correlati