Емулятор Android: Помилка встановлення: INSTALL_FAILED_VERSION_DOWNGRADE


142

На даний момент я намагаюся скласти і протестувати невеликий додаток для Android.

Я використовую Eclipse і маю встановлений SDK 4.2 (Api Level 17). Я встановив

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

хоча я спробував і різні значення (тобто 17/17).

Я не використовую жодних функцій GoogleAPI, а також не використовую функції, які недоступні в API рівня 8. Або принаймні я не отримую жодних помилок компіляції чи попереджень з цього приводу.

Коли я складаю проект і запускаю його на реальному пристрої під керуванням Android 2.2.1, додаток працює нормально. Однак, коли я намагаюся запустити додаток на емуляторі (віртуальний пристрій Android) з Android 4.2, Api Level 17, я отримую таку помилку:

[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 порожній. У мене справді немає поняття, що ця помилка навіть означає ...

Відповіді:


353

Це означає, що ви намагаєтесь встановити додаток з тим же ім'ям пакета, що і додаток, який уже встановлено на емуляторі, але той, який ви намагаєтесь встановити, має нижчу версію коду (ціле значення для номера версії).

Можливо, ви встановили з окремої копії коду, де номер версії був вищим, ніж копія, з якою ви зараз працюєте. В будь-якому випадку або:

  • видаліть наразі встановлену копію

  • або відкрийте Налаштування телефону> Менеджер програм, щоб визначити номер версії встановленого додатка та збільшити його <manifest android:versionCode на AndroidManifest.

  • або https://stackoverflow.com/a/13772620/632951


1
Дякую! Це було саме так - я висловив приклад прикладу Softkeyboard від старого SDK, і, здається, приклад Softkeyboard уже встановлений (за замовчуванням ?!) на пристроях емулятора (але в іншій, більш пізній версії). Після перейменування моєї заявки все працювало так, як очікувалося ...
ndbd

2
@Alexander: Чи можете ви оновити цю відповідь, щоб включити прапор -d?
Девід Алвес

8
Не потрібно видаляти додаток. Використовуйте прапори: -r -d Ці прапори означають перевстановлення та поновлення версії.
петрсин

1
@petrsyn: куди я поставити ці прапори у Eclipse?
Фіолетова жирафа

2
@VioletGiraffe використовується в командному рядку: adb install -r -d Application.apk
petrsyn

61

Ви також можете розглянути можливість додавання -dпрапора до встановлення adb. Слід ігнорувати цю помилку.

adb install -r -d abc.apk

8
Незадокументований, але, здається, працює. Мені довелося писати його окремо як -d, поєднуючи його з -r як -rd не вийшло.
mhsmith

3
Це задокументовано в даний час: -d: allow version code downgrade. Ще потрібно відокремитись від-r
wisbucky

1
Із док. (2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.

30

Спочатку видаліть програму з емулятора:

adb -e uninstall your.application.package.name

Потім спробуйте встановити програму ще раз.


8
Або для підключеного фізичного пристрою adb -s DEVICESERIALNUMBER uninstall your.application.package.name, де DEVICESERIALNUMBERйого можна знайти adb devices -l.
Джоел Пурра

Здається, це зайвий крок, якщо ви просто хочете налагодити додаток.
ІгорГанапольський

8

Це відбувалося в моєму проекті, оскільки я використовував ресурс XML для встановлення коду версії.

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

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

Це не було проблемою в попередніх версіях adb, однак, з platform-toolsr16 це більше не вирішується до належного цілого числа. Ви можете або змусити перевстановити, використовуючи adb -rабо повністю уникнути проблеми, використовуючи буквал у маніфесті:

android:versionCode="64"

Це було проблемою для мене, і я погоджуюся, що неправильне вирішення
версії коду

5

Це може статися при спробі встановити налагоджувальну / непідписану APK поверх підписаного APK випуску з магазину 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]

Рішення цього полягає в тому, щоб видалити, а потім перевстановити або повторно запустити його з IDE.


Я не прихильник, але я думаю, що це не єдина причина, чому це може статися.
Вікарі

3

INSTALL_FAILED_VERSION_DOWNGRADE

Усі програми Android мають назву пакета. Назва пакету однозначно ідентифікує додаток на пристрої. Якщо такий же nameName, як додаток, який уже встановлений на пристрої, відображається ця помилка .

  1. Ви можете спочатку видалити програму зі свого пристрою, а потім встановити свіжу.
  2. Ви можете просто збільшити число на один раз, коли виходить нова версія .

1
Ви правильні. Версію коду потрібно збільшувати під час кожного випуску. Однак, не на час розробки до виходу. Крім того, ви повинні мати змогу встановити apk з тією ж версієюCode поверх вже встановленої apk (без видалення). Моя здогадка є проблема ресурс посилання VersionCode - см: stackoverflow.com/a/14946938/431296
Стен Kurdziel

3

У Marshmallow я отримав цю помилку,

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

Шукаю рішення, я шукав і прийшов сюди. Я видалив додаток, але все ще має цю проблему в Nexus 6. Пізніше виявив, що в

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

2

За кодом sdk src від ... \ 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;

якщо новий пакет має старіший код версії, ніж встановлений на даний момент пакет.


не повинно відбуватися з тією ж версієюКод, проте
Сен Курдзіел

2

У мене була така ж проблема. Я отримував помилку, коли я намагався запустити на своєму пристрої Android не емулятор .

sudo ionic run android 

Я можу це виправити, запустивши

adb uninstall com.mypackage.name


1

це сталося зі мною, коли я імпортував додаток Android Studio у затемнення.

Я зрозумів, що файл andoridmanifest.xml потрібно трохи змінити під час імпорту з проекту Android Studio. Я створив новий тестовий проект і скопіював над заголовками, щоб він збігався. вуаля, питання вирішено.


1

Ця помилка з’являється в моєму проекті Android з кількома видами файлів gfx. Наприкінці жодної зміни у файлі маніфесту не було прийнято.

Через те, що я не знаю про пристрої Android, я забуваю, що мій тестовий пристрій має другого користувача. Цей Користувач також має встановлену версію мого додатка, тому я також повинен видалити додаток для цього облікового запису користувача, і він працює.


0

річ, яка продовжувала вбивати мене, - це те, що я не знав, що ця програма встановлена ​​для мого гостьового акаунта (хоча я видалив її для інших облікових записів ..)

тому я шукав додаток у менеджері додатків і просто натискав на видалення для всіх користувачів

введіть тут опис зображення


0

Просто видаліть попередній Apk та встановіть оновлений APK


0

Це може бути проблема із залежностями Служб Google Play, а не проблема з актуальною версією додатка.

Іноді це НЕ так:

а) встановлена ​​наявна версія додатка, новіша чи ні b) є наявна версія додатка, встановлена ​​на іншому обліковому записі користувача на пристрої

Тож повідомлення про помилку - просто хибне.

У моєму випадку у мене було:

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'

Але коли я спробував

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'

У мене виникли помилки, пов'язані з androidX, оскільки я ще не перейшов на androidX і не був готовий до цього. Я виявив, що використання останніх 16.xy версій працює, і більше не отримую повідомлення про помилку. Крім того, я міг почекати пізніше, коли буду готовий, щоб оновити до 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.+'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.