INSTALL_FAILED_DUPLICATE_PERMISSION... C2D_MESSAGE
Je suis en utilisant Google notifications dans mon application, et jusqu'à maintenant 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 fonctionné parfaitement jusqu'à ce que j'ai mis à jour mon Nexus 7 sous Android 5.0.
Maintenant, quand j'essaie d'installer l'application dans ce dispositif avec Eclipse, j'obtiens cette erreur:
INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.myapp.la permission.C2D_MESSAGE pkg=com.myapp
Je ne comprends pas ce qui est faux... il fonctionnait parfaitement jusqu'à Android 5.0.
Je sais que je suis en utilisant C2D_MESSAGE
en deux lignes, permission
et uses-permission
mais je l'ai copié le code de l'original de Google GCM guide, donc il doit être fine.
- Ce que vous avez initialement pris pour un obscur bug (enfin, je l'ai fait...) est en fait une nouvelle fonctionnalité de sécurité empêchant les deux applications de déclarer à la même coutume, autorisation qui sont signés avec une signature différente pour être installé sur un appareil
- Avez-vous essayé de désinstaller et de réinstaller l'application?
- avez-vous par hasard où cette fonction de sécurité est documenté?
- désolé, je ne me souviens plus
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution qui fonctionne pour moi.
Dans Mon Appareil (Nexus 7) Android 5.0. Lollipop j'ai suivi ces étapes.
Après la Désinstallation de l'Application, Vous trouverez
App Name
en vertu de la Liste des Applications de laDownloaded
Onglet.YourApp
avec un "NON INSTALLÉ" TagOptionMenu
et Sélectionnez "Désinstaller pour tous les Utilisateurs"Après que j'ai réussi à installer la nouvelle application et ça marche bien.
Supprimer
Run App...
Puis Ajouter la permisson de nouveau et Exécuter l'Application.
Prêt!.
${applicationId}
au lieu de coder en dur elleJ'ai eu le même problème avec une signature personnalisée de l'autorisation sur Android-21 et résolu en faisant en sorte que j'était en train de faire une désinstallation complète.
C'est un cas limite qui se produit lorsque:
Exemple de ligne de commande
Voici une ligne de commande de transcription qui illustre le problème et comment le résoudre. À ce moment, une version de débogage est installé et je suis en train d'installer une version de production signé avec le relâchement de la touche:
Eclipse exemple
Va dans le sens inverse (en essayant d'installer une version debug d'Eclipse quand une version release est déjà installé), j'obtiens le message suivant:
Si vous il suffit de répondre oui à ce stade de l'installation réussir.
Appareil exemple
Comme l'a fait remarquer dans une autre réponse, vous pouvez aussi aller à une page d'info app dans les paramètres de l'appareil, cliquez sur le menu contextuel, et sélectionnez "Désinstaller pour tous les utilisateurs" pour éviter cette erreur.
J'ai résolu ce, sans avoir à recourir à la désinstallation de l'autre apk première (ce qui est une douleur, non?). Pour réussir à installer un debug et release de la version de l'apk, il suffit d'utiliser gradle est intégré dans ${identificateur applicationid} de l'espace réservé au sein de l'AndroidManifest.xml pour modifier les autorisations android:les valeurs de nom au moment de la compilation.
La construction.gradle fichier extrait:
L'AndroidStudio.xml fichier extrait:
Vous pouvez consulter le modifié AndroidManifest.xml fichier au sein de l'apk en utilisant
aapt l -a app-debug.apk
pour s'assurer que l'emplacement réservé a été correctement appliquée. Si vous utilisez différentes saveurs, je suis sûr que vous pouvez appliquer une variante de cette méthode pour répondre à vos besoins.applicationId
dans deux différentsproductFlavors
, et l'utilisation${applicationId}
l'effet sera le même.Supprimer tout "Codés en Dur" référence de votre nom de paquet, à partir de votre fichier manifest.
(C'est la meilleure pratique même si vous n'utilisez pas
productFlavors
)Par exemple, si votre manifeste contient:
Changé:
Puis, dans votre module de gradle fichier, définissez votre
applicationId
:Vous pouvez suivre ce tutoriel pour plus d'info
${applicationId}
résolu le problème pour moi!essayez de désinstaller l'application à la bad:
Tout en donnant à cette erreur, il va clairement mentionner le nom du package de l'application en raison de laquelle l'autorisation a été refusée. Et juste désinstallation de l'application ne permettra pas de résoudre le problème. Afin de résoudre le problème, nous avons besoin de faire l'étape suivante:
Problème résolu 😀
L'installation d'une application en OS 5.0, je reçois ce message:
Theres pas de paquets dupliqués, et nous pouvons résoudre ce problème de désinstallation manuelle de l'ancienne application ou à l'aide de la bad:
adb uninstall com.yourpackage
CommonsWare est juste, mais à mon avis c'est un (bug)mauvaise façon de dire: "L'apk installé sur l'appareil est signé avec un certificat différent alors la nouvelle que vous essayez d'installer".
C'est sans doute un nouveau bug depuis dans le passé, il avait l'habitude de demander de savoir si ou de ne pas désinstaller l'application à partir de l'appareil à cause d'une mauvaise certificat.
La solution, aussi douloureux que cela puisse être serait de désinstaller l'application manuellement.
Aussi ce que nous avons fait pour le bien de l'équipe de développement, nous avons ajouté la débogage du fichier de clés de notre référentiel, et le point de gradle pour l'utiliser comme ceci:
Et maintenant, lors du passage de dispositifs entre les membres de l'équipe, nous utilisons tous la même debug certificat, donc il n'y a pas de problème. 🙂
Dans Android 5, vérifiez vos paramètres -> apps. Au lieu de supprimer juste pour l'utilisateur actif (depuis android 5 peuvent avoir plusieurs utilisateurs et mon téléphone a un utilisateur invité) appuyez sur l'accessoire bouton dans le coin supérieur droit de l'action ou de la barre d'outils et choisissez "désinstaller pour tous les utilisateurs". Il semble que, dans Android 5 lorsque vous venez de désinstaller depuis le launcher vous ne les désinstaller l'application à l'utilisateur actif.
L'application est toujours sur l'appareil.. Ce qui m'avait ébloui depuis que j'ai essayé d'installer une version, n'a pas fonctionné alors j'ai pensé ux de droit doit être parce que j'ai encore la version de débogage installé, désinstallé l'application. Mais que ne pouvais toujours pas à installer le.. Premier indice était un enregistrement dans la liste des applications de l'désinstallé l'app avec le message suivant qu'il a été désinstallé (image).
Aucun des ci-dessus a fonctionné pour moi. Mon appli fonctionnait bien dans les précédents que Lollipop. Mais quand je l'ai testé sur Lollipop l'erreur ci-dessus est venu. Il a refusé de l'installer. Je n'ai pas toute les versions précédentes installé de sorte que toutes les solutions ci-dessus ne sont pas valides dans mon cas. Mais grâce à cette SORTE de solution maintenant, il est en cours d'exécution fine. Tout comme la plupart des développeurs, j'ai suivi Google trompeuse du tutoriel et j'ai ajouté les autorisations par copie et coller comme ceci:
Ce serait de travailler avec des versions plus anciennes < Sucette. Alors maintenant, j'ai changé pour:
Voir ce lien il dit qu'il va travailler lorsqu'ils sont signés par la même clé. La libération de la clé et la clé de débogage ne sont pas les mêmes.
Donc le faire:
Auparavant, il l'habitude de dire qu'une application avec une signature différente est trouvé sur le périphérique. Lors de l'installation de l'IDE il serait également demander voulez-vous désinstaller?
Mais je pense qu'à partir d'Android 5.0 ils ont changé la raison pour la désinstallation. Il ne se produit pas si vous installez l'app avec la même signature
J'ai rencontré le même problème avec un nexus 5 Android Lollipop 5.0.1:
Et dans mon cas je ne pouvais pas résoudre ce problème
uninstalling
l'application, car c'était unandroid app
, mais j'ai dû changer mon applicationcustom permissions
nom dansmanifest
parce qu'ils étaient les mêmes que d'une application android, qui je ne pouvais pas désinstaller ou de faire toute modification.Espère que cela aide quelqu'un!
Dans mon cas, j'ai reçu d'erreur suivant
Quand j'ai essayé d'installer l'application qui ont nom du package
com.abc.Secondapp
. Ici à souligner que l'application avec le nom du packagecom.abc.Firstapp
était déjà installé dans mon application.J'ai résolu cette erreur par la désinstallation de l'application avec le nom du package
com.abc.Firstapp
et puis l'installation de l'application avec le nom du packagecom.abc.Secondapp
J'espère que cela aidera quelqu'un lors des tests.
Dans votre AndroidManifest.xml fichier, changer votre spécialement déclaré autorisations de noms, par exemple:
pour cela,
com.myapprocks cette partie permet de résoudre le conflit avec une autre application.
Dans mon cas, j'ai été en utilisant un tiers de la bibliothèque (c'est à dire d'un fournisseur) et la bibliothèque est livré avec un exemple d'application qui j'ai déjà eu l'installer sur mon appareil. De sorte que l'exemple d'application est maintenant en conflit à chaque fois que j'essaie d'installer mon propre application la mise en œuvre de la bibliothèque. Alors j'ai juste désinstallé le fournisseur de l'application d'exemple et cela fonctionne par la suite.
remplacer les lignes ci-dessous:
J'ai désinstallé la version précédente. Il a travaillé pour moi.
J'ai redémarré mon téléphone après la désinstallation de l'application et il a travaillé