Emulator Androida: Błąd instalacji: INSTALL_FAILED_VERSION_DOWNGRADE

142

Obecnie próbuję skompilować i przetestować małą aplikację na Androida.

Używam Eclipse i mam zainstalowany SDK 4.2 (Api Level 17). Ustawiłem

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

chociaż próbowałem też różnych wartości (np. 17/17).

Nie używam żadnych funkcji GoogleAPI ani nie używam funkcji, które nie są dostępne na poziomie API 8. A przynajmniej nie dostaję żadnych błędów kompilacji ani ostrzeżeń w tym zakresie.

Kiedy kompiluję projekt i uruchamiam go na prawdziwym urządzeniu z systemem Android 2.2.1, aplikacja działa poprawnie. Jednak gdy próbuję uruchomić aplikację na emulatorze (urządzenie wirtualne Android) z systemem Android 4.2, Api Level 17, pojawia się następujący błąd:

[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!

Jednak Logcat jest pusty. Naprawdę nie mam pojęcia, co ten błąd w ogóle oznacza ...

ndbd
źródło

Odpowiedzi:

353

Oznacza to, że próbujesz zainstalować aplikację z tą samą nazwą pakietu, co aplikacja, która jest już zainstalowana w emulatorze, ale ta, którą próbujesz zainstalować, ma niższy versionCode (wartość całkowita dla numeru wersji).

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 w telefonie Ustawienia> Menedżer aplikacji, aby określić numer wersji zainstalowanej aplikacji i zwiększ ją, <manifest android:versionCode aby była wyższa w pliku AndroidManifest.

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

Alexander Lucas
źródło
1
Dzięki! Dokładnie tak - wyceniłem przykład Softkeyboard ze starszego SDK i wygląda na to, że przykład Softkeyboard jest już zainstalowany (domyślnie ?!) w urządzeniach emulatora (ale w innej, późniejszej wersji). Po zmianie nazwy mojej aplikacji wszystko działało zgodnie z oczekiwaniami ...
ndbd
2
@Alexander: Czy możesz zaktualizować tę odpowiedź, aby zawierała flagę -d?
David Alves,
8
Nie trzeba odinstalowywać aplikacji. Użyj flag: -r -d Te flagi oznaczają ponowną instalację i starszą wersję.
petrsyn
1
@petrsyn: gdzie umieścić te flagi w Eclipse?
Violet Giraffe
2
@VioletGiraffe jest używany w wierszu poleceń: adb install -r -d Application.apk
petrsyn
61

Możesz także rozważyć dodanie -dflagi do instalacji adb. Powinien zignorować ten błąd.

adb install -r -d abc.apk
gruszczy
źródło
8
Nieudokumentowane, ale wydaje się działać. Musiałem napisać to osobno jako -d, łączenie go z -r jako -rd nie działało.
mhsmith
3
Jest udokumentowane teraz: -d: allow version code downgrade. Nadal muszę się rozdzielić-r
wisbucky
1
Z dokumentów (2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.
30

Najpierw odinstaluj aplikację z emulatora:

adb -e uninstall your.application.package.name

Następnie spróbuj ponownie zainstalować aplikację.

user1719362
źródło
8
Lub dla podłączonego urządzenia fizycznego adb -s DEVICESERIALNUMBER uninstall your.application.package.name, gdzie DEVICESERIALNUMBERmożna je znaleźć za pomocą adb devices -l.
Joel Purra
Wydaje się, że jest to niepotrzebny krok, jeśli chcesz tylko debugować aplikację.
Igor Ganapolsky
8

Działo się to w moim projekcie, ponieważ korzystałem z zasobu XML, aby ustawić kod wersji.

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

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

Nie stanowiło to problemu we wcześniejszych wersjach programu adb, jednak od platform-toolsr16 nie jest to już tłumaczone na właściwą liczbę całkowitą. Możesz wymusić ponowną instalację za pomocą adb -rlub całkowicie uniknąć problemu, używając literału w manifeście:

android:versionCode="64"
James Wald
źródło
To był problem dla mnie i zgadzam się, że nie rozwiązuje on poprawnie wersji codeCode, nawet zwiększenie go (np: 65) nie pozwala uniknąć INSTALL_FAILED_VERSION_DOWNGRADE
Stan Kurdziel
5

Może się tak zdarzyć, gdy próbujesz zainstalować debugowany / niepodpisany pakiet APK na podstawie podpisanego pakietu APK ze Sklepu Play.

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]

Rozwiązaniem tego problemu jest odinstalowanie, a następnie ponowne zainstalowanie lub ponowne uruchomienie z IDE.

Deanna
źródło
Nie jestem zwolennikiem osłabienia, ale myślę, że to nie jedyny powód, dla którego tak się może stać.
Viccari
3

INSTALL_FAILED_VERSION_DOWNGRADE

Wszystkie aplikacje na Androida mają nazwę pakietu. Nazwa pakietu jednoznacznie identyfikuje aplikację na urządzeniu. Jeśli ta sama nazwa pakietu, co aplikacja, która jest już zainstalowana na urządzeniu, wyświetlany jest ten błąd .

  1. Możesz najpierw odinstalować aplikację ze swojego urządzenia, a następnie zainstalować nową.
  2. Możesz po prostu zwiększyć tę liczbę o jeden za każdym razem, gdy zostanie wydana nowa wersja .
IntelliJ Amiya
źródło
1
Masz rację, kod wersji musi być zwiększany przy każdym wydaniu. Jednak nie w czasie projektowania przed wydaniem. Powinieneś także móc zainstalować apk z tym samym kodem wersji na już zainstalowanym apk (bez odinstalowywania). Moje przeczucie jest takie, że problemem był kod wersji, do którego odwołuje się zasób - patrz: stackoverflow.com/a/14946938/431296
Stan Kurdziel
3

W Marshmallow mam ten błąd,

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

Szukając rozwiązania szukałem i przyjechałem tutaj. Usunąłem aplikację, ale nadal mam ten problem w Nexusie 6. Później okazało się, że w,

Settings > Apps > [My app name] have to removed for all user. 
karim
źródło
2

Zgodnie z kodem sdk src z ... \ 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;

jeśli nowy pakiet ma starszy kod wersji niż aktualnie zainstalowany pakiet.

zhijuexu
źródło
nie powinno się jednak zdarzyć z tą samą wersją Code
Stan Kurdziel
2

Miałem ten sam problem. Pojawiał się błąd, gdy próbowałem uruchomić na moim urządzeniu z Androidem, które nie jest emulatorem .

sudo ionic run android 

Jestem w stanie to naprawić, uruchamiając

adb uninstall com.mypackage.name
Anjum ....
źródło
2

możesz spróbować tego: adb install -r -d -f your_Apk_path

baiiu
źródło
1

zdarzyło mi się to, kiedy zaimportowałem aplikację Android Studio do Eclipse.

Doszedłem do wniosku, że plik andoridmanifest.xml musi zostać nieco zmodyfikowany podczas importowania z projektu Android Studio. Utworzyłem nowy projekt testowy i skopiowałem nagłówki, aby dopasować. voila, problem rozwiązany.

BrayNShock
źródło
1

Ten błąd pojawia się w moim projekcie na Androida z wieloma rodzajami plików GFX. Ostatecznie żadna zmiana w pliku manifestu nie została zaakceptowana.

Z powodu braku wiedzy na temat urządzeń z Androidem zapominam, że moje urządzenie testowe ma drugiego Użytkownika. Ten użytkownik ma również zainstalowaną wersję mojej aplikacji, więc muszę również usunąć aplikację dla tego konta użytkownika i działa.

norca
źródło
0

rzeczą, która mnie zabijała, było to, że nie wiedziałem, że ta aplikacja została zainstalowana na moim koncie gościa (chociaż odinstalowałem ją na innych kontach ...)

więc szukałem aplikacji w menedżerze aplikacji i po prostu kliknąłem odinstalowanie dla wszystkich użytkowników

wprowadź opis obrazu tutaj

abbood
źródło
0

Po prostu odinstaluj poprzedni pakiet APK i zainstaluj zaktualizowany plik APK

Piotr
źródło
0

Może to być problem z zależnościami usług Google Play, a nie z rzeczywistą wersją aplikacji.

Czasami NIE jest tak, że:

a) jest zainstalowana istniejąca wersja aplikacji, nowsza lub nie b) istnieje istniejąca 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. Okazało się, że korzystanie z najnowszych wersji 16.xy działa 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.+'
pomyślny 99
źródło