J'utilise les notifications Google dans mon application, et jusqu'à présent, je l'ai fait ci-dessous dans le manifeste:
<!-- 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 -->
Cela a parfaitement fonctionné jusqu'à ce que je mette à jour mon Nexus 7 vers Android 5.0.
Maintenant, lorsque j'essaye d'installer l'application sur cet appareil avec Eclipse, j'obtiens cette erreur:
INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.myapp.permission.C2D_MESSAGE pkg = com.myapp
Je ne comprends pas ce qui ne va pas? Cela fonctionnait parfaitement jusqu'à Android 5.0.
Je sais que je me sers C2D_MESSAGE
en deux lignes, permission
et uses-permission
mais je l' ai copié ce code du guide Google GCM original, donc il doit être bien.
android
google-cloud-messaging
android-notifications
android-5.0-lollipop
NullPointerException
la source
la source
Réponses:
J'ai trouvé une solution qui fonctionne pour moi.
Dans mon appareil (Nexus 7) Android 5.0. Lollipop Je suis ces étapes.
Après la désinstallation de l'application, vous trouverez
App Name
sous Liste des applications de l'Downloaded
onglet.YourApp
une balise "NON INSTALLÉE"OptionMenu
et sélectionnez "Désinstaller pour tous les utilisateurs"Après ces étapes, j'ai installé avec succès la nouvelle application et elle fonctionne bien.
la source
Retirer
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
Exécutez l'application ... puis ajoutez à nouveau l'autorisation et exécutez l'application.
Prêt!.
la source
${applicationId}
au lieu de le coder enJ'ai eu le même problème avec une autorisation de signature personnalisée sur Android-21 et je l'ai résolu en m'assurant que je faisais une désinstallation complète.
Il s'agit d'un cas extrême qui se produit lorsque:
Exemple de ligne de commande
Voici une transcription en ligne de commande qui montre le problème et comment le résoudre. À ce stade, une version de débogage est installée et j'essaie d'installer une version de production signée avec la clé de publication:
# This fails because the debug version defines the custom permission signed with a different key: [root@localhost 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: [root@localhost 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: [root@localhost 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: [root@localhost 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): [root@localhost svn-android-apps]# /android-sdk-linux/platform-tools/adb uninstall com.example.android.example Success # Release version now successfully installs: [root@localhost 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 [root@localhost svn-android-apps]#
Exemple Eclipse
En allant dans la direction opposée (en essayant d'installer une version de débogage à partir d'Eclipse lorsqu'une version de version est déjà installée), j'obtiens la boîte de dialogue suivante:
Si vous répondez simplement oui à ce stade, l'installation réussira.
Exemple d'appareil
Comme indiqué dans une autre réponse, vous pouvez également accéder à une page d'informations sur l'application dans les paramètres de l'appareil, cliquer sur le menu à développer et sélectionner «Désinstaller pour tous les utilisateurs» pour éviter cette erreur.
la source
J'ai résolu ce problème sans avoir à désinstaller d'abord l'apk alternatif (quelle douleur, non?). Pour installer avec succès à la fois une version de débogage et une version finale d'un apk, utilisez simplement l'espace réservé $ {applicationId} intégré de gradle dans AndroidManifest.xml pour modifier les valeurs android: name des autorisations au moment de la compilation.
L'extrait de fichier build.gradle:
buildTypes { debug { applicationIdSuffix ".debug" ... } }
L'extrait de fichier AndroidStudio.xml:
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
Vous pouvez inspecter le fichier AndroidManifest.xml modifié dans l'apk en utilisant
aapt l -a app-debug.apk
pour vous assurer que l'espace réservé a été correctement appliqué. Si vous utilisez différentes saveurs de produits, je suis sûr que vous pouvez appliquer une variante de cette méthode en fonction de vos besoins.la source
applicationId
en deux différentsproductFlavors
, et que j'utilise${applicationId}
l'effet sera le même.Supprimez toute référence «codée en dur» de votre nom de package de votre fichier manifeste.
(C'est la meilleure pratique même si vous n'utilisez pas
productFlavors
)Par exemple, si votre manifeste contient:
<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"/>
Changé en:
<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"/>
Ensuite, dans votre fichier gradle de module, définissez vos éléments pertinents
applicationId
: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 } }
Vous pouvez suivre ce tutoriel pour plus d'informations
la source
${applicationId}
résolu le problème pour moi!essayez de désinstaller l'application avec adb:
adb uninstall com.yourpackage
la source
Failure [DELETE_FAILED_INTERNAL_ERROR]
. Quelle pourrait en être la raison?Tout en donnant cette erreur, il mentionnera clairement le nom du package de l'application en raison de laquelle l'autorisation a été refusée. Et simplement désinstaller l'application ne résoudra pas le problème. Afin de résoudre le problème, nous devons suivre l'étape suivante:
Problème résolu: D
la source
Installation d'une application sous OS 5.0 je reçois ce message:
Il n'y a pas de packages dupliqués, et nous pouvons résoudre ce problème en désinstallant manuellement l'ancienne application ou en utilisant adb:
adb uninstall com.yourpackage
la source
Aucun de ces éléments n'a fonctionné pour moi. Mon application fonctionnait bien avant Lollipop. Mais quand je l'ai testé sur Lollipop, l'erreur ci-dessus s'est produite. Il a refusé d'installer. Je n'avais aucune version précédente installée, donc toutes les solutions ci-dessus ne sont pas valides dans mon cas. Mais grâce à cette solution SO, il fonctionne maintenant correctement. Tout comme la plupart des développeurs, j'ai suivi le tutoriel trompeur de Google et j'ai ajouté les autorisations par copier-coller comme ceci:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.google.android.permission.C2D_MESSAGE" android:protectionLevel="signature" />
Cela fonctionnerait avec les anciennes versions <Lollipop. Alors maintenant, j'ai changé pour:
<uses-permission android:name="com.mycompany.myappname.c2dm.permission.RECEIVE" /> <permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE" android:protectionLevel="signature" />
la source
CommonsWare a raison, mais à mon avis, c'est une mauvaise façon (de bogue) de dire: "L'apk installé sur l'appareil est signé avec un certificat différent du nouveau que vous essayez d'installer" .
Il s'agit probablement d'un nouveau bogue car dans le passé, il demandait s'il fallait ou non désinstaller l'application de l'appareil en raison d'un certificat incorrect.
La solution aussi pénible que cela puisse être serait de désinstaller l'application manuellement.
Aussi ce que nous avons fait pour le développement de l'équipe, nous avons ajouté le keystore de débogage à notre référentiel, et pointez gradle pour l'utiliser comme ceci:
android { ... signingConfigs { debug { storeFile file("../certificates/debug.keystore") } } ... buildTypes { debug { signingConfig signingConfigs.debug } } ... }
Et maintenant, lors du passage d'appareils entre les membres de l'équipe, nous utilisons tous le même certificat de débogage, il n'y a donc pas de problème. :)
la source
Sous Android 5, vérifiez vos paramètres -> applications. Au lieu de supprimer uniquement pour l'utilisateur actif (car Android 5 peut avoir plusieurs utilisateurs et mon téléphone avait un utilisateur invité), appuyez sur le bouton accessoire dans le coin supérieur droit de la barre d'action / d'outils et choisissez «désinstaller pour tous les utilisateurs». Il semble que dans Android 5, lorsque vous désinstallez simplement du lanceur, vous ne désinstallez l'application que pour l'utilisateur actif.
L'application est toujours sur l'appareil .. Cela m'a ébloui puisque j'essayais d'installer une version commerciale, cela n'a pas fonctionné, alors j'ai pensé que ça devait être parce que j'avais toujours la version de débogage installée, désinstallé l'application. Mais que je ne pouvais toujours pas installer .. Le premier indice était un enregistrement dans la liste des applications de l'application désinstallée avec le message à côté de lui indiquant qu'elle était désinstallée (image).
la source
Voir ce lien, il a dit que cela fonctionnera quand ils sont signés par la même clé. La clé de libération et la clé de débogage ne sont pas les mêmes.
Alors faites-le:
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_"***" } }
la source
remplacer les lignes ci-dessous:
<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
la source
Dans mon cas, j'ai installé plusieurs applications ayant le même nom de domaine dans le nom du package comme suit.
com.mypackage.app1 com.mypackage.app2 com.mypackage.app3 ...
J'ai dû désinstaller toutes les applications ayant des noms de package similaires et les réinstaller à nouveau afin de résoudre le problème.
Pour trouver tous les noms de paquet de l'appareil, j'ai utilisé ce qui suit.
adb shell pm list packages
Ensuite, j'ai attrapé les packages qui correspondent au nom de mon package que je recherche.
dumpsys | grep -A18 "Package \[com.mypackage\]"
Puis désinstallé toutes les applications ayant ce domaine.
uninstall com.mypackage.app1 uninstall com.mypackage.app2 uninstall com.mypackage.app3 ...
Vous pouvez également désinstaller les applications à l'aide du
Settings
application. Aller auSettings -> Apps -> Find the app -> Uninstall
J'espère que cela aide quelqu'un ayant le même problème que moi.
la source
Auparavant, il disait qu'une application avec une signature différente se trouve sur l'appareil. Lors de l'installation à partir de l'IDE, il vous sera également demandé si vous souhaitez le désinstaller?
Mais je pense qu'à partir d'Android 5.0, ils ont changé la raison de la désinstallation. Cela ne se produit pas si vous installez une application avec la même signature
la source
J'ai rencontré le même problème avec un Nexus 5 Android Lollipop 5.0.1:
Installation error: INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.android.** pkg=com.android.**
Et dans mon cas, je ne pouvais pas résoudre ce problème avec
uninstalling
l'application, car c'était uneandroid app
, mais j'ai dû changer lecustom permissions
nom de mon applicationmanifest
car c'était la même chose qu'une application Android, que je ne pouvais pas désinstaller ni modifier.J'espère que cela aide quelqu'un!
la source
Dans mon cas, j'ai reçu l'erreur suivante
Lorsque j'essayais d'installer l'application qui porte le nom du package
com.abc.Secondapp
. Ici, l'application avec le nom du packagecom.abc.Firstapp
était déjà installée dans mon application.J'ai résolu cette erreur en désinstallant l'application avec le nom du package
com.abc.Firstapp
, puis en installant l'application avec le nom du packagecom.abc.Secondapp
J'espère que cela aidera quelqu'un pendant le test.
la source
Dans votre fichier AndroidManifest.xml, modifiez les noms de vos autorisations spécialement déclarées, par exemple:
<!-- 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 -->
pour ça,
<!-- 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 cette partie résout le conflit avec votre autre application.
la source
Dans mon cas, j'utilisais une bibliothèque tierce (c'est-à-dire un fournisseur) et la bibliothèque est livrée avec un exemple d'application que j'avais déjà installé sur mon appareil. Donc, cet exemple d'application était désormais en conflit chaque fois que j'essayais d'installer ma propre application implémentant la bibliothèque. Je viens donc de désinstaller l'exemple d'application du fournisseur et cela fonctionne par la suite.
la source
J'ai désinstallé la version précédente. Cela a fonctionné pour moi.
la source
J'ai redémarré mon téléphone après avoir désinstallé l'application et cela a fonctionné
la source
Si vous avez une autre saveur de l'application, essayez d'abord de la désinstaller. Cela m'a aidé lorsque j'ai eu le même problème.
la source