Emulador Android: Erro de instalação: INSTALL_FAILED_VERSION_DOWNGRADE

142

Atualmente, estou tentando compilar e testar um pequeno aplicativo Android.

Estou usando o Eclipse e tenho o SDK 4.2 (Api Nível 17) instalado. Eu configurei

<uses-sdk android:targetSdkVersion="17" android:minSdkVersion="8" />

embora eu tentei também valores diferentes (por exemplo, 17/17).

Não uso nenhuma função do GoogleAPI, nem funções que não estão disponíveis na API Nível 8. Ou, pelo menos, não recebo erros ou avisos de compilação a esse respeito.

Quando eu compilo o projeto e o executo em um dispositivo real executando o Android 2.2.1, o Aplicativo funciona bem. No entanto, quando tento executar o aplicativo em um emulador (Android Virtual Device) com Android 4.2, Api Nível 17, recebo o seguinte erro:

[2012-12-10 21:10:29 - SoftKeyboard] Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
[2012-12-10 21:10:29 - SoftKeyboard] Please check logcat output for more details.
[2012-12-10 21:10:29 - SoftKeyboard] Launch canceled!

O Logcat, no entanto, está vazio. Eu realmente não tenho idéia, o que esse erro significa ...

ndbd
fonte

Respostas:

353

Isso significa que você está tentando instalar um aplicativo com o mesmo packageName que um aplicativo que já está instalado no emulador, mas o que você está tentando instalar possui um versionCode inferior (valor inteiro para o número da sua versão).

Você pode ter instalado a partir de uma cópia separada do código em que o número da versão era superior à cópia com a qual você está trabalhando no momento. Nos dois casos:

  • desinstale a cópia atualmente instalada

  • ou abra Configurações> Gerenciador de aplicativos do telefone para determinar o número da versão do aplicativo instalado e aumente seu número <manifest android:versionCode no AndroidManifest.

  • ou https://stackoverflow.com/a/13772620/632951

Alexander Lucas
fonte
1
Obrigado! Foi exatamente isso - experimentei com o exemplo do Softkeyboard de um SDK mais antigo e parece que um exemplo do Softkeyboard já está instalado (por padrão ?!) nos dispositivos do emulador (mas em uma versão posterior diferente). Depois de renomear meu aplicativo, tudo funcionou conforme o esperado ...
ndbd
2
@ Alexander: Você pode atualizar esta resposta para incluir o sinalizador -d?
David Alves
8
Não é necessário desinstalar o aplicativo. Use sinalizadores: -r -d Esses sinalizadores significam reinstalação e downgrade.
precisa
1
@ petrsyn: onde coloco essas bandeiras no Eclipse?
Violet Giraffe
2
@VioletGiraffe é usado na linha de comando: adb install -r -d Application.apk
petrsyn
61

Você também pode considerar adicionar -dsinalizador à instalação do adb. Ele deve ignorar esse erro.

adb install -r -d abc.apk
gruszczy
fonte
8
Não documentado, mas parece funcionar. Eu tive que escrevê-lo separadamente como -d, combinando-o com -r como -rd não funcionou.
mhsmith
3
Ele está documentado agora: -d: allow version code downgrade. Ainda precisa se separar de-r
wisbucky 16/02
1
Dos documentos (2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.
30

Primeiro desinstale seu aplicativo do emulador:

adb -e uninstall your.application.package.name

Em seguida, tente instalar o aplicativo novamente.

user1719362
fonte
8
Ou para um dispositivo físico conectado,, adb -s DEVICESERIALNUMBER uninstall your.application.package.nameonde DEVICESERIALNUMBERpode ser encontrado usando adb devices -l.
Joel Purra
Parece uma etapa desnecessária se você apenas deseja depurar um aplicativo.
IgorGanapolsky
8

Isso estava acontecendo no meu projeto porque eu estava usando um recurso XML para definir o código da versão.

AndroidManifest.xml:
android:versionCode="@integer/app_version_code"

app.xml:
<integer name="app_version_code">64</integer>

Isso não foi um problema nas versões anteriores adb, no entanto, a partir do platform-toolsr16, isso não está mais sendo resolvido para o número inteiro apropriado. Você pode forçar a reinstalação usando adb -rou evitar o problema completamente usando um literal no manifesto:

android:versionCode="64"
James Wald
fonte
Este foi o problema para mim, e eu concordo que não é resolver o versionCode corretamente, mesmo aumentá-la (ex: 65) não evita a INSTALL_FAILED_VERSION_DOWNGRADE
Stan Kurdziel
5

Isso pode acontecer ao tentar instalar um APK de depuração / não assinado em cima de um APK de versão assinado da Play Store.

H:\>adb install -r "Signed.apk"
2909 KB/s (220439 bytes in 0.074s)
        pkg: /data/local/tmp/Signed.apk
Success

H:\>adb install -r "AppName.apk"
2753 KB/s (219954 bytes in 0.078s)
        pkg: /data/local/tmp/AppName.apk
Failure [INSTALL_FAILED_VERSION_DOWNGRADE]

A solução para isso é desinstalar e reinstalar ou executá-lo novamente a partir do IDE.

Deanna
fonte
Não sou a favor do voto negativo, mas acho que essa não é a única razão pela qual isso pode acontecer.
Viccari 30/07/2015
3

INSTALL_FAILED_VERSION_DOWNGRADE

Todos os aplicativos Android têm um nome de pacote. O nome do pacote identifica exclusivamente o aplicativo no dispositivo. Se o mesmo packageName que o aplicativo já estiver instalado no dispositivo, esse erro será exibido.

  1. Você pode desinstalar o aplicativo do seu dispositivo primeiro e depois instalar o novo.
  2. Você pode simplesmente aumentar o número em um a cada vez que uma nova versão é lançada .
IntelliJ Amiya
fonte
1
Você está correto, o versionCode deve ser aumentado em cada release. No entanto, não no momento do desenvolvimento antes do lançamento. Além disso, você deve conseguir instalar um apk com a mesma versionCode em cima de um apk já instalado (sem desinstalar). Meu palpite é que o problema foi o recurso referenciado versionCode - veja: stackoverflow.com/a/14946938/431296
Stan Kurdziel
3

No Marshmallow, recebi este erro,

Installation error: INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
Please check logcat output for more details.
Launch canceled!

Procurando solução, procurei e vim aqui. Excluí o aplicativo, mas ainda tenho esse problema no Nexus 6. Mais tarde, descobri que em,

Settings > Apps > [My app name] have to removed for all user. 
karim
fonte
2

De acordo com o código sdk src de ... \ android-22 \ android \ content \ pm \ PackageManager.java

/**
 * Installation return code: this is passed to the {@link IPackageInstallObserver} by
 * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
 * the new package has an older version code than the currently installed package.
 * @hide
 */
public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;

se o novo pacote tiver um código de versão mais antigo que o pacote atualmente instalado.

zhijuexu
fonte
não deve acontecer com o mesmo versionCode embora
Stan Kurdziel
2

Eu estava tendo o mesmo problema. Eu estava recebendo erro quando tentei executar no meu dispositivo Android não emulador .

sudo ionic run android 

Eu sou capaz de corrigir isso executando

adb uninstall com.mypackage.name
Anjum ....
fonte
2

você pode tentar isso: adb install -r -d -f your_Apk_path

baiiu
fonte
1

isso aconteceu comigo quando importei um aplicativo Android Studio para o eclipse.

Eu descobri que o arquivo andoridmanifest.xml precisa ser ligeiramente modificado ao importar do projeto android studio. Criei um novo projeto de teste e copiei os títulos para torná-lo compatível. voila, problema resolvido.

BrayNShock
fonte
1

Este erro aparece no meu projeto Android com vários tipos de arquivos gfx. No final, nenhuma alteração no arquivo de manifesto foi aceita.

Devido à minha falta de conhecimento sobre os dispositivos Android, esqueço que meu dispositivo de teste tem um segundo usuário. Este usuário também possui uma versão instalada do meu aplicativo, portanto, também tenho que excluir o aplicativo para esta conta de usuário e ele funciona.

norca
fonte
0

o que continuou me matando foi que eu não sabia que esse aplicativo estava instalado na minha conta de convidado (embora eu o tenha desinstalado para as outras contas ..)

então procurei o aplicativo no gerenciador de aplicativos e simplesmente cliquei em desinstalar para todos os usuários

insira a descrição da imagem aqui

abbood
fonte
0

Basta desinstalar o Apk anterior e instalar o APK atualizado

Peter
fonte
0

Pode ser um problema com as dependências do Google Play Services, e não um problema real da versão do aplicativo.

Às vezes, NÃO é o caso que:

a) existe uma versão existente do aplicativo instalado, mais recente ou não b) existe uma versão existente do aplicativo instalada em outra conta de usuário no dispositivo

Portanto, a mensagem de erro é apenas falsa.

No meu caso, eu tive:

implementation 'com.google.android.gms:play-services-maps:16.0.0'
implementation 'com.google.android.gms:play-services-location:16.0.0'
implementation 'com.google.android.gms:play-services-gcm:16.0.0'

Mas quando eu tentei

implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-gcm:17.0.0'

Eu obtive erros relacionados ao androidX, pois ainda não havia atualizado para o androidX e não estava pronto para isso. Eu descobri que usando as versões 16.xy mais recentes funcionam e não recebo mais a mensagem de erro. Além disso, eu poderia esperar até mais tarde, quando estiver pronto, para atualizar para o AndroidX.

implementation 'com.google.android.gms:play-services-maps:16.+'
implementation 'com.google.android.gms:play-services-location:16.+'
implementation 'com.google.android.gms:play-services-gcm:16.+'
auspicious99
fonte