2017-06-01 4 views
12

Wir haben eine App, die aus einer Drittanbieter-Bibliothek (Altbeacon), einer lokal erstellten Android-Bibliothek und einer App-Komponente besteht. Alle drei Komponenten verfügen über eine AndroidManifest.xml, die während des Builds zusammengeführt werden. Die App wird mit Gradle erstellt.Android Manifest Duplicate Berechtigungen

Diese App wurde lange im Google Play Store veröffentlicht. In der letzten Iteration haben wir von API Level 22 auf 25 aktualisiert. Alles ohne Fehler gebaut, das APK wurde auf echten Geräten ohne Fehler installiert und getestet, aber als wir kamen, um die App bei Google Play zu aktualisieren, scheiterte der Upload der APK mit der Fehler:

Upload failed
Duplicate declarations of permission android.permission.ACCESS_COARSE_LOCATION with different maxSdkVersions.

Anaylyzing die AndroidManaifest.xml wir org.altbeacon.beacon hat die folgende Berechtigung gefunden:

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="23" /> 
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

Unsere lokalen Android Bibliotheksmodul der targetSdkVersion ist auf 25 in build.gradle und Die AndroidManifest.xml enthält:

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

Im App-Modul ist targetSdkVersion in build.gradle auf 25 gesetzt.

Die erzeugte AndroidManifest.xml im App-Modul enthält:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

und nur um zu bestätigen, in der APK suchen selbst und Extrahieren der binären manifestieren:

~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE 
    E: uses-permission (line=62) 
     A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION") 
-- 
    E: uses-permission-sdk-23 (line=76) 
     A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION") 

es so ist ein Duplikat Tag, und ich denke, dass die Manifest-Fusion das erkannt haben sollte und das aus der Altbeacon-Bibliothek entfernte. Meine Frage ist, wie entferne ich die Erlaubnis von der altbeacon Bibliothek?

Ich habe folgendes in der App-Modul AndroidManifest.xml versucht:

<uses-permission-sdk-23 
    android:name="android.permission.ACCESS_COARSE_LOCATION" 
    tools:node="remove" 
    tools:selector="org.altbeacon.beacon"/> 

Daraus ergibt sich:

AndroidManifest.xml:12:5-15:48 Warning: 
     uses-permission-sdk-23 was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present 

und

<uses-permission 
    android:name="android.permission.ACCESS_COARSE_LOCATION" 
    tools:node="remove" 
    tools:selector="org.altbeacon.beacon"/> 

Dies führt dazu:

AndroidManifest.xml:12:5-15:48 Warning: 
     uses-permission was tagged at AndroidManifest.xml:12 to remove other declarations but no other declaration present 

Folgendes funktioniert, aber es entfernt das falsche Tag, es entfernt das in der lokalen Android-Bibliothek, die wir als Teil unserer App erstellen.

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

Die org.altbeacon.beacon Erlaubnis links:

~/.android-sdk/build-tools/25.0.3/aapt l -a app-release.apk | grep -B1 COARSE 
E: uses-permission-sdk-23 (line=72) 
    A: android:name(0x01010003)="android.permission.ACCESS_COARSE_LOCATION" (Raw: "android.permission.ACCESS_COARSE_LOCATION") 

Welche unbefriedigenden ist, weil, wenn die Berechtigung in org.altbeacon.beacon Bibliothek chamge, oder es in Zukunft entfernt wird, die ACCESS_COARSE_PERMISSION wird in unserer App fehlen.

Haben Sie Vorschläge, wie Sie das Problem beheben können?

+0

Ich habe exakt das gleiche Problem. – green0range

+2

Ich habe einen Fehler mit Google eingereicht - https://issuetracker.google.com/issues/62267639 – BitByteDog

+0

Lustig genug, wir sind genau das gleiche Problem mit genau dieser gleichen Bibliothek jetzt! –

Antwort

7

In Ihrer App-Manifest-Datei, die unter merge Regel hinzuzufügen.

<uses-permission-sdk-23 
     tools:node="removeAll" /> 

Stellen Sie sicher, dass Sie bereits die Standorterlaubnis hinzugefügt haben.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
+2

Das funktioniert, aber kommt mit einer Warnung. Alle use-permission-sdk-23-Tags werden in allen Manifesten entfernt. Stellen Sie daher sicher, dass Sie ein uses-permission-Tag in der Haupt-App AndroidManifest.xml für jedes use-permission-sdk-23-Tag hinzufügen, das in den von Ihnen beigesteuerten AndroidManifest.xml-Dateien entfernt wurde die Bibliothekskomponenten. – BitByteDog

+0

Android Studio sagt, dass das Attribut name fehlt: '' Aber wenn ich es erstelle, ist alles in Ordnung. – egmontr

4

Ersetzen Sie einfach unter Zeile, um Ihre bestehenden Verwendungen Erlaubnis würde die Probleme lösen.

Was dies verursacht, weil Sie eine doppelte Berechtigung in Manifest hinzugefügt haben, aber unterhalb der Zeile die Berechtigung teilen.

<uses-permission 
 
     android:name="android.permission.ACCESS_COARSE_LOCATION" 
 
     android:maxSdkVersion="22"/>

+0

Das ist für mich behoben! Danke! – green0range

+2

Das hat bei mir nicht funktioniert. In der zusammengeführten AndroidManifest.xml endete ich mit beiden Zeilen noch. Ich sehe, was Sie erreichen wollten, die Erlaubnis von unserer Bibliothek würde bis API-Ebene 22 verwendet werden, dann von API-Ebene 23 würde die Erlaubnis von Altbeacon verwendet werden. Selbst wenn es funktionierte, würde es meine Bedenken nicht ansprechen, dass eine Änderung in altbeacon jetzt unsere Anwendung ohne Warnung beeinflussen könnte. – BitByteDog

Verwandte Themen