Émulateur Android: erreur d'installation: INSTALL_FAILED_VERSION_DOWNGRADE

142

J'essaye actuellement de compiler et de tester une petite application Android.

J'utilise Eclipse et j'ai installé le SDK 4.2 (Api Level 17). J'ai mis

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

même si j'ai essayé aussi des valeurs différentes (ie 17/17).

Je n'utilise aucune fonction GoogleAPI, ni des fonctions qui ne sont pas disponibles dans l'API niveau 8. Ou du moins je n'obtiens aucune erreur de compilation ou d'avertissement à cet égard.

Lorsque je compile le projet et l'exécute sur un appareil réel exécutant Android 2.2.1, l'application fonctionne correctement. Cependant, lorsque j'essaie d'exécuter l'application sur un émulateur (appareil virtuel Android) avec Android 4.2, Api Level 17, j'obtiens l'erreur suivante:

[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 est cependant vide. Je n'ai vraiment aucune idée de ce que signifie cette erreur ...

ndbd
la source

Réponses:

353

Cela signifie que vous essayez d'installer une application avec le même packageName qu'une application déjà installée sur l'émulateur, mais celle que vous essayez d'installer a un versionCode inférieur (valeur entière pour votre numéro de version).

Vous avez peut-être installé à partir d'une copie distincte du code où le numéro de version était supérieur à la copie avec laquelle vous travaillez actuellement. Dans les deux cas, soit:

  • désinstaller la copie actuellement installée

  • ou ouvrez Paramètres> Gestionnaire d'applications de votre téléphone pour déterminer le numéro de version de l'application installée et incrémentez votre <manifest android:versionCode pour qu'il soit plus élevé dans le fichier AndroidManifest.

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

Alexandre Lucas
la source
1
Merci! C'était exactement cela - j'ai expérimenté avec l'exemple Softkeyboard d'un ancien SDK, et il semble qu'un exemple Softkeyboard est déjà installé (par défaut?!) Dans les périphériques émulateurs (mais dans une version différente et ultérieure). Après avoir renommé mon application, tout a fonctionné comme prévu ...
ndbd
2
@Alexander: Pouvez-vous mettre à jour cette réponse pour inclure l'indicateur -d?
David Alves
8
Il n'est pas nécessaire de désinstaller l'application. Utilisez les indicateurs: -r -d Ces indicateurs signifient une réinstallation et une rétrogradation.
petrsyn
1
@petrsyn: où mettre ces drapeaux dans Eclipse?
Violet Giraffe
2
@VioletGiraffe il est utilisé en ligne de commande: adb install -r -d Application.apk
petrsyn
61

Vous pouvez également envisager d'ajouter un -dindicateur à l'installation adb. Il devrait ignorer cette erreur.

adb install -r -d abc.apk
gruszczy
la source
8
Non documenté mais semble fonctionner. J'ai dû l'écrire séparément comme -d, le combiner avec -r comme -rd ne fonctionnait pas.
mhsmith
3
Il est maintenant documenté: -d: allow version code downgrade. Encore faut-il se séparer de-r
wisbucky
1
D'après la documentation (2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.
30

Commencez par désinstaller votre application de l'émulateur:

adb -e uninstall your.application.package.name

Essayez ensuite de réinstaller l'application.

user1719362
la source
8
Ou pour un appareil physique connecté,, adb -s DEVICESERIALNUMBER uninstall your.application.package.nameDEVICESERIALNUMBERpeut être trouvé en utilisant adb devices -l.
Joel Purra
Cela semble être une étape inutile si vous souhaitez simplement déboguer une application.
IgorGanapolsky
8

Cela se produisait dans mon projet car j'utilisais une ressource XML pour définir le code de version.

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

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

Ce n'était pas un problème dans les versions précédentes de adb, cependant, à partir de platform-toolsr16, cela n'est plus résolu avec le bon entier. Vous pouvez forcer la réinstallation à l'aide adb -rou éviter complètement le problème en utilisant un littéral dans le manifeste:

android:versionCode="64"
James Wald
la source
C'était le problème pour moi, et je suis d'accord que cela ne résout pas correctement la versionCode, même l'augmenter (ex: 65) n'évite pas le INSTALL_FAILED_VERSION_DOWNGRADE
Stan Kurdziel
5

Cela peut se produire lorsque vous essayez d'installer un APK de débogage / non signé par-dessus un APK de version signé depuis le Play Store.

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]

La solution à cela est de le désinstaller , puis de le réinstaller ou de le réexécuter à partir de l'EDI.

Deanna
la source
Je ne suis pas le contrevenant, mais je suppose que ce n'est pas la seule raison pour laquelle cela peut arriver.
Viccari
3

INSTALL_FAILED_VERSION_DOWNGRADE

Toutes les applications Android ont un nom de package. Le nom du package identifie de manière unique l'application sur l'appareil. Si le même nom de package que l'application qui est déjà installé sur l'appareil, cette erreur s'affiche.

  1. Vous pouvez d'abord désinstaller l'application de votre appareil , puis installer la nouvelle.
  2. Vous pouvez simplement augmenter le nombre de un à chaque fois qu'une nouvelle version est publiée .
IntelliJ Amiya
la source
1
Vous avez raison, le code versionCode doit être augmenté à chaque version. Cependant, pas au moment du développement avant une version. De plus, vous devriez pouvoir installer un apk avec le même code version au-dessus d'un apk déjà installé (sans désinstaller). Mon intuition est que le problème était la ressource référencée versionCode - voir: stackoverflow.com/a/14946938/431296
Stan Kurdziel
3

Dans Marshmallow, j'ai eu cette erreur,

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

À la recherche d'une solution, j'ai cherché et je suis venu ici. J'ai supprimé l'application, mais j'ai toujours ce problème dans la Nexus 6. Plus tard, j'ai trouvé cela dans,

Settings > Apps > [My app name] have to removed for all user. 
Karim
la source
2

Selon le code sdk src de ... \ 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;

si le nouveau package a un code de version plus ancien que le package actuellement installé.

zhijuexu
la source
ne devrait pas arriver avec la même versionCode cependant
Stan Kurdziel
2

J'avais le même problème. J'obtenais une erreur lorsque j'essayais d'exécuter mon appareil Android et non un émulateur .

sudo ionic run android 

Je peux résoudre ce problème en exécutant

adb uninstall com.mypackage.name
Anjum ...
la source
2

vous pouvez essayer ceci: adb install -r -d -f your_Apk_path

baiiu
la source
1

cela m'est arrivé lorsque j'ai importé une application Android Studio dans eclipse.

J'ai compris que le fichier andoridmanifest.xml devait être légèrement modifié lors de l'importation à partir d'un projet de studio Android. J'ai créé un nouveau projet de test et copié les en-têtes pour le faire correspondre. voila, problème résolu.

BrayNShock
la source
1

Cette erreur apparaît dans mon projet Android avec plusieurs types de fichiers gfx. À la fin, aucune modification du fichier manifeste n'a été acceptée.

En raison de mon manque de connaissances sur les appareils Android, j'oublie que mon appareil de test a un deuxième utilisateur. Cet utilisateur a également une version installée de mon application, je dois donc également supprimer l'application pour ce compte d'utilisateur et cela fonctionne.

norca
la source
0

la chose qui n'arrêtait pas de me tuer, c'est que je ne savais pas que cette application était installée pour mon compte invité (même si je l'avais désinstallée pour les autres comptes ..)

J'ai donc cherché l'application dans le gestionnaire d'applications, et j'ai simplement cliqué sur désinstaller pour tous les utilisateurs

entrez la description de l'image ici

abbood
la source
0

Désinstallez simplement l'Apk précédent et installez l'APK mis à jour

Peter
la source
0

Cela peut être un problème avec les dépendances des services Google Play plutôt qu'un problème de version réelle de l'application.

Parfois, ce n'est PAS le cas que:

a) une version existante de l'application est installée, plus récente ou non b) une version existante de l'application est installée sur un autre compte utilisateur sur l'appareil

Le message d'erreur est donc tout simplement faux.

Dans mon cas, j'avais:

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'

Mais quand j'ai essayé

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'

J'ai eu des erreurs liées à androidX, car je n'avais pas encore mis à niveau vers androidX et n'étais pas prêt à le faire. J'ai trouvé que l'utilisation des dernières versions 16.xy fonctionnait et je ne reçois plus le message d'erreur. De plus, je pourrais attendre plus tard quand je serai prêt pour passer à 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.+'
de bon augure99
la source