INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

? AndroidUser99 @ | Original: StackOverFlow
---

Eu estou usando notificações do Google em meu aplicativo, e até agora eu tive isso no manifesto :

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

Funcionou perfeitamente, até que eu atualizei meu Nexus 7 para Android 5.0. Agora quando eu tento instalar o app neste dispositivo com Eclipse, eu recebo este erro :

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

Eu não entendo o que está errado ... ele estava funcionando perfeitamente até Android 5.0. Eu sei que eu estou usando C2D_MESSAGE em duas linhas : permission e uses-permission, mas eu copiei esse código a partir do guia Google GCM original, por isso deve ser bom.

---

Top 5 Responder

1x-code @

Eu tive o mesmo problema com uma permissão personalizada assinatura em Android -21 e resolveu por ter certeza que eu estava fazendo uma desinstalação completa .

Este é um caso extremo que ocorre quando:

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

Aqui está uma transcrição de linha de comando que demonstra o problema e como resolvê-lo. Neste ponto, uma versão de depuração está instalado e eu estou tentando instalar uma versão de produção assinado com a chave release:

# 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]# 
Eclipse example

Indo na direção oposta ( tentando instalar uma compilação de depuração do Eclipse quando uma compilação de lançamento já está instalado ), eu recebo o seguinte diálogo:

INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE

Se você acabou de responder sim a esta altura a instalação será bem sucedida.

Device example

Como apontado em outra resposta, você também pode ir para uma página de informações do aplicativo nas configurações do dispositivo, clique no menu de estouro, e selecione "Desinstalar para todos os usuários " para evitar este erro .

2Preethi Rao @

dando esse erro vai mencionar claramente o nome do pacote do aplicativo por causa de que a permissão negada. E apenas desinstalar o aplicativo não vai resolver o problema, a fim de resolver o problema, podemos fazer o seguinte passo

1.Go configurações 2. Vá para o App 3. Vá para baixado lista app 4.you pode ver a aplicação desinstalado na lista 5. Clique no aplicativo, acesse a opção mais 6.click na desinstalação para todas as opções de usuários

Problema resolvido : D

3Yasir @

Anteriormente, ele costumava dizer que um aplicativo com assinatura diferente é encontrado no dispositivo . Ao instalar a partir IDE também pediria quer desinstalá-lo ?

Mas eu acho que a partir do Android 5.0 que mudaram a razão para a desinstalação. Isso não acontece se você estiver instalando app com a mesma assinatura

4Giuseppe @

tente desinstalar o aplicativo com adb :

adb uninstall com.yourpackage
5TacB0sS @

CommonsWare é certo, mas na minha opinião este é um (bug ) má maneira de dizer : " O apk instalado no dispositivo é assinado com um certificado diferente, em seguida, o novo que você está tentando instalar " .

Este é provavelmente um novo bug já que, no passado, costumava perguntar se deve ou não desinstalar o aplicativo do dispositivo devido a certificado errado.

A solução por mais doloroso que seja seria para desinstalar o app -lo manualmente.

Também o que temos feito em prol do desenvolvimento da equipe, nós adicionamos o armazenamento de chaves de depuração para o nosso repositório, e ponto gradle para usá-lo da seguinte forma:

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

    ...

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }
    }

    ...
}

E agora, ao passar dispositivos entre os membros da equipe, todos nós usamos o mesmo certificado de depuração, de modo que não há nenhum problema . :)