4

Ich modifiziere aktuelle Android-Projekt, so dass es auf dem gleichen Gerät für mehrere Geschmacksrichtungen installiert werden kann und Build-Konfigurationen.applicationId Manifest Platzhalter für mehrere Build Aromen funktioniert nicht

build.gradle:

{ 
    // ... 
    defaultConfig { 
     applicationId "com.myapp" 
     manifestPlaceholders = [ 
      manifestApplicationId: "${applicationId}", 
      onesignal_app_id: "xxxx", 
      onesignal_google_project_number: "xxxx" 
     ] 
    // ... 
    } 

    productFlavors { 
     production { 
      applicationId "com.myapp" 
      // ... 
     } 

     dev { 
      applicationId "com.myapp.dev" 
      // ... 
     } 

     // ... 
    } 

    buildTypes { 
     release { 
      // ... 
     } 

     debug { 
      applicationIdSuffix ".debug" 
      // ... 
     } 
    } 

    // ... 
} 

AndroidManifest.xml:

<manifest ... > 
    <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 
    <permission 
    android:name="${applicationId}.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" />  
    <!-- ... --> 

    <receiver 
     android:name="com.onesignal.GcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="${applicationId}" /> 
     </intent-filter> 
    </receiver> 

    <!-- ... --> 
</manifest> 

Wenn ich beide Debug kompilieren und Release-Version des gleichen Geschmack, bekam ich Fehlermeldung:

...

INSTALL_FAILED_DUPLICATE_PERMISSION

zul = com.myapp.permission.C2D_MESSAGE

PKG = com.myapp.dev

...

manifestApplicationId Platzhalter aus AndroidManifest.xml auf als OneSignal Bibliothek kam angewiesen auf https://documentation.onesignal.com/docs/android-sdk-setup

Jeder haben eine Ahnung, wie Sie dieses Problem beheben? Vielen Dank.

+0

Ich denke, das ist ein Duplikat von http://stackoverflow.com/questions/27043933/install-failed-duplicate-permission-c2d-message. Sie müssen die App vom Gerät deinstallieren und neu installieren. – Blehi

+0

@Blehi: Natürlich wird das Deinstallieren der installierten Variante den Fehler beseitigen. Aber mein Ziel ist es, alle Varianten auf ein und demselben Gerät zu installieren. Vielen Dank. – Wellsen

Antwort

10

OneSignal erfordert, dass der manifestPlaceholders Schlüssel manifestApplicationId auf applicationId (AKA Ihr Paketname) gesetzt wird.

Dies kann getan werden, indem Sie es wie folgt in Ihrem buildTypes setzen.

buildTypes { 
    debug { 
     defaultConfig { 
     manifestPlaceholders = [manifestApplicationId   : "${applicationId}", 
           onesignal_app_id    : "11111111-1111-1111-1111-111111111111", 
           onesignal_google_project_number: "111111111"] 
     } 
    } 

    release { 
     defaultConfig { 
     manifestPlaceholders = [manifestApplicationId   : "${applicationId}", 
           onesignal_app_id    : "22222222-2222-2222-2222-222222222222", 
           onesignal_google_project_number: "222222222"] 
     } 
    } 
} 

aktualisieren: manifestApplicationId ist nicht mehr erforderlich, für 3.3.0 und neuere des OneSignal SDK.

+0

Vielen Dank für Ihre Antwort. Ich habe diese Platzhalter in defaultConfig closure bei jedem buildType wie obigen Code hinzugefügt, jetzt habe ich Build fehlgeschlagen: Fehler: Ausführung fehlgeschlagen für Task ': app: processProductionReleaseManifest'. > Kein Datensatz für Schlüssel [Berechtigung # $ {ManifestApplicationId} .permission.C2D_MESSAGE] – Wellsen

+0

Bearbeiten: Ich habe vergessen, Tools zu entfernen: overrideLibrary und Tools: override auf meinem Manifest, die ich zuvor hinzugefügt. Nachdem ich das getan habe, ist der Fehler zurück zu "doppelte Erlaubnis". Versuche immer noch, die Lösung zu finden ... – Wellsen

+0

@Wellsen Nachdem du diese '.gradle' Änderung vorgenommen hast, musst du beide Apps deinstallieren und dann neu installieren. Einer von ihnen hat wahrscheinlich die falsche Erlaubnis, also wird dies benötigt. – jkasten

Verwandte Themen