C'è un modo per ignorare INSTALL_FAILED_VERSION_DOWNGRADE durante l'installazione dell'applicazione con Android Debug Bridge?


121

Sembra che il più recente Android 4.2 abbia introdotto questa condizione di errore durante l'installazione quando si tenta di installare un APK con una versione inferiore. Nelle versioni precedenti di Android, era possibile installare gli APK precedenti semplicemente tramite adb install -r <link to APK>. Per scopi di debug, ho spesso bisogno di testare nuovamente gli APK più vecchi; e il -rflag sostituirà la build precedente nelle versioni precedenti di Android. C'è una soluzione qui da ignorare [INSTALL_FAILED_VERSION_DOWNGRADE]?


Intendi, oltre a disinstallare la versione più recente?
CommonsWare

Corretta; Ho pensato che la -rbandiera avrebbe gestito questo.
AaronMT

5
Questa domanda è valida anche per i casi in cui sono presenti build (in qualche modo errate) con numeri errati. Ad esempio, forse la tua v1.0 da una scatola di sviluppo ha un codice di versione più alto della v2.0 da un server di compilazione.
parkerfath

Risposte:


288

Sembra che l'ultima versione degli strumenti adb abbia un "flag di autorizzazione al downgrade" che non è mostrato nella guida di adb, ma è mostrato nella guida "pm" sul dispositivo. Quindi usa: adb install -r -d <link to apk>


3
Ho provato con il adb install -rd <apkfile>quale non ha funzionato. Il tuo versino (con le opzioni separate) funziona bene. Grazie!
MarSoft

1
E ora sembra essere documentato! Solo non che devi usare -r -d, -rd non funzionerà
plaisthos

Ad esempio, per disinstallare (downgrade) Waze 4.0.0.2 e installare la versione 3.9.5.3: adb install -r -d Waze_3.9.5.3.apk . In questo modo non perderai i dati dell'app.
Derek Gogol

12
A partire da Android 7 (Nougat), adb install -d non funziona più a meno che il pacchetto non sia contrassegnato come debuggabile. android.googlesource.com/platform/frameworks/base/+/921dd75
Darpan

20

Puoi provare a utilizzare adb uninstall -k <package>e quindi installare l'apk precedente. Dalla guida all'utilizzo di adb:

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

L'ho provato io stesso con il mio apk e sembra funzionare per la maggior parte dei dati (alcuni dati come RawContacts non sono stati salvati)


Sembra che questo comando non esegua effettivamente la disinstallazione, ma restituisca semplicemente un avviso. Il comando per eseguire effettivamente questo sembra essere adb shell pm uninstall -k <package>.
Paul Lammertsma

Questo è utile anche per il downgrade, se adb -d si lamenta ancora come ha fatto per me.
Pointer Null

14

Hai abilitato più account sul tuo dispositivo (e spinto il tuo apk tramite ADB)? In tal caso è necessario rimuovere l'apk in ogni account. Dopo la disinstallazione completa, il tuo push sarà OK.


Il ripristino del backup tramite Titanium Backup non ha funzionato. La nuova installazione non ha funzionato. L'installazione tramite APK e / o adb install non ha funzionato. Questo mi è costato 1,5 ore e il tuo semplice suggerimento ha funzionato. Grazie!
bentolor

3

Nel mio caso era una versione obsoleta di Google Play Services inclusa nel mio progetto. Sto usando Android Studio. Ho eseguito un aggiornamento sull'SDK e ho importato la libreria aggiornata e l'errore è scomparso. Quindi il mio suggerimento: aggiorna alle ultime librerie a cui fa riferimento il tuo progetto.


1

Prova a disinstallare la versione dell'app installata in precedenza utilizzando-

adb uninstall com.package.name

e quindi installa / esegui di nuovo la tua app


0

Potresti aver installato da una copia separata del codice in cui il numero di versione era superiore alla copia con cui stai lavorando in questo momento. In entrambi i casi, disinstalla la copia attualmente installata o apri Impostazioni> App per determinare il numero di versione per l'app installata e incrementa il tuo versionCode in modo che sia più alto nel AndroidManifest.


1
Perché questo è stato downvoted? Potrebbe non essere la risposta migliore, ma sembra una soluzione praticabile (e forse la più semplice) per qualcuno che è nuovo a questo! Si prega di lasciare commenti per risposte come questa, poiché sono essenziali non solo per chi risponde , ma per i lettori che visitano questa domanda in seguito. : - |
jedd.ahyoung

Questo è ovviamente qualcosa che può essere fatto. È già ovvio. La domanda è se esiste un modo per saltare questo controllo e consentire il downgrade. E la risposta è si. Questa risposta fondamentalmente dice no.
tasomaniac

0

Ho anche affrontato lo stesso problema Può essere risolto con i passaggi seguenti che sono più facili rispetto all'eliminazione di qualsiasi apk dal dispositivo:

1) Esegui il comando "adb logcat | grep -i version" sul terminale

2) Cerca la riga particolare, che verrà mostrata alla fine del logcat -

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

3) copia la versione corrente (ad esempio 9109) e incollala in AndroidManifest.xml come mostrato di seguito -

android:versionCode="9109"

Ora pulisci e ricostruisci l'applicazione e dovrebbe funzionare bene.


0

Potrebbe essere un problema con le dipendenze di Google Play Services.

A volte NON è il caso che:

a) è installata una versione esistente dell'app, più recente o meno

b) esiste una versione esistente dell'app installata su un altro account utente sul dispositivo

Quindi il messaggio di errore è solo fasullo.

Nel mio caso, ho avuto:

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'

Ma quando ho provato

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'

Ho ricevuto errori relativi ad androidX, poiché non avevo ancora effettuato l'aggiornamento ad androidX e non ero pronto per farlo. Ho scoperto che l'utilizzo delle ultime versioni 16.xy funziona e non ricevo più il messaggio di errore. Inoltre, potrei aspettare più tardi quando sarò pronto, per eseguire l'upgrade ad 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.+'

-3

Per le persone che affrontano problemi con Xiaomi:

adb shell pm uninstall <package_name>

Questo non aiuta con nulla e dovrebbe essere spiegato perché è necessario farlo in questo modo.
Benyamin Limanto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.