INSTALLER LE MESSAGE DE PERMISSION EN DOUBLE... C2D

j'utilise les notifications Google dans mon application, et jusqu'à présent j'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 -->

ça marchait parfaitement jusqu'à ce que je mette à jour mon Nexus 7 sur 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.autorisation.C2D_MESSAGE pkg=com.myapp

I ne pas comprendre ce qui est mal... il fonctionnait parfaitement jusqu'à Android 5.0.

Je sais que j'utilise C2D_MESSAGE en deux lignes, permission et uses-permission mais j'ai copié ce code à partir du Guide Google GCM original, il doit donc être très bien.

166
demandé sur Mukesh Ram 2014-11-20 18:57:31

19 réponses

j'ai trouvé une solution qui fonctionne pour moi.

Sur 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 la liste des applications de l'onglet Downloaded .

  • Aller à " Paramètres
  • Apps
  • en bas de la liste, vous trouverez YourApp avec une "étiquette non installée
  • ouvert
  • cliquez sur OptionMenu et sélectionnez "Désinstaller pour tous les utilisateurs"

après ce processus, j'installe avec succès la nouvelle application et elle fonctionne bien.

221
répondu Pratik Butani 2015-12-14 09:31:49

Supprimer

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

Exécuter L'Application... Puis ajoutez le permisson à nouveau et lancez App.

prêt!.

130
répondu Delmirio Segura 2015-01-28 04:27:22

j'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.

Ceci est un cas de bord qui se produit lorsque:

  1. une application définit une permission personnalisée en utilisant le niveau de sécurité de la signature
  2. vous tentez de mettre à jour l'application installée avec une version signée avec une clé différente""
  3. le dispositif d'essai fonctionne Android 21 ou plus récent avec prise en charge de plusieurs utilisateurs

exemple de ligne de commande

Voici une transcription en ligne de commande qui montre le problème et la façon de 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 sortie:

# 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 D'éclipse

va dans la direction opposée (en essayant d'installer un debug build de Eclipse quand une version est déjà installée), je reçois le dialogue suivant:

Eclipse reinstall dialog

si vous répondez juste oui à ce point l'installation réussira.

exemple de dispositif

comme indiqué dans une autre réponse, vous pouvez également aller à une page d'information de l'application dans les paramètres de l'appareil, cliquez sur le menu overflow, et sélectionnez" Désinstaller pour tous les utilisateurs " pour prévenir cette erreur.

46
répondu x-code 2014-12-03 21:16:59

j'ai résolu cela sans avoir à recourir à la désinstallation de l'apk alternative d'abord (quelle douleur, non?). Pour installer avec succès une version de débogage et de publication d'une apk, utilisez simplement le ${applicationId} placeholder intégré de gradle dans L'AndroidManifest.xml pour modifier les valeurs de nom d'android au moment de la compilation.

La construire.extrait du fichier gradle:

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

L'AndroidStudio.extrait de fichier xml:

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

vous pouvez inspecter le AndroidManifest modifié.fichier xml dans l'apk en utilisant aapt l -a app-debug.apk pour s'assurer que le paramètre placé a été correctement appliqué. 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.

31
répondu Jackpile 2014-12-31 02:50:04

supprimer toute référence" codée en dur " de votre nom de paquet, de votre fichier de 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 module gradle, définissez votre 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 ceci tutorial pour plus d'info

22
répondu David 2016-05-02 22:59:17

tout en donnant cette erreur, il mentionnera clairement le nom du paquet de l'application en raison de laquelle la permission a été refusée. Et juste désinstaller l'application ne résoudra pas le problème. Pour résoudre le problème nous devons faire l'étape suivante:

  1. Aller à " paramètres
  2. accéder à l'application
  3. Aller à l'application téléchargée liste
  4. , Vous pouvez voir l'application désinstallée dans la liste
  5. cliquez sur l'application, allez à l'option
  6. cliquez sur Désinstaller pour tous les utilisateurs options

Problème résolu :d

17
répondu Preethi Rao 2015-04-17 10:04:03

essayer de désinstaller l'application avec adb:

adb uninstall com.yourpackage
16
répondu Giuseppe 2014-11-26 20:37:37

installer une application dans OS 5.0 je reçois ce message:

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

il n'y a pas de paquets dupliqués, et nous pouvons résoudre ce problème en désinstallant manuellement l'ancienne application ou en utilisant l'adb:

adb uninstall com.yourpackage

8
répondu Jorgesys 2015-01-27 17:18:53

CommonsWare a raison, mais à mon avis c'est une mauvaise façon de dire: " l'apk installé sur le périphérique est signé avec un certificat différent que le nouveau que vous essayez d'installer " .

il s'agit probablement d'un nouveau bogue car dans le passé, il demandait s'il fallait désinstaller ou non l'application à partir du périphérique en raison d'un certificat erroné.

La solution, aussi douloureux 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 débogueur keystore à notre dépôt, et point gradle pour l'utiliser comme ceci:

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

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
    }

    ...
}

et maintenant quand passer des appareils entre les membres de l'équipe, nous utilisons tous le même certificat de débogage, donc il n'y a pas de problème. :)

4
répondu TacB0sS 2014-11-30 12:20:33

dans Android 5, Vérifiez vos paramètres - > applications. Au lieu de supprimer pour juste l'utilisateur actif (depuis 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 l'action/barre d'outils et choisissez "Désinstaller pour tous les utilisateurs". Il semble que dans Android 5 lorsque vous venez de désinstaller à partir de launcher, vous désinstallez seulement l'application pour l'utilisateur actif.

L'application est toujours sur le périphérique.. Cela m'avait ébloui puisque j'étais essayez 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 than n'a pas pu s'installer.. 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).

Uninstalled app still showing up in apps Uninstalled for all users

4
répondu Jordy 2014-12-28 12:13:28

rien de ce qui précède n'a fonctionné pour moi. Mon application fonctionnait bien avant Lollipop. Mais quand je l'ai testé sur Lollipop l'erreur ci-dessus est venu. Il a refusé de l'installer. Je n'avais aucune version précédente installée donc toutes les solutions ci-dessus sont invalides dans mon cas. Mais grâce à cette solution de SO maintenant il fonctionne très bien. Tout comme la plupart des développeurs, J'ai suivi le tutoriel trompeur de Google et j'ai ajouté les permissions de copier et 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 versions plus anciennes < Lollipop. Alors maintenant j'ai changé en:

<uses-permission android:name="com.mycompany.myappname.c2dm.permission.RECEIVE" />
<permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE" 
            android:protectionLevel="signature" />
3
répondu The_Martian 2017-05-23 12:18:15

de cette lien il dit qu'il va travailler lorsqu'ils sont signés par la même clé. La clé release et la clé debug ne sont pas identiques.

Afin de le faire:

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
répondu NickUnuchek 2015-10-20 15:27:06

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 à partir D'IDE, il serait également demander si vous voulez désinstaller?

mais je pense que de Android 5.0 ils ont changé la raison de désinstallation. Cela n'arrive pas si vous installez app avec la même signature

0
répondu Yasir 2014-11-25 02:22:29

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 uninstalling l'application parce que c'était un android app , mais j'ai dû changer mon application custom permissions nom dans manifest parce qu'ils étaient les mêmes qu'une application android, que je ne pouvais pas désinstaller ou faire n'importe quel changement.

Espérons que cela aide quelqu'un!

0
répondu Ultimo_m 2014-12-23 13:47:24

dans mon cas, j'ai reçu suite à une erreur

erreur D'Installation: INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.cartographie.autorisation.MAPS_RECEIVE pkg=com.ABC.Firstapp

quand j'essayais d'installer l'application qui avait le nom de paquet com.abc.Secondapp . Ici le point était que l'application avec le nom de paquet com.abc.Firstapp était déjà installée dans mon application.

j'ai résolu cette erreur en désinstallant le application avec le nom du paquet com.abc.Firstapp et ensuite installer l'application avec le nom du paquet com.abc.Secondapp

j'espère que cela aidera quelqu'un tout en testant.

0
répondu Abhinav Singh Maurya 2015-10-06 11:03:30

dans votre AndroidManifest.fichier xml, changer les noms de permissions spécialement déclarés, 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 -->

à ceci,

<!-- 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.

0
répondu resw67 2016-04-16 09:04:04

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 maintenant en conflit chaque fois que j'essaie d'installer ma propre application implémentant la bibliothèque. Donc je viens de désinstaller l'application de l'échantillon du vendeur et cela fonctionne après.

0
répondu Nouvel Travay 2016-05-23 20:58:07

remplacer les lignes suivantes:

<permission android:name="com.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.myapp.permission.C2D_MESSAGE" 
android:protectionLevel="signature" /> 
0
répondu Sỹ Phạm 2016-09-09 04:49:09

j'ai désinstallé la version précédente. Il a travaillé pour moi.

0
répondu Sushil Dhayal 2018-10-05 02:47:43