Эмулятор Android: ошибка установки: INSTALL_FAILED_VERSION_DOWNGRADE

145

В настоящее время я пытаюсь скомпилировать и протестировать небольшое приложение для Android.

Я использую Eclipse, и у меня установлен SDK 4.2 (Api Level 17). Я установил

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

хотя я пробовал и разные значения (например, 17/17).

Я не использую никаких функций GoogleAPI и не использую функции, которые недоступны в API Level 8. По крайней мере, я не получаю никаких ошибок компиляции или предупреждений по этому поводу.

Когда я компилирую проект и запускаю его на реальном устройстве под управлением Android 2.2.1, приложение работает нормально. Однако, когда я пытаюсь запустить приложение на эмуляторе (виртуальное устройство Android) с Android 4.2, уровень Api 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 пуст. Я понятия не имею, что вообще означает эта ошибка ...

ndbd
источник

Ответы:

356

Это означает, что вы пытаетесь установить приложение с тем же packageName, что и приложение, которое уже установлено в эмуляторе, но то, которое вы пытаетесь установить, имеет более низкий versionCode (целочисленное значение для номера вашей версии).

Возможно, вы установили из отдельной копии кода, где номер версии был выше, чем у копии, с которой вы сейчас работаете. В любом случае либо:

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

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

  • или https://stackoverflow.com/a/13772620/632951

Александр Лукас
источник
1
Благодарность! Это было именно так - я экспериментировал с примером Softkeyboard из более старого SDK, и кажется, что пример Softkeyboard уже установлен (по умолчанию ?!) в устройствах эмулятора (но в другой, более поздней версии). После переименования моего приложения все
заработало,
2
@Alexander: Можете ли вы обновить этот ответ, добавив флаг -d?
Дэвид Алвес
8
Удаление приложения не требуется. Используйте флаги: -r -d Эти флаги означают переустановку и переход на более раннюю версию.
петрсын
1
@petrsyn: где мне поставить эти флаги в Eclipse?
Violet Giraffe
2
@VioletGiraffe используется в командной строке: adb install -r -d Application.apk
petrsyn
63

Вы также можете рассмотреть возможность добавления -dфлага для установки adb. Эту ошибку следует игнорировать.

adb install -r -d abc.apk
Gruszczy
источник
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

Затем попробуйте снова установить приложение.

user1719362
источник
9
Или для подключенного физического устройства adb -s DEVICESERIALNUMBER uninstall your.application.package.name, где DEVICESERIALNUMBERможно найти с помощью adb devices -l.
Joel Purra
Похоже на ненужный шаг, если вы просто хотите отладить приложение.
Игорь Ганапольский 08
8

Это происходило в моем проекте, потому что я использовал ресурс XML для установки кода версии.

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

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

Это не было проблемой в предыдущих версиях adb, однако, platform-toolsначиная с версии r16, это больше не разрешается в правильное целое число. Вы можете либо принудительно переустановить с помощью, adb -rлибо полностью избежать проблемы, используя литерал в манифесте:

android:versionCode="64"
Джеймс Уолд
источник
Это была проблема для меня, и я согласен с тем, что он не разрешает код версии должным образом, даже его увеличение (например, 65) не позволяет избежать INSTALL_FAILED_VERSION_DOWNGRADE
Стэн Курдзил
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.

Дина
источник
Я не голосующий против, но думаю, что это не единственная причина, по которой такое может произойти.
Viccari
3

INSTALL_FAILED_VERSION_DOWNGRADE

У всех приложений Android есть имя пакета. Имя пакета однозначно идентифицирует приложение на устройстве. Если имя пакета совпадает с именем приложения, которое уже установлено на устройстве, эта ошибка Отображается.

  1. Вы можете сначала удалить приложение со своего устройства, а затем установить новое.
  2. Вы можете просто увеличивать число на единицу каждый раз при выпуске новой версии .
IntelliJ Amiya
источник
1
Вы правы, код версии должен увеличиваться с каждым выпуском. Однако не во время разработки перед выпуском. Кроме того, у вас должна быть возможность установить apk с тем же кодом версии поверх уже установленного apk (без удаления). Я догадываюсь, что проблема заключалась в ссылке на ресурс versionCode - см .: stackoverflow.com/a/14946938/431296
Stan 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
Анджум ....
источник
2

вы можете попробовать это: adb install -r -d -f your_Apk_path

baiiu
источник
1

это случилось со мной, когда я импортировал приложение Android Studio в eclipse.

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

BrayNShock
источник
1

Эта ошибка появляется в моем проекте Android с несколькими типами файлов gfx. В конце концов, никаких изменений в файле манифеста принято не было.

Из-за моего незнания об устройствах Android я забываю, что у моего тестового устройства есть второй пользователь. У этого пользователя также установлена ​​версия моего приложения, поэтому мне также нужно удалить приложение для этой учетной записи, и оно работает.

норка
источник
0

меня продолжало убивать то, что я не знал, что это приложение было установлено для моей гостевой учетной записи (хотя я удалил его для других учетных записей ...)

поэтому я поискал приложение в диспетчере приложений и просто нажал на удаление для всех пользователей

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

Abbood
источник
0

Просто удалите предыдущий Apk и установите обновленный APK.

Питер
источник
0

Это может быть проблема с зависимостями сервисов Google Play, а не проблема с актуальной версией приложения.

Иногда НЕ бывает:

а) установлена ​​существующая версия приложения, более новая или нет; б) существующая версия приложения установлена ​​в другой учетной записи пользователя на устройстве

Так что сообщение об ошибке просто подделка.

В моем случае у меня было:

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.+'
благоприятный99
источник