INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

? AndroidUser99 @ | Original: StackOverFlow

Ich verwende Google -Benachrichtigungen in meiner app, und bis jetzt habe ich diese im Manifest hatte :

<!-- 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 funktionierte perfekt, bis ich mein Nexus 7 auf Android 5.0 aktualisiert. Nun, wenn ich versuche, die app in diesem Gerät mit Eclipse installieren, erhalte ich diese Fehlermeldung:

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

Ich verstehe nicht, was falsch ist ... es funktionierte perfekt, bis Android 5.0 . Ich weiß, dass ich mit C2D_MESSAGE in zwei Zeilen : permission und uses-permission aber ich kopiert, dass Code aus dem ursprünglichen Google GCM Führung, also muss es gut sein.

Top 5 Antwort

1x-code @

Ich hatte das gleiche Problem mit einer benutzerdefinierten Signaturberechtigung für Android -21 und löste es, indem Sie sicherstellen ich tat, eine vollständige Deinstallation .

Dies ist ein Grenzfall, der beim eintritt:

An application defines a custom permission using signature level security You attempt to update the installed app with a version signed with a different key The test device is running Android 21 or newer with support for multiple users Command line example

Hier ist ein Kommandozeilen- Transkript, das Problem und wie es zu lösen demonstriert . An dieser Stelle eine Debug-Version installiert ist, und ich versuche, eine Produktionsversion mit der Veröffentlichung Schlüssel signiert 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 example

Möchten Sie in die entgegengesetzte Richtung ( versuchen, eine Debug-Version von Eclipse installieren, wenn ein Release-Version bereits installiert ist ), bekomme ich den folgenden Dialog:

INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

Wenn Sie nur mit Ja beantworten an dieser Stelle wird die Installation erfolgreich zu sein.

Device example

Wie in einer anderen Antwort erwähnt, können Sie auch auf ein app Info-Seite zu gehen in den Geräteeinstellungen, klicken Sie auf den Überlauf -Menü und wählen Sie " Deinstallieren für alle Benutzer", um diesen Fehler zu vermeiden .

2Preethi Rao @

während er diesen Fehler wird es klar erkennen lassen, den Paketnamen der App, weil von denen die Genehmigung verweigert. Und der Deinstallation wird die Anwendung nicht das Problem zu lösen Um Problem zu lösen wir den folgenden Schritt zu tun

1. Gehen Sie zu Einstellungen 2. Gehen Sie zu 3. Gehen Sie zur heruntergeladenen App Liste 4.you App können die nicht installierte Anwendung in der Liste 5. Klicken Sie auf die Anwendung finden, um mehr Wahl 6.click gehen Deinstallation für alle Benutzer -Optionen

Problem gelöst : D

3Yasir @

Früher pflegte zu sagen, dass eine Anwendung mit unterschiedlichen Signatur auf dem Gerät gefunden. Bei der Installation von IDE wäre es auch fragen wollen Sie es deinstallieren?

Aber ich denke, von Android 5.0 haben sie den Grund für die Deinstallation geändert. Es geschieht nicht, wenn Sie bei der Installation App mit der gleichen Signatur

4Giuseppe @

versuchen, die App mit adb deinstallieren:

adb uninstall com.yourpackage
5TacB0sS @

CommonsWare richtig ist, aber meiner Meinung nach ist dies ein (bug ) schlechter Weg, zu sagen: " Das apk auf dem Gerät installiert ist, mit einem anderen Zertifikat dann die neue Sie zu installieren versuchen, unterzeichnet " .

Dies ist wahrscheinlich ein neuer Bug, da es in der Vergangenheit verwendet, um zu fragen, ob die App vom Gerät durch falsche Zertifikat deinstallieren.

Die Lösung, wie schmerzhaft es auch sein würde, um die App sie manuell deinstallieren .

Auch das, was wir aus Gründen der Teamentwicklung getan haben, haben wir die Debug- Keystore zu unserem Repository und Punkt gradle, es wie im folgenden nutzen :

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

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
    }

    ...
}

Und jetzt beim Durch Geräte zwischen den Teammitgliedern, die wir alle verwenden dieselbe Debug -Zertifikat, so gibt es kein Problem . :)