Existe alguma maneira de ignorar INSTALL_FAILED_VERSION_DOWNGRADE na instalação do aplicativo com a ponte de depuração do Android?

121

Parece que o Android 4.2 mais recente introduziu esta condição de erro na instalação quando se tenta instalar um APK com uma versão inferior. Nas versões anteriores do Android, seria possível instalar APKs antigos simplesmente via adb install -r <link to APK>. Para fins de depuração, frequentemente preciso testar novamente os APK mais antigos; e o -rsinalizador substituiria a versão mais antiga nas versões mais antigas do Android. Existe uma solução aqui para ignorar [INSTALL_FAILED_VERSION_DOWNGRADE]?

AaronMT
fonte
Você quer dizer, além de desinstalar a versão mais recente?
CommonsWare
Corrigir; Eu assumi que a -rbandeira lidaria com isso.
AaronMT 15/11
5
Esta pergunta também é válida para os casos em que você (de forma incorreta) possui números incorretos de compilações. Por exemplo, talvez a sua v1.0 a partir de uma caixa de desenvolvimento tenha um versionCode maior que a v2.0 a partir de um servidor de compilação.
Parkerfath 18/03/2014

Respostas:

288

Parece que a versão mais recente das ferramentas adb tem um "sinalizador de permissão para downgrade" que não é mostrado na ajuda do adb, mas é mostrado na ajuda "pm" no dispositivo. Então use: adb install -r -d <link to apk>

supereee
fonte
3
Tentei com o adb install -rd <apkfile>que não funcionou. Seu versino (com opções separadas) funciona bem. Obrigado!
MarSoft
1
E parece estar documentado agora! Não apenas que você tem que usar -r -d, -rd não vai funcionar
plaisthos
Por exemplo, para desinstalar (fazer o downgrade) o Waze 4.0.0.2 e instalar a versão 3.9.5.3: adb install -r -d Waze_3.9.5.3.apk . Dessa forma, você não perderá os dados do aplicativo.
Derek Gogol
12
Desde o Android 7 (Nougat), a instalação do adb -d não funciona mais, a menos que o pacote esteja marcado como depurável. android.googlesource.com/platform/frameworks/base/+/921dd75
Darpan
20

Você pode tentar usar adb uninstall -k <package>e instalar o apk mais antigo. No guia de uso do adb:

  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)

Eu tentei eu mesmo com meu apk e parece funcionar para a maioria dos dados (alguns dados como RawContacts não foram salvos)

Talihawk
fonte
Parece que esse comando realmente não executa a desinstalação, apenas gera um aviso. O comando para realmente executar isso parece ser adb shell pm uninstall -k <package>.
Paul Lammertsma
Isso também é útil para fazer o downgrade, se o adb -d ainda reclamar como fez por mim.
Ponteiro nulo
14

Você ativou a conta Múltipla no seu dispositivo (e enviou seu apk via ADB)? Nesse caso, você deve remover o apk em todas as contas. Após a desinstalação completa, seu envio estará OK.

OlivierTurpin
fonte
A restauração do backup via Titanium Backup não funcionou. A instalação nova não funcionou. A instalação via APK e / ou instalação adb não funcionou. Isso me custou 1,5h e sua dica simples fez o truque. Obrigado!
bentolor
3

No meu caso, era uma versão antiga do Google Play Services incluída no meu projeto. Estou usando o Android Studio. Fiz uma atualização no SDK, importei a biblioteca atualizada e esse erro foi embora. Então, minha sugestão: atualize para as bibliotecas mais recentes que são referenciadas pelo seu projeto.

IgorGanapolsky
fonte
1

Tente desinstalar a versão do aplicativo instalada anteriormente usando:

adb uninstall com.package.name

e instale / execute seu aplicativo novamente

Krishna
fonte
0

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. Em qualquer um dos casos, desinstale a cópia atualmente instalada ou abra Configurações> Aplicativos para determinar o número da versão do aplicativo instalado e aumente o código da versão para que seja mais alto no AndroidManifest.

Ravindra
fonte
1
Por que isso foi prejudicado? Pode não ser a melhor resposta, mas parece uma solução viável (e talvez a mais fácil) para alguém que é novo nisso! Por favor, deixe comentários de respostas como este, pois eles são essenciais não só para o respondente, mas para os leitores que visitam esta questão mais tarde. : - |
precisa saber é o seguinte
Obviamente, isso é algo que pode ser feito. Já é óbvio. A pergunta está perguntando se existe uma maneira de pular essa verificação e permitir o downgrade. E a resposta é sim. Esta resposta basicamente diz que não.
tasomaniac
0

Eu também enfrentei o mesmo problema. Ele pode ser resolvido com as etapas abaixo, que são mais fáceis do que excluir qualquer apk do dispositivo -

1) Execute o comando "adb logcat | grep -i version" no terminal

2) Procure a linha específica, que será mostrada no final do logcat -

"Downgrade detected: Update version code 5011  is older than current 9109"

3) copie a versão atual (por exemplo, 9109) e cole-a no AndroidManifest.xml, como mostrado abaixo -

android:versionCode="9109"

Agora limpe e reconstrua o aplicativo e ele deve funcionar bem.

Sunita
fonte
0

Pode haver um problema com as dependências do Google Play Services.

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

a) existe uma versão existente do aplicativo instalada, 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 o uso das 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
-3

Para pessoas que enfrentam problemas com a Xiaomi:

adb shell pm uninstall <package_name>
Vaigunth
fonte
Isso não ajuda em nada e deve ser explicado por que ele precisa ser feito dessa maneira.
Benyamin Limanto 21/04