2016-04-24 15 views
2

Ich baue eine winzige Dummy-App über die Befehlszeile (kein Gradle) mit nur einer leeren Aktivität, keine Berechtigungen, keine Support-Bibliotheken (oder andere Bibliotheken, Google Play, usw.) und doch fordert Android immer diese beiden auf während der Installation Berechtigungen:Warum werden während der Installation immer zwei Berechtigungen angefordert?

enter image description here

ich verstehe, wie und warum Berechtigungen zusammen erhalten in, wenn andere Bibliotheken während eines Build enthalten sind, aber meine app hat nichts enthalten. Ich habe die kompilierte AndroidManifest.xml aus der resultierenden APK extrahiert und entschlüsselt und es gibt keinen <uses-permission> Tag irgendwo innerhalb davon.

Laut this question wird der READ_PHONE_STATE hinzugefügt, wenn kein Wert minSdkVersion eingegeben wird, aber ich habe einen im Manifest deklariert (was ich auch im kompilierten Manifest sehen kann). Hier ist die Quelle manifestieren:

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

    <uses-sdk minSdkVersion="20" targetSdkVersion="22" /> 

    <application 
     android:label="TestApp No Perms" 
     android:icon="@drawable/ic_launcher"> 

     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

Die einzige Aktivität (MainActivity) nur Anrufe setContentView() auf ein leeres Layout.

Kann irgendjemand ein Licht darauf werfen, warum diese Berechtigungen immer angefordert werden oder wie verhindert werden kann, dass sie dazu aufgefordert werden?

+1

Haben Sie auch die Gradle-Datei überprüft? – fillobotto

+0

@fillobotto no gradle (wie in der ersten Zeile erwähnt) - Die App wird durch Ausführen der Android SDK-Befehlszeilentools kompiliert. – adelphus

+0

"Die App wird kompiliert, indem die Android SDK-Befehlszeilentools ausgeführt werden" - dies schließt die Verwendung von Gradle nicht aus. In der Tat, wenn Sie Gradle * nicht * benutzen, könnte das ein Teil Ihres Problems sein. Frühere Befehlszeilenansätze (z. B. Ant) werden nicht mehr unterstützt. – CommonsWare

Antwort

0

Die Antwort kam auf die fehlenden android: Präfix auf den minSdkVersion und targetSdkVersion Attribute.

Wenn kein Präfix android: vorliegt, werden keine Warnungen oder Fehler vom Ressourcencompiler ausgegeben, aber aufgrund des fehlenden Präfix wird der Wert ignoriert, wenn das APK-Manifest während der Installation analysiert wird.

Das Endergebnis ist, dass Android glaubt, dass es keine minSdkVersion gesetzt ist und, wie in Why does my app has the READ_PHONE_STATE permission although it's not declared in manifest? berichtet, fordert automatisch die Berechtigungen.

Das Hinzufügen des Präfixes android: behebt das Problem und ermöglicht die Installation der App ohne Eingabeaufforderungen.

Verwandte Themen