Czy istnieje sposób, aby zignorować INSTALL_FAILED_VERSION_DOWNGRADE podczas instalacji aplikacji za pomocą Android Debug Bridge?


121

Wygląda na to, że najnowszy Android 4.2 wprowadził ten stan błędu podczas instalacji, gdy próbuje się zainstalować pakiet APK z niższą wersją. We wcześniejszych wersjach Androida można było zainstalować starsze pakiety APK po prostu za pośrednictwem adb install -r <link to APK>. Do celów debugowania często muszę ponownie testować starsze pakiety APK; a -rflaga zastąpi starszą kompilację w starszych wersjach Androida. Czy jest jakieś obejście do zignorowania [INSTALL_FAILED_VERSION_DOWNGRADE]?


Masz na myśli, oprócz odinstalowania nowszej wersji?
CommonsWare

Poprawny; Zakładałem, że -rflaga poradzi sobie z tym.
AaronMT

5
To pytanie dotyczy również przypadków, w których masz (nieco niepoprawnie) błędnie numerowane kompilacje. Np. Może twoja wersja 1.0 z dev boxa ma wyższy versionCode niż v2.0 z serwera kompilacji.
parkerfath

Odpowiedzi:


288

Wygląda na to, że najnowsza wersja narzędzi adb ma „flagę zezwalania na obniżenie wersji”, która nie jest wyświetlana w pomocy adb, ale jest wyświetlana w pomocy „pm” na urządzeniu. Więc użyj: adb install -r -d <link to apk>


3
Próbowałem, z adb install -rd <apkfile>którym nie udało się. Twoje versino (z oddzielnymi opcjami) działa dobrze. Dzięki!
MarSoft

1
I wydaje się, że jest to teraz udokumentowane! Tylko nie to, że musisz użyć -r -d, -rd nie zadziała
plaisthos

Na przykład, aby odinstalować (obniżyć) Waze 4.0.0.2 i zainstalować wersję 3.9.5.3: adb install -r -d Waze_3.9.5.3.apk . W ten sposób nie stracisz danych aplikacji.
Derek Gogol

12
Od Androida 7 (Nougat), adb install -d już nie działa, chyba że pakiet jest oznaczony jako debugowalny. android.googlesource.com/platform/frameworks/base/+/921dd75
Darpan

20

Możesz spróbować użyć, adb uninstall -k <package>a następnie zainstalować starszą wersję apk. Z przewodnika użytkowania adb:

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

Wypróbowałem to sam z moim apk i wydaje się, że działa dla większości danych (niektóre dane, takie jak RawContacts, nie zostały zapisane)


Wygląda na to, że to polecenie w rzeczywistości nie powoduje odinstalowania, zamiast tego po prostu wyświetla ostrzeżenie. Wydaje się, że polecenie rzeczywiście to wykonać adb shell pm uninstall -k <package>.
Paul Lammertsma,

Jest to również przydatne przy obniżaniu poziomu, jeśli adb -d nadal narzeka, tak jak w moim przypadku.
Pointer Null

14

Czy włączyłeś wiele kont na swoim urządzeniu (i przekazałeś apk przez ADB)? Jeśli tak, musisz usunąć apk na każdym koncie. Po całkowitym odinstalowaniu Twój push będzie OK.


Przywracanie kopii zapasowej za pomocą Titanium Backup nie działa. Nowa instalacja nie zadziałała. Instalacja za pośrednictwem APK i / lub instalacji adb nie działa. Kosztowało mnie to 1,5 godziny, a Twój prosty napiwek załatwił sprawę. Dzięki!
bentolor

3

W moim przypadku była to nieaktualna wersja Usług Google Play zawartych w moim projekcie. Używam Android Studio. Uruchomiłem aktualizację w SDK i zaimportowałem zaktualizowaną bibliotekę, a błąd zniknął. Tak więc moja sugestia: zaktualizuj do najnowszych bibliotek, do których odwołuje się twój projekt.


1

Spróbuj odinstalować wcześniej zainstalowaną wersję aplikacji, używając-

adb uninstall com.package.name

a następnie ponownie zainstaluj / uruchom aplikację


0

Mogłeś zainstalować z oddzielnej kopii kodu, gdzie numer wersji był wyższy niż kopia, z którą obecnie pracujesz. W obu przypadkach odinstaluj aktualnie zainstalowaną kopię lub otwórz Ustawienia> Aplikacje, aby określić numer wersji zainstalowanej aplikacji i zwiększ swój versionCode, aby był wyższy w pliku AndroidManifest.


1
Dlaczego ten głos został odrzucony? Może to nie jest najlepsza odpowiedź, ale wydaje się, że jest to realne rozwiązanie (i być może najłatwiejsze) dla kogoś, kto jest nowy! Prosimy o pozostawienie komentarzy do odpowiedzi takich jak ta, ponieważ są one niezbędne nie tylko dla osoby odpowiadającej, ale także dla czytelników, którzy odwiedzą to pytanie później. : - |
jedd.ahyoung

To oczywiście można zrobić. To już jest oczywiste. Pytanie brzmi, czy istnieje sposób, aby pominąć tę kontrolę i zezwolić na obniżenie wersji. A odpowiedź brzmi: tak. Ta odpowiedź w zasadzie mówi, że nie.
tasomaniac

0

Miałem również ten sam problem, który można rozwiązać, wykonując poniższe czynności, które są łatwiejsze niż usunięcie dowolnego pliku APK z urządzenia -

1) Uruchom polecenie „adb logcat | grep -i wersja” na terminalu

2) Poszukaj konkretnej linii, która zostanie pokazana na końcu logcat -

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

3) skopiuj aktualną wersję (np. 9109) i wklej ją do pliku AndroidManifest.xml, jak pokazano poniżej -

android:versionCode="9109"

Teraz wyczyść i odbuduj aplikację i powinna działać dobrze.


0

Może to być problem z zależnościami usług Google Play.

Czasami NIE jest tak, że:

a) jest zainstalowana istniejąca wersja aplikacji, nowsza lub nie

b) istnieje już wersja aplikacji zainstalowana na innym koncie użytkownika na urządzeniu

Więc komunikat o błędzie jest po prostu fałszywy.

W moim przypadku miałem:

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'

Ale kiedy próbowałem

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'

Otrzymałem błędy związane z AndroidX, ponieważ nie zaktualizowałem jeszcze systemu do androidX i nie byłem na to gotowy. Zauważyłem, że działają najnowsze wersje 16.xy i nie pojawia się już komunikat o błędzie. Co więcej, mogłem poczekać do później, kiedy będę gotowy, z aktualizacją do 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

Dla osób mających problemy z Xiaomi:

adb shell pm uninstall <package_name>

To w niczym nie pomaga i należy wyjaśnić, dlaczego należy to zrobić w ten sposób.
Benyamin Limanto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.