wake-up-neo.com

INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

Ich verwende Google-Benachrichtigungen in meiner App, und bis jetzt habe ich unten im Manifest Folgendes ausgeführt:

<!-- GCM -->
<uses-permission Android:name="Android.permission.GET_ACCOUNTS" /> <!-- GCM requires a Google account. -->
<uses-permission Android:name="Android.permission.WAKE_LOCK" /> <!-- Keeps the processor from sleeping when a message is received. --> 
<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE" /> <!-- This app has permission to register and receive data message. --> 

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission Android:name="com.myapp.permission.C2D_MESSAGE" Android:protectionLevel="signature" />
<uses-permission Android:name="com.myapp.permission.C2D_MESSAGE" />    
<!-- END GCM -->

Es hat perfekt funktioniert, bis ich mein Nexus 7 auf Android 5.0 aktualisiert habe.
Wenn ich jetzt versuche, die App auf diesem Gerät mit Eclipse zu installieren, erhalte ich diesen Fehler:

INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.myapp.permission.C2D_MESSAGE pkg = com.myapp

Ich verstehe nicht was falsch ist ... bis Android 5.0 funktionierte es einwandfrei.
Ich weiß, dass ich C2D_MESSAGE in zwei Zeilen verwende, permission und uses-permission, aber ich habe diesen Code aus dem ursprünglichen Google GCM-Handbuch kopiert, es muss also in Ordnung sein.

167

Ich habe eine Lösung gefunden, die für mich funktioniert.

In meinem Gerät (Nexus 7) Android 5.0. Lutscher Ich folge diesen Schritten.

Nach der Deinstallation der App Sie finden App Name unter der Liste der Apps auf der Registerkarte Downloaded

  • Gehe zu den Einstellungen 
  • Apps 
  • Am Ende der Liste finden Sie YourApp mit einem "NOT INSTALLED" -Tag 
  • Öffnen 
  • Klicken Sie auf OptionMenu und wählen Sie "Für alle Benutzer deinstallieren"

Nach diesem Vorgang installiere ich die neue App erfolgreich und sie läuft gut.

221
Pratik Butani

Löschen 

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

App ausführen ....___. Fügen Sie dann die Berechtigung erneut hinzu und führen Sie die App aus.

Bereit!.

132
Delmirio Segura

Ich hatte das gleiche Problem mit einer benutzerdefinierten Signaturerlaubnis für Android-21 und löste es, indem ich mich vergewisserte, dass ich eine vollständige Deinstallation durchführte. 

Dies ist ein Edge-Fall, der auftritt, wenn:

  1. Eine Anwendung definiert eine benutzerdefinierte Berechtigung unter Verwendung der Sicherheit auf Signaturebene
  2. Sie versuchen, die installierte App mit einer mit einem anderen Schlüssel signierten Version zu aktualisieren
  3. Auf dem Testgerät wird Android 21 oder neuer mit Unterstützung für mehrere Benutzer ausgeführt

Befehlszeilenbeispiel

Hier ist ein Befehlszeilentranskript, das das Problem und seine Lösung veranschaulicht. An diesem Punkt ist eine Debug-Version installiert und ich versuche, eine mit dem Freigabeschlüssel signierte Produktionsversion zu installieren:

# This fails because the debug version defines the custom permission signed with a different key:

[[email protected] svn-Android-apps]# . androidbuildscripts/my-adb-install Example release
920 KB/s (2211982 bytes in 2.347s)
        pkg: /data/local/tmp/Example-release.apk
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example.Android.example.PERMISSION_EXAMPLE_PLUGIN pkg=com.example.Android.example]

# I use uninstall -k because apparently that is similar to uninstalling as a user
# by dragging the app out of the app tray:

[[email protected] svn-Android-apps]# /Android-sdk-linux/platform-tools/adb uninstall -k com.example.Android.example
The -k option uninstalls the application while retaining the data/cache.
At the moment, there is no way to remove the remaining data.
You will have to reinstall the application with the same signature, and fully uninstall it.
If you truly wish to continue, execute 'adb Shell pm uninstall -k com.example.Android.example'

# Let's go ahead and do that:

[[email protected] svn-Android-apps]# /Android-sdk-linux/platform-tools/adb Shell pm uninstall -k com.example.Android.example
Success

# This fails again because the custom permission apparently is part of the data/cache
# that was not uninstalled:

[[email protected] svn-Android-apps]# . androidbuildscripts/my-adb-install Example release
912 KB/s (2211982 bytes in 2.367s)
        pkg: /data/local/tmp/Example-release.apk
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.example.Android.example.PERMISSION_EXAMPLE_PLUGIN pkg=com.example.Android.example]

# In spite of the warning above, simply doing a full uninstall at this point turned out to 
# work (for me):

[[email protected] svn-Android-apps]# /Android-sdk-linux/platform-tools/adb uninstall com.example.Android.example
Success

# Release version now successfully installs:

[[email protected] svn-Android-apps]# . androidbuildscripts/my-adb-install Example release
898 KB/s (2211982 bytes in 2.405s)
        pkg: /data/local/tmp/Example-release.apk
Success

[[email protected] svn-Android-apps]# 

Eclipse-Beispiel

In umgekehrter Richtung (beim Versuch, einen Debug-Build von Eclipse zu installieren, wenn bereits ein Release-Build installiert ist), wird das folgende Dialogfeld angezeigt:

Eclipse reinstall dialog

Wenn Sie an dieser Stelle nur mit Ja antworten, ist die Installation erfolgreich.

Gerätebeispiel

Wie in einer anderen Antwort beschrieben, können Sie auch in den Geräteeinstellungen auf eine App-Infoseite gehen, auf das Überlaufmenü klicken und "Für alle Benutzer deinstallieren" auswählen, um diesen Fehler zu vermeiden.

47
x-code

Ich habe dieses Problem gelöst, ohne zuerst die alternative Apk deinstallieren zu müssen (was für ein Schmerz, oder?). Um sowohl eine Debug- als auch eine Release-Version eines apk erfolgreich zu installieren, verwenden Sie einfach den integrierten Platzhalter $ {applicationId} innerhalb von AndroidManifest.xml, um die Android-Werte der Berechtigungen zum Zeitpunkt der Kompilierung zu ändern.

Das build.gradle-Datei-Snippet:

buildTypes {
    debug {
        applicationIdSuffix ".debug"
        ...
    }
}

Das AndroidStudio.xml-Datei-Snippet:

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

Sie können die geänderte AndroidManifest.xml-Datei in der apk mit aapt l -a app-debug.apk überprüfen, um sicherzustellen, dass der Platzhalter ordnungsgemäß angewendet wurde. Wenn Sie verschiedene Produktvarianten verwenden, können Sie sicher eine Variante dieser Methode anwenden, die Ihren Anforderungen entspricht.

32
Jackpile

Entfernen Sie einen "hart codierten" Verweis auf Ihren Paketnamen aus Ihrer Manifestdatei.

(Dies ist die beste Methode, auch wenn Sie productFlavors nicht verwenden.)

Wenn Ihr Manifest beispielsweise Folgendes enthält:

<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE"/>
<uses-permission Android:name="com.yourpackage.name.permission.C2D_MESSAGE"/>

<permission
    Android:name="com.yourpackage.name.permission.C2D_MESSAGE"
    Android:protectionLevel="signature"/>
<permission
    Android:name="com.yourpackage.name.permission.MAPS_RECEIVE"
    Android:protectionLevel="signature"/>

Geändert zu:

<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE"/>
<uses-permission Android:name="${applicationId}.permission.C2D_MESSAGE"/>

<permission
    Android:name="${applicationId}.permission.C2D_MESSAGE"
    Android:protectionLevel="signature"/>
<permission
    Android:name="${applicationId}.permission.MAPS_RECEIVE"
    Android:protectionLevel="signature"/>

Legen Sie dann in Ihrer Modul-Gradlendatei Ihre relevante applicationId fest:

signingConfigs {
    stage {
        storeFile file('keystore/stage.keystore')
        storePassword 'Android'
        keyAlias 'androiddebugkey'
        keyPassword 'Android'
    }
    production {
        storeFile file('keystore/playstore.keystore')
        storePassword store_password
        keyAlias key_alias
        keyPassword key_password
    }
}

productFlavors {
    staging {
        signingConfig signingConfigs.staging
        applicationId defaultConfig.applicationId + ".staging"
        versionName defaultConfig.versionName + "-staging"
    }

    production {
        signingConfig signingConfigs.production
    }
}

Sie können diesem Tutorial folgen, um weitere Informationen zu erhalten .

23
David

Während dieses Fehlers angegeben wird, wird der Paketname der App eindeutig erwähnt, weshalb die Berechtigung abgelehnt wurde. Durch das Deinstallieren der Anwendung wird das Problem nicht gelöst. Um das Problem zu lösen, müssen wir den folgenden Schritt ausführen:

  1. Gehe zu den Einstellungen 
  2. Gehen Sie zur App 
  3. Gehen Sie zur Liste der heruntergeladenen Apps 
  4. Sie können die deinstallierte Anwendung in der Liste sehen 
  5. Klicken Sie auf die Anwendung, gehen Sie zu mehr Option 
  6. Klicken Sie auf uninstall für alle Benutzer Optionen

Problem gelöst: D 

17
Preethi Rao

versuchen Sie, die App mit Adb zu deinstallieren:

adb uninstall com.yourpackage
16
Giuseppe

Bei der Installation einer Anwendung unter OS 5.0 erhalte ich folgende Meldung:

INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.myapp.permission.C2D_MESSAGE pkg=com.myapp

Es gibt keine duplizierten Pakete, und wir können dieses Problem lösen, indem Sie die alte Anwendung manuell deinstallieren oder die Adb-Datei verwenden:

adb uninstall com.yourpackage

8
Elenasys

Überprüfen Sie in Android 5 Ihre Einstellungen -> Apps. Anstatt nur für den aktiven Benutzer zu löschen (da Android 5 mehrere Benutzer haben kann und mein Telefon einen Gastbenutzer hat), tippen Sie auf die Schaltfläche "Zubehör" in der rechten oberen Ecke der Aktions-/Symbolleiste und wählen Sie "Für alle Benutzer deinstallieren". Es scheint, als würden Sie in Android 5 die App nur für den aktiven Benutzer deinstallieren, wenn Sie sie einfach vom Starter deinstallieren. 

Die App ist immer noch auf dem Gerät. Dies hat mich geblendet, seit ich versuchte, eine Release-Version zu installieren. Ich habe nicht gedacht, dass es richtig sein muss, da ich immer noch die Debug-Version installiert habe. Die App wurde deinstalliert. Aber es konnte immer noch nicht installiert werden. Der erste Hinweis war ein Eintrag in der App-Liste der deinstallierten App mit der Meldung daneben, dass sie deinstalliert wurde (Image).

Uninstalled app still showing up in appsUninstalled for all users

4
Jordy

CommonsWare hat Recht, aber meiner Meinung nach ist dies eine (schlechte) schlechte Art zu sagen: "Die auf dem Gerät installierte apk ist mit einem anderen Zertifikat signiert als das neue, das Sie installieren wollen" .

Dies ist wahrscheinlich ein neuer Fehler, da früher gefragt wurde, ob die App aufgrund eines falschen Zertifikats vom Gerät deinstalliert werden soll.

Die Lösung, so schmerzhaft es auch sein mag, wäre, die App manuell zu deinstallieren.

Außerdem haben wir den Debug-Keystore zu unserem Repository hinzugefügt, und wir haben den Graduierer dazu gebracht, ihn wie folgt zu verwenden:

Android {
    ...
    signingConfigs {
        debug {
            storeFile file("../certificates/debug.keystore")
        }
    }

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
    }

    ...
}

Wenn jetzt Geräte zwischen den Teammitgliedern übergeben werden, verwenden wir dasselbe Debug-Zertifikat, sodass kein Problem besteht. :)

4
TacB0sS

Keines der oben genannten Dinge funktionierte für mich. Meine App funktionierte im Vorfeld besser als Lollipop. Als ich es auf Lollipop testete, kam der obige Fehler auf. Es lehnte die Installation ab. Ich hatte keine Vorversionen installiert, daher sind alle oben genannten Lösungen in meinem Fall ungültig. Aber dank dieser SO -Lösung jetzt läuft es gut. Genau wie die meisten Entwickler folgte ich dem irreführenden Tutorial von Google und fügte die Berechtigungen durch Kopieren und Einfügen wie folgt hinzu:

<uses-permission Android:name="com.google.Android.c2dm.permission.RECEIVE" />
<permission Android:name="com.google.Android.permission.C2D_MESSAGE" 
            Android:protectionLevel="signature" />

Dies würde mit älteren Versionen <Lollipop funktionieren. Also habe ich mich geändert zu:

<uses-permission Android:name="com.mycompany.myappname.c2dm.permission.RECEIVE" />
<permission Android:name="com.mycompany.myappname.permission.C2D_MESSAGE" 
            Android:protectionLevel="signature" />
4
The_Martian

Siehe diesen link sagte, dass es funktionieren wird, wenn sie mit demselben Schlüssel signiert sind. Der Freigabeschlüssel und der Debug-Schlüssel stimmen nicht überein.

Also mach es:

buildTypes {
        release {
            minifyEnabled true
            signingConfig signingConfigs.release//signing by the same key
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-Android.txt'

        }
        debug {
            applicationIdSuffix ".debug"
            debuggable true
            signingConfig signingConfigs.release//signing by the same key
        }

    }

 signingConfigs {
        release {
            storeFile file("***\\key_.jks")
            storePassword "key_***"
            keyAlias "key_***"
            keyPassword "key_"***"
        }


}
2
NickUnuchek

ersetzen Sie die folgenden Zeilen:

<permission Android:name="com.myapp.permission.C2D_MESSAGE" Android:protectionLevel="signature" />
<uses-permission Android:name="com.myapp.permission.C2D_MESSAGE" 
Android:protectionLevel="signature" /> 
0
Sỹ Phạm

Ich habe das gleiche Problem mit einem nexus 5 Android Lollipop 5.0.1 festgestellt: 

Installation error: INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.Android.** pkg=com.Android.**

In meinem Fall konnte ich das Problem uninstalling der App nicht beheben, da es ein Android app war. Ich musste jedoch den custom permissions-Namen in manifest ändern, da es sich um eine Android-App handelt, die ich nicht deinstallieren kann . 

Hoffe das hilft jemandem!

0
Ultimo_m

Ich habe die vorherige Version deinstalliert. Es hat für mich funktioniert.

0
Sushil Dhayal

In meinem Fall habe ich eine Drittanbieter-Bibliothek (d. H. Anbieter) verwendet, und die Bibliothek wird mit einer Beispiel-App geliefert, die ich bereits auf meinem Gerät installiert hatte. Bei dieser Beispiel-App gab es jetzt jedes Mal Konflikte, wenn ich versuche, eine eigene App zu installieren, die die Bibliothek implementiert. Also habe ich einfach die Beispiel-App des Herstellers deinstalliert und es funktioniert danach.

0
Nouvel Travay

In meinem Fall erhielt ich folgenden Fehler

Installationsfehler: INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.map.permission.MAPS_RECEIVE pkg = com.abc.Firstapp

Bei dem Versuch, die App zu installieren, die den Paketnamen com.abc.Secondapp hat. Hier war der Punkt, dass die App mit dem Paketnamen com.abc.Firstapp bereits in meiner Anwendung installiert war.

Ich habe diesen Fehler behoben, indem ich die Anwendung mit dem Paketnamen com.abc.Firstapp deinstallierte und dann die Anwendung mit dem Paketnamen com.abc.Secondapp installierte.

Ich hoffe, das hilft jemandem beim Testen.

Früher hieß es, dass sich eine App mit einer anderen Signatur auf dem Gerät befindet. Bei der Installation von IDE wird auch gefragt, ob Sie es deinstallieren möchten.

Aber ich denke, ab Android 5.0 haben sie den Grund für die Deinstallation geändert. Dies ist nicht der Fall, wenn Sie eine App mit derselben Signatur installieren

0
Yasir

Ändern Sie in Ihrer AndroidManifest.xml-Datei die Namen Ihrer speziell deklarierten Berechtigungen, zum Beispiel:

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission Android:name="com.myapp.permission.C2D_MESSAGE" Android:protectionLevel="signature" />
<uses-permission Android:name="com.myapp.permission.C2D_MESSAGE" />    
<!-- END GCM -->

dazu

<!-- Creates a custom permission so only this app can receive its messages. NOTE: APP_PACKAGE.permission.C2D_MESSAGE -->   
<permission Android:name="com.myapprocks.permission.C2D_MESSAGE"  Android:protectionLevel="signature" />
<uses-permission Android:name="com.myapprocks.permission.C2D_MESSAGE" />    
<!-- END GCM -->

com.myapprocks Dieser Teil löst den Konflikt mit Ihrer anderen App.

0
resw67

Ich habe mein Telefon nach der Deinstallation der App neu gestartet und es hat funktioniert

0
Pedro Martins