Android Emulator: Installationsfehler: INSTALL_FAILED_VERSION_DOWNGRADE


142

Ich versuche gerade, eine kleine Android-Anwendung zu kompilieren und zu testen.

Ich verwende Eclipse und habe SDK 4.2 (Api Level 17) installiert. Ich habe gesetzt

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

obwohl ich auch verschiedene Werte ausprobiert habe (dh 17/17).

Ich verwende weder GoogleAPI-Funktionen noch Funktionen, die in API Level 8 nicht verfügbar sind. Oder ich erhalte diesbezüglich keine Kompilierungsfehler oder Warnungen.

Wenn ich das Projekt kompiliere und auf einem realen Gerät mit Android 2.2.1 ausführe, läuft die Anwendung einwandfrei. Wenn ich jedoch versuche, die Anwendung auf einem Emulator (Android Virtual Device) mit Android 4.2, Api Level 17, auszuführen, wird folgende Fehlermeldung angezeigt:

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

Logcat ist jedoch leer. Ich habe wirklich keine Ahnung, was dieser Fehler überhaupt bedeutet ...

Antworten:


353

Dies bedeutet, dass Sie versuchen, eine App mit demselben Paketnamen wie eine App zu installieren, die bereits auf dem Emulator installiert ist. Die App, die Sie installieren möchten, hat jedoch einen niedrigeren versionCode (ganzzahliger Wert für Ihre Versionsnummer).

Möglicherweise haben Sie eine separate Kopie des Codes installiert, bei der die Versionsnummer höher war als die Kopie, mit der Sie gerade arbeiten. In beiden Fällen entweder:

  • Deinstallieren Sie die aktuell installierte Kopie

  • oder öffnen Sie die Einstellungen> Anwendungsmanager Ihres Telefons, um die Versionsnummer für die installierte App zu ermitteln, und <manifest android:versionCode erhöhen Sie Ihre Versionsnummer im AndroidManifest.

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


1
Vielen Dank! Es war genau das - ich habe mit dem Softkeyboard-Beispiel eines älteren SDK experimentiert und es scheint, dass ein Softkeyboard-Beispiel bereits (standardmäßig?!) Auf den Emulatorgeräten installiert ist (aber in einer anderen, späteren Version). Nach dem Umbenennen meiner Anwendung funktionierte alles wie erwartet ...
ndbd

2
@Alexander: Können Sie diese Antwort so aktualisieren, dass sie das Flag -d enthält?
David Alves

8
Es ist nicht erforderlich, um die App zu deinstallieren. Verwenden Sie Flags: -r -d Diese Flags bedeuten Neuinstallation und Downgrade.
Petrsyn

1
@petrsyn: Wo platziere ich diese Flags in Eclipse?
Violette Giraffe

2
@VioletGiraffe wird in der Befehlszeile verwendet: adb install -r -d Application.apk
petrsyn

61

Sie können auch ein -dFlag zur ADB-Installation hinzufügen . Dieser Fehler sollte ignoriert werden.

adb install -r -d abc.apk

8
Undokumentiert, scheint aber zu funktionieren. Ich musste es separat als -d schreiben, es mit -r zu kombinieren, da -rd nicht funktionierte.
Mhsmith

3
Es ist jetzt dokumentiert : -d: allow version code downgrade. -r
Ich muss mich noch

1
Aus Dokumenten (2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.

30

Deinstallieren Sie zuerst Ihre Anwendung vom Emulator:

adb -e uninstall your.application.package.name

Versuchen Sie dann erneut, die Anwendung zu installieren.


8
Oder für ein angeschlossenes physisches Gerät adb -s DEVICESERIALNUMBER uninstall your.application.package.name, wo DEVICESERIALNUMBERmit gefunden werden kann adb devices -l.
Joel Purra

Scheint ein unnötiger Schritt zu sein, wenn Sie nur eine Anwendung debuggen möchten.
IgorGanapolsky

8

Dies geschah in meinem Projekt, weil ich eine XML-Ressource zum Festlegen des Versionscodes verwendete.

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

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

In früheren Versionen von adbwar dies jedoch kein Problem. platform-toolsAb r16 wird dies jedoch nicht mehr in die richtige Ganzzahl aufgelöst. Sie können die Neuinstallation entweder mit erzwingen adb -roder das Problem vollständig vermeiden, indem Sie ein Literal im Manifest verwenden:

android:versionCode="64"

Dies war das Problem für mich, und ich bin damit einverstanden, dass der versionCode nicht richtig aufgelöst wird, selbst wenn er erhöht wird (Beispiel: 65), wird das INSTALL_FAILED_VERSION_DOWNGRADE
Stan Kurdziel

5

Dies kann passieren, wenn versucht wird, ein Debug / nicht signiertes APK über einem signierten Release-APK aus dem Play Store zu installieren.

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]

Die Lösung hierfür besteht darin , es von der IDE zu deinstallieren und anschließend neu zu installieren oder erneut auszuführen.


Ich bin nicht der Downvoter, aber ich denke, dass dies nicht der einzige Grund ist, warum das passieren kann.
Viccari

3

INSTALL_FAILED_VERSION_DOWNGRADE

Alle Android-Apps haben einen Paketnamen. Der Paketname identifiziert die App auf dem Gerät eindeutig. Wenn der gleiche Paketname wie die App bereits auf dem Gerät installiert ist , wird dieser Fehler angezeigt.

  1. Sie können die Anwendung zuerst von Ihrem Gerät deinstallieren und dann die neue installieren.
  2. Sie können die Anzahl einfach jedes Mal um eins erhöhen, wenn eine neue Version veröffentlicht wird .

1
Sie haben Recht, der Versionscode muss bei jeder Version erhöht werden. Allerdings nicht zur Entwicklungszeit vor einer Veröffentlichung. Außerdem sollten Sie in der Lage sein, eine apk mit demselben Versionscode auf einer bereits installierten apk zu installieren (ohne zu deinstallieren). Meine Vermutung ist das Problem, dass die Ressource referenziert versionCode - siehe: stackoverflow.com/a/14946938/431296
Stan Kurdziel

3

In Marshmallow habe ich diesen Fehler bekommen,

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

Auf der Suche nach einer Lösung habe ich gesucht und bin hierher gekommen. Ich habe die App gelöscht, habe aber immer noch dieses Problem in Nexus 6. Später fand ich das in,

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

2

Laut SDK-Quellcode aus ... \ 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;

wenn das neue Paket einen älteren Versionscode als das aktuell installierte Paket hat.


sollte aber nicht mit dem gleichen
versionCode

2

Ich hatte das gleiche Problem. Ich habe eine Fehlermeldung erhalten, als ich versucht habe, auf meinem Android-Gerät keinen Emulator auszuführen .

sudo ionic run android 

Ich kann dies durch Ausführen beheben

adb uninstall com.mypackage.name

2

Sie können dies versuchen: adb install -r -d -f your_Apk_path


1

Dies passierte mir, als ich eine Android Studio App in Eclipse importierte.

Ich habe herausgefunden, dass die Datei andoridmanifest.xml beim Importieren aus einem Android Studio-Projekt leicht geändert werden muss. Ich habe ein neues Testprojekt erstellt und über die Überschriften kopiert, damit es übereinstimmt. voila, Problem gelöst.


1

Dieser Fehler tritt in meinem Android-Projekt mit mehreren Arten von gfx-Dateien auf. Am Ende wurde keine Änderung in der Manifestdatei akzeptiert.

Aufgrund meines mangelnden Wissens über die Android-Geräte vergesse ich, dass mein Testgerät einen zweiten Benutzer hat. Dieser Benutzer hat auch eine installierte Version meiner App, daher muss ich auch die App für dieses Benutzerkonto löschen und es funktioniert.


0

Das, was mich immer wieder umgebracht hat, war, dass ich nicht wusste, dass diese App für mein Gastkonto installiert wurde (obwohl ich sie für die anderen Konten deinstalliert hatte.)

Also suchte ich im App Manager nach der App und klickte einfach auf Deinstallieren für alle Benutzer

Geben Sie hier die Bildbeschreibung ein


0

Deinstallieren Sie einfach die vorherige Apk und installieren Sie die aktualisierte APK


0

Möglicherweise liegt ein Problem mit den Abhängigkeiten von Google Play Services vor und nicht mit einem tatsächlichen Problem mit der App-Version.

Manchmal ist es NICHT der Fall, dass:

a) Es ist eine vorhandene Version der App installiert, neuer oder nicht. b) Es ist eine vorhandene Version der App auf einem anderen Benutzerkonto auf dem Gerät installiert

Die Fehlermeldung ist also nur eine Fälschung.

In meinem Fall hatte ich:

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'

Aber als ich es versuchte

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'

Ich habe androidX-bezogene Fehler erhalten, da ich noch kein Upgrade auf androidX durchgeführt hatte und nicht dazu bereit war. Ich habe festgestellt, dass die Verwendung der neuesten 16.xy-Versionen funktioniert und ich erhalte keine Fehlermeldung mehr. Außerdem könnte ich bis später warten, wenn ich bereit bin, auf AndroidX zu aktualisieren.

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.+'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.