Como lidar com INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES sem desinstalar?

277

Eu tentei reinstalar um apk

$adb install -r new.apk

E mostra o erro:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Uma solução é desinstalar e instalar o new.apk, que funciona bem.

Mas estou me perguntando se eu poderia recriar um apk e reinstalar sem a desinstalação. Por exemplo. altere algumas configurações no AndroidManifest.xml ou não assine o APK etc.

Seria muito apreciado se você pudesse me dizer todo o significado de "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES".

Johnny
fonte
Tente ir ao redor o problema executando o seu apk em um dispositivo real, ele sempre funciona para mim
Kyle
Isso não funciona para mim. # @ Mr.Derpinthoughton
Crime_Master_GoGo 8/17/17
Isso também pode ocorrer quando o aplicativo é assinado duas vezes e a atualização é assinada na ordem inversa. Consulte stackoverflow.com/a/13618894/5276890 para obter mais informações sobre isso.
Roy Falk

Respostas:

319

Isso significa que a nova cópia do seu aplicativo (na sua máquina de desenvolvimento) foi assinada com uma chave de assinatura diferente da cópia antiga do seu aplicativo (instalada no dispositivo / emulador). Por exemplo, se este for um dispositivo, você pode ter colocado a cópia antiga de uma máquina de desenvolvimento diferente (por exemplo, a máquina de outro desenvolvedor). Ou, o antigo é assinado com sua chave de produção e o novo é assinado com sua chave de depuração.

CommonsWare
fonte
6
@ viagem: você teria que copiar o keystore da máquina anterior (por exemplo, debug.keystore) para sua nova máquina.
CommonsWare
12
Observe que o debug.keystorearquivo não está no diretório do projeto. Normalmente está no seu ~/.android/diretório. (consulte developer.android.com/guide/publishing/… )
ohhorob 10/02/11
3
Como alguém poderia dar ao pacote de depuração um nome diferente? (por exemplo, desenvolvedor do {PRODUCT_NAME})
sandstrom 22/09
6
@ChristianBongiorno: sincronize suas lojas de chaves de assinatura (por exemplo, debug.keystore). Escolha um para ser seu keystore principal, copie-o para todas as outras máquinas do desenvolvedor, substituindo o keystore existente.
CommonsWare
2
Não se esqueça de reconstruir seu projeto depois de copiar o arquivo também. Mudei os arquivos e reenviei o aplicativo para o dispositivo (mas ele ainda estava usando o antigo debug.keystore). Depois de reconstruir o projeto (usando Build-> Rebuild no Android Studio), as chaves estavam sincronizadas.
Benjamin Kaiser
48

Eu me deparei com isso enquanto testava em um novo Xoom. Eu já havia instalado meu aplicativo no Marketplace. Mais tarde, ao tentar testar uma nova versão do aplicativo, encontrei esse erro.

Corrigi-o removendo o aplicativo que foi instalado via Marketplace (mantenha pressionado e arraste para o lixo). Posteriormente, consegui implantar minha versão de desenvolvimento sem nenhum problema.

George Armhold
fonte
12
Sim, a desinstalação resolverá esse problema de permissão. Fiquei me perguntando se eu poderia resolver isso sem desinstalar
Johnny
Adquiri um telefone novo e tinha esquecido disso. Como faço para marcar este duas vezes :)
Anthony Horne
22

Isso aconteceu comigo quando outro desenvolvedor da equipe criou nosso aplicativo no dispositivo de hardware no qual estava tentando implantar. A desinstalação do aplicativo do hardware corrigiu meu problema.

supermoogle
fonte
16
Ótimo! Trabalhou após o comando adb uninstall <package name>. Obrigado.
Paul
Eu tive um caso mais exclusivo, mas essa resposta levou à solução. Eu tinha um aplicativo instalado através da CLI cordova localmente e também um instalado a partir da compilação PG. Eu tive que desinstalar os dois aplicativos para que o erro desaparecesse.
DemitryT
@Paul Sua excelência - o rei Paulo I, embora não seja o questionador original, seu comando funcionou para mim (e sem dúvida outros, considerando o quão votado é o seu comentário). Posso sugerir que você publique isso como resposta?
barlop
1
@ Barlop: Eu postei uma resposta com o comando apenas para ficar mais visível para os outros que também podem encontrar esse problema. Obrigado.
Paul
3
Não entendo por que essa resposta tem votos positivos. Ele diz claramente "SEM DESINSTALAÇÃO"! -
Christian
20

Este é o comando para desinstalar o aplicativo do dispositivo usando adb:

adb uninstall <package name>
Paulo
fonte
8
A questão é sobre como resolver o problema sem desinstalação.
Janaka Bandara #
2
Não entendo por que essa resposta tem votos positivos. Ele diz claramente "SEM DESINSTALAÇÃO"!
Christian
Não há sinalizador de pm para substituir o pacote por um certificado inconsistente, certo? Intenção de segurança?
9788 JohnyTex
9

Eu recebi esse erro mesmo depois de desinstalar o APK original, que era intrigante. Por fim, percebi que havia configurado vários usuários no meu Nexus 7 para teste e que o aplicativo ainda estava instalado para um dos outros usuários. Depois que eu o desinstalei para todos os usuários, o erro desapareceu.

manchado de tinta
fonte
5

Alterei o nome do pacote ao codificar uma atualização para poder depurá-la no meu dispositivo via Eclipse, sem excluir a versão antiga que foi instalada. Sem reverter o nome do pacote que eu estava usando ao tentar reinstalar, recebi o mesmo erro. Usando o mesmo nome de pacote, a reinstalação foi bem-sucedida.

Edward
fonte
3

Basta excluir a versão antiga do dispositivo e reinstalar a mesma. Como o device.keystore já existe no dispositivo, desinstale a compilação e reinstale o APK.

obrigado

user1330971
fonte
Sim, é melhor e mais clara a resposta que a resposta do CommonsWare. Graças
tres.14159
3

Eu enfrentei outro caso de uso em que recebi o erro semelhante. Quando recebi o erro, entrei em pânico e removi. /data/data/{package.name} Depois disso, tentei, e meu problema ainda estava presente. Então eu tentei desinstalar, falhou.

Em seguida, removi o arquivo apk presente em /system/app(acesso root necessário) e tentei desinstalar e foi bem-sucedido.

Depois disso, tentei reinstalar o apk, ele funcionou.

Arunkumar
fonte
1

Pelo que vale, encontrei esse problema depois de adicionar um novo plug-in ao meu projeto Cordova. Eu estava tendo o Cordova para construir e instalar diretamente no dispositivo via USB.

Corrigi-o desinstalando o aplicativo do dispositivo e, na próxima implantação, não havia problemas.

radicalmatt
fonte
1

Se você encontrar uma falha na implantação de um dispositivo ou emulador Andorid com o erro "Falha [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]" na janela Saída, basta excluir o aplicativo existente no dispositivo ou emulador e reimplementar. As compilações de depuração usarão um certificado de depuração, enquanto as compilações de versão usarão o certificado configurado. Este erro é simplesmente informar que o certificado do aplicativo instalado no dispositivo é diferente daquele que você está tentando instalar. Em cenários de não desenvolvimento (loja de aplicativos), isso pode ser um indicador de um aplicativo corrompido ou modificado que não é seguro para instalar no dispositivo.

Linda Z
fonte
0

Nada de cima funcionou para mim. O problema para mim era que eu tinha uma fonte errada no meu Java Build Path para android-support-v7-appcompat. Quando você vai para Projeto> Caminho da Construção> Configurar Caminho da Construção>. Na guia Origem, verifique se você possui android-support-v7-appcompat / gen, android-support-v7-appcompat / libs e android-support-v7-appcompat / src e nada mais. Clique em OK e deve funcionar.

Código imortal
fonte
0

Eu tive o mesmo erro hoje, mas o problema não era exatamente o mesmo. Estou usando o ADB com o Android instalado no VirtualBox . Tentei instalar versões diferentes do meu aplicativo (assinado / não assinado, modo de depuração / liberação) e obtive dois erros alternativamente: INSTALL_FAILED_UID_CHANGEDe INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Agora, ao olhar /data/data/{package.name}, encontrei um monte de arquivos que ainda estavam lá depois de desinstalar o aplicativo. Tentei rm -rfsem êxito: obtive erros de E / S.

A solução para isso foi:

  • Desligue a VM
  • Monte a imagem VDI com vdfuse(leitura / gravação)
  • Repare o Partition1arquivo de imagem come2fsck
  • Desmonte e reinicie a VM
Jérôme
fonte
0

Eu tive o mesmo problema até perceber que tinha o simulador em execução e o adb estava tentando instalar naquele

Martin Lockett
fonte
0

Como a verificação é baseada no nome do pacote, você pode alterar o nome do pacote no arquivo config.xml ou manifest para outro nome que desejar.

Ao publicar seu aplicativo , não se esqueça de alterar o nome!

Rafael
fonte
0

Eu tive esse problema ao tentar executar tarefas gradle connectedDebugAndoidTest(ou connectedAndroidTest) no Genymotion . Executá-lo no emulador normal resolveu o problema.

Ognyan
fonte
Eu também estava colocando isso na mesma situação (testando com Genymotion). Acontece que houve um conflito com a assinatura do pacote de teste. A remoção do pacote de teste resolveu o problema.
D-C0d3r
0

Acho que seu aplicativo foi instalado por outra conta. (Recurso do modo de várias contas) Você pode desinstalar o aplicativo em Configuração> Aplicativos> "nome do aplicativo"> ​​Desinstalar

Nguyễn Quang Tuấn
fonte