2015-06-04 12 views
7

Ho appena rilasciato un'app che ha due permessi nel suo file manifest (per mostrare banner pubblicitari). "android.permission.INTERNET" e "android.permission.ACCESS_NETWORK_STATE". Per i test ho provato ad installare la mia app dal mercato dei giochi e ho scoperto che l'app richiedeva identità, posizione, foto/media/file !! Non ci sono tali permessi nel mio file manifest e non ne ho bisogno. Ho provato le mie altre app con manifest.xml (Internet, stato della rete) simili che stanno installando senza autorizzazioni speciali. Considerando il nuovo sistema di certificazione della classificazione dei contenuti, potrei avere problemi perché nel questionario ho contrassegnato che non è necessaria la posizione dell'utente. Perché richiede autorizzazioni che non ho chiesto? Sto utilizzando Android Studio e build.gradle:L'utente ottiene la richiesta di autorizzazioni che non sono incluse nel manifest

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "com.appName" 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

repositories { 
    maven { 
     url "https://jitpack.io" 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.github.PhilJay:MPAndroidChart:v2.1.0' 
    compile 'com.melnykov:floatingactionbutton:1.3.0' 
    compile 'com.mcxiaoke.volley:library:1.0.+' 
    compile 'com.nispok:snackbar:2.10.2' 
    compile 'com.android.support:cardview-v7:22.2.0' 
    compile 'com.android.support:recyclerview-v7:22.2.0' 
    compile 'uk.co.chrisjenx:calligraphy:2.1.0' 
    compile 'com.google.android.gms:play-services:7.5.0' 
    compile 'com.android.support:appcompat-v7:22.2.0' 
    compile 'com.github.markushi:android-ui:1.2' 
    compile 'com.afollestad:material-dialogs:0.7.3.1' 
} 

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      package="com.AppPackage" > 

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

    <application 
     android:name=".MyApplication" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" 
     > 
     <activity 
      android:name=".MainActivity" 

      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.google.android.gms.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 

     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

     <activity android:name=".Prefs_Activity" > 
     </activity> 
     <activity 
      android:name=".Guide_Activity" 
      android:label="@string/title_activity_" > 
     </activity> 
     <activity 
      android:name=".Picker_Activity" 
      android:label="@string/title_activity_" > 
     </activity> 
    </application> 

</manifest> 

Aggiornamento:

Grazie alla risposta di CommonsWare ho trovato "-fusione-release manifesta -report.txt "e chi usa queste autorizzazioni. Queste sono mappe e API wallet. Ho separato servizio di gioco da questo:

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

a questo (ho bisogno di tutti per ora):

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

Risultati:

  • rimosse le autorizzazioni non necessarie dimensioni
  • apk ridotto fino a 500kb
  • ha iniziato a prendere seriamente la separazione API

Play Market apk update screenshot

+0

Quale sdk per banner pubblicitari stai utilizzando? forse il sdk è il problema e aggiungere le autorizzazioni aggiuntive – itay83

+0

Sto usando AdMob per visualizzare i banner – despecher

+0

Stai usando alcune librerie di terze parti? Stai usando AndroidStudio o Eclipse? Se si è gradle based, si prega di inviare il file gradle del modulo app e il manifest. Sembra che il tuo manifest sia stato fuso sulla confezione con uno che include queste autorizzazioni. –

risposta

8

Perché richiede autorizzazioni che non ho chiesto?

Perché si sta caricando in 11 librerie e una o più di queste richiedono tali autorizzazioni. In particolare, si sta caricando in com.google.android.gms:play-services e richiederà molte autorizzazioni. Ad esempio, Play Services ha l'API di posizione fusa e Google Maps, che richiedono entrambi i dati di posizione.

Un rapporto di fusione manifest deve essere scritto su build/outputs/apk/ del progetto o del modulo (ad esempio, in app/ in un progetto Android Studio tradizionale). È possibile utilizzare questo per cercare di determinare da dove vengono le autorizzazioni aggiuntive. Quindi, smetti di usare quelle librerie o passa a qualcos'altro. Nel caso di Play Services, invece di caricare in tutti i di Play Services, carica solo i pezzi di cui hai bisogno. Questo è coperto in the documentation (vedi la sezione "API che compilano in modo selettivo nella tua eseguibile").

Problemi correlati