Ich verwende Google-Benachrichtigungen in meiner App und habe dies bisher im Manifest getan:
<!-- 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 mit Eclipse auf diesem Gerät zu installieren, wird folgende Fehlermeldung angezeigt:
INSTALL_FAILED_DUPLICATE_PERMISSION perm = 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 verwende C2D_MESSAGE
in zwei Linien, permission
und , uses-permission
aber ich habe diesen Code aus dem ursprünglichen Google GCM Guide kopiert, so dass es in Ordnung sein muss.
android
google-cloud-messaging
android-notifications
android-5.0-lollipop
NullPointerException
quelle
quelle
Antworten:
Ich habe eine Lösung gefunden, die für mich funktioniert.
In meinem Gerät (Nexus 7) Android 5.0. Lollipop Ich folge diesen Schritten.
Nach der Deinstallation der App finden Sie
App Name
unter Apps-Liste dieDownloaded
Registerkarte.YourApp
ein "NOT INSTALLED" -TagOptionMenu
und wählen Sie "Für alle Benutzer deinstallieren".Nach diesen Schritten installiere ich die neue App erfolgreich und sie läuft gut.
quelle
Entfernen
App ausführen ... Fügen Sie dann die Berechtigung erneut hinzu und führen Sie die App aus.
Bereit!.
quelle
${applicationId}
anstatt sie fest zu codierenIch hatte das gleiche Problem mit einer benutzerdefinierten Signaturberechtigung für Android-21 und löste es, indem ich sicherstellte, dass ich eine vollständige Deinstallation durchführte.
Dies ist ein Randfall, der auftritt, wenn:
Befehlszeilenbeispiel
Hier ist ein Befehlszeilentranskript, das das Problem und seine Lösung demonstriert. Zu diesem Zeitpunkt ist eine Debug-Version installiert, und ich versuche, eine mit dem Release-Schlüssel signierte Produktionsversion zu installieren:
Eclipse-Beispiel
Wenn ich in die entgegengesetzte Richtung gehe (versuche, einen Debug-Build von Eclipse zu installieren, wenn bereits ein Release-Build installiert ist), erhalte ich den folgenden Dialog:
Wenn Sie an dieser Stelle nur mit Ja antworten, ist die Installation erfolgreich.
Gerätebeispiel
Wie in einer anderen Antwort erwähnt, können Sie in den Geräteeinstellungen auch eine App-Infoseite aufrufen, auf das Überlaufmenü klicken und "Für alle Benutzer deinstallieren" auswählen, um diesen Fehler zu vermeiden.
quelle
Ich habe das 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 in gradle integrierten Platzhalter $ {applicationId} in der Datei AndroidManifest.xml, um die Werte für android: name der Berechtigungen beim Kompilieren zu ändern.
Das build.gradle-Datei-Snippet:
Das AndroidStudio.xml-Datei-Snippet:
Sie können die geänderte Datei AndroidManifest.xml in der apk überprüfen,
aapt l -a app-debug.apk
um sicherzustellen, dass der Platzhalter ordnungsgemäß angewendet wurde. Wenn Sie verschiedene Produktaromen verwenden, können Sie sicher eine Variation dieser Methode anwenden, die Ihren Anforderungen entspricht.quelle
applicationId
in zwei verschiedenen definiereproductFlavors
und benutze,${applicationId}
der Effekt der gleiche ist.Entfernen Sie alle "Hard Coded" -Referenzen Ihres Paketnamens aus Ihrer Manifestdatei.
(Dies ist eine bewährte Methode, auch wenn Sie sie nicht verwenden.
productFlavors
)Zum Beispiel, wenn Ihr Manifest Folgendes enthält:
Geändert zu:
Stellen Sie dann in Ihrer Modul-Gradle-Datei Folgendes ein
applicationId
:Sie können diesem Tutorial für weitere Informationen folgen
quelle
${applicationId}
behoben das Problem für mich!Versuchen Sie, die App mit adb zu deinstallieren:
quelle
Failure [DELETE_FAILED_INTERNAL_ERROR]
. Was könnte der Grund sein?Während dieses Fehlers wird der Paketname der App deutlich angegeben, aufgrund dessen die Berechtigung verweigert wurde. Und nur die Deinstallation der Anwendung wird das Problem nicht lösen. Um das Problem zu lösen, müssen wir den folgenden Schritt ausführen:
Problem gelöst: D.
quelle
Beim Installieren einer Anwendung in OS 5.0 wird folgende Meldung angezeigt:
Es gibt keine doppelten Pakete, und wir können dieses Problem lösen, indem wir die alte Anwendung manuell deinstallieren oder die ADB verwenden:
adb uninstall com.yourpackage
quelle
Keines der oben genannten hat bei mir funktioniert. Meine App hat früher als Lollipop einwandfrei funktioniert. Aber als ich es auf Lollipop getestet habe, ist der obige Fehler aufgetreten. Es weigerte sich zu installieren. Ich hatte keine früheren Versionen installiert, daher sind alle oben genannten Lösungen in meinem Fall ungültig. Aber dank dieser SO-Lösung läuft es jetzt einwandfrei. Wie die meisten Entwickler habe ich das irreführende Tutorial von Google befolgt und die Berechtigungen durch Kopieren und Einfügen wie folgt hinzugefügt:
Dies würde mit älteren Versionen <Lollipop funktionieren. Also wechselte ich jetzt zu:
quelle
CommonsWare ist richtig, aber meiner Meinung nach ist dies eine (Bug) schlechte Art und Weise zu sagen: „Die apk auf dem Gerät installiert ist mit einem anderen Zertifikat dann dem neuen signierte Sie versuchen , zu installieren“ .
Dies ist wahrscheinlich ein neuer Fehler, da in der Vergangenheit gefragt wurde, ob die App aufgrund eines falschen Zertifikats vom Gerät deinstalliert werden soll oder nicht.
Die Lösung, so schmerzhaft es auch sein mag, wäre, die App manuell zu deinstallieren.
Auch was wir für die Teamentwicklung getan haben, haben wir den Debug-Keystore zu unserem Repository hinzugefügt und Point Gradle, um ihn wie folgt zu verwenden:
Und jetzt, wenn wir Geräte zwischen Teammitgliedern weitergeben, verwenden wir alle dasselbe Debug-Zertifikat, sodass es kein Problem gibt. :) :)
quelle
Ü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 hatte), tippen Sie auf die Zubehörschaltfläche in der oberen rechten Ecke der Aktions- / Symbolleiste und wählen Sie "Für alle Benutzer deinstallieren". Es scheint, dass Sie in Android 5, wenn Sie nur von Launcher deinstallieren, nur die App für den aktiven Benutzer deinstallieren.
Die App befindet sich immer noch auf dem Gerät. Dies hat mich geblendet, da ich versucht habe, eine Release-Version zu installieren. Es hat nicht funktioniert. Ich dachte, das muss richtig sein, weil ich immer noch die Debug-Version installiert habe und die App deinstalliert habe. Aber als konnte immer noch nicht installiert werden. Erster Hinweis war ein Datensatz in der App-Liste der deinstallierten App mit der Meldung daneben, dass sie deinstalliert wurde (Image).
quelle
Sieh dir das an Link , der besagt, dass es funktionieren wird, wenn sie mit demselben Schlüssel signiert sind. Der Release-Schlüssel und der Debug-Schlüssel sind nicht identisch.
Also mach es:
quelle
Ersetzen Sie die folgenden Zeilen:
quelle
In meinem Fall wurden mehrere Anwendungen mit demselben Domänennamen im Paketnamen wie folgt installiert.
Ich musste alle Apps mit ähnlichen Paketnamen deinstallieren und erneut installieren, um das Problem zu beheben.
Um alle Paketnamen vom Gerät zu finden, habe ich Folgendes verwendet.
Dann habe ich mir die Pakete geholt, die meinem gesuchten Paketnamen entsprechen.
Dann deinstallieren Sie alle Apps mit dieser Domain.
Sie können die Anwendungen auch mit dem deinstallieren
Settings
App . Gehe zumSettings -> Apps -> Find the app -> Uninstall
Hoffe das hilft jemandem, der das gleiche Problem hat wie ich.
quelle
Früher hieß es, dass auf dem Gerät eine App mit einer anderen Signatur gefunden wird. Bei der Installation von IDE wird auch gefragt, ob Sie es deinstallieren möchten.
Aber ich denke, von Android 5.0 haben sie den Grund für die Deinstallation geändert. Es passiert nicht, wenn Sie eine App mit derselben Signatur installieren
quelle
Ich habe das gleiche Problem mit einem Nexus 5 Android Lollipop 5.0.1 festgestellt:
Und in meinem Fall konnte ich dieses Problem
uninstalling
der App nicht beheben, weil es eine warandroid app
, aber ich musste meinen App-custom permissions
Namen in ändernmanifest
da sie mit einer Android-App identisch waren, die ich nicht deinstallieren oder ändern konnte.Hoffe das hilft jemandem!
quelle
In meinem Fall habe ich folgenden Fehler erhalten
Als ich versuchte, die App zu installieren, die den Paketnamen hat
com.abc.Secondapp
. Hier war der Punkt, dass die App mit dem Paketnamencom.abc.Firstapp
bereits in meiner Anwendung installiert war.Ich habe diesen Fehler behoben, indem ich die Anwendung mit dem Paketnamen deinstalliert habe
com.abc.Firstapp
und dann die Anwendung mit dem Paketnamen installiert habecom.abc.Secondapp
Ich hoffe, das hilft jemandem beim Testen.
quelle
Ändern Sie in Ihrer AndroidManifest.xml-Datei die Namen Ihrer speziell deklarierten Berechtigungen, zum Beispiel:
dazu,
com.myapprocks Dieser Teil löst den Konflikt mit Ihrer anderen App.
quelle
In meinem Fall habe ich eine Drittanbieter-Bibliothek (z. B. einen Anbieter) verwendet und die Bibliothek enthält eine Beispiel-App, die ich bereits auf meinem Gerät installiert hatte. Diese Beispiel-App war jetzt jedes Mal in Konflikt, wenn ich versuche, meine eigene App zu installieren, die die Bibliothek implementiert. Also habe ich gerade die Beispiel-App des Anbieters deinstalliert und sie funktioniert danach.
quelle
Ich habe die vorherige Version deinstalliert. Es hat bei mir funktioniert.
quelle
Ich habe mein Telefon nach der Deinstallation der App neu gestartet und es hat funktioniert
quelle
Wenn Sie eine andere Variante der App haben, deinstallieren Sie diese zuerst. Dies hat mir geholfen, als ich das gleiche Problem hatte.
quelle