Есть ли способ игнорировать INSTALL_FAILED_VERSION_DOWNGRADE при установке приложения с помощью Android Debug Bridge?


121

Похоже, что в самой последней версии Android 4.2 возникла эта ошибка при установке, когда кто-то пытается установить APK с более ранней версией. В предыдущих версиях Android можно было установить старые APK просто через adb install -r <link to APK>. В целях отладки мне часто нужно повторно тестировать старые APK; и -rфлаг заменит старую сборку в более старых версиях Android. Есть ли здесь обходной путь, который можно игнорировать [INSTALL_FAILED_VERSION_DOWNGRADE]?


Вы имеете в виду, помимо удаления более новой версии?
CommonsWare

Верный; Я предположил, что -rфлаг справится с этим.
AaronMT

5
Этот вопрос также актуален для случаев, когда у вас (несколько неправильно) неправильно пронумерованы сборки. Например, возможно, ваш v1.0 из коробки разработчика имеет более высокий код версии, чем v2.0 из сервера сборки.
parkerfath

Ответы:


288

Похоже, что в последней версии инструментов adb есть «флаг разрешения понижения», который не отображается в справке adb, но отображается в справке «pm» на устройстве. Так что используйте: adb install -r -d <link to apk>


3
Пробовал, с adb install -rd <apkfile>чем не получилось. Ваш версино (с разделенными опциями) работает нормально. Спасибо!
MarSoft

1
И теперь это, кажется, задокументировано! Только не то, что вам нужно использовать -r -d, -rd не будет работать
plaisthos 08

Например, чтобы удалить (перейти на более раннюю версию) Waze 4.0.0.2 и установить версию 3.9.5.3: adb install -r -d Waze_3.9.5.3.apk . Таким образом вы не потеряете данные приложения.
Дерек Гоголь

12
Начиная с Android 7 (Nougat), adb install -d больше не работает, если пакет не отмечен как отлаживаемый. android.googlesource.com/platform/frameworks/base/+/921dd75
Дарпан,

20

Вы можете попробовать использовать, adb uninstall -k <package>а затем установить более старый apk. Из руководства по использованию adb:

  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)

Я сам пробовал это с помощью своего apk, и, похоже, он работает для большинства данных (некоторые данные, такие как RawContacts, не были сохранены)


Похоже, что эта команда на самом деле не выполняет удаление, а просто выводит предупреждение. Похоже, что команда на самом деле исключить это adb shell pm uninstall -k <package>.
Paul Lammertsma

Это также полезно для перехода на более раннюю версию, если adb -d все еще жалуется, как и у меня.
Pointer Null

14

Включили ли вы несколько учетных записей на своем устройстве (и запустите apk через ADB)? Если это так, вам нужно удалить apk из каждой учетной записи. После полной деинсталляции ваш push будет в порядке.


Восстановление бэкапа через Titanium Backup не получилось. Свежая установка не сработала. Установка через APK и / или adb install не прошла. Это стоило мне 1,5 часа, и ваша простая подсказка помогла. Спасибо!
bentolor

3

В моем случае это была устаревшая версия сервисов Google Play, включенная в мой проект. Я использую Android Studio. Я запустил обновление SDK и импортировал обновленную библиотеку, и эта ошибка исчезла. Итак, мое предложение: обновите библиотеки до последних версий, на которые ссылается ваш проект.


1

Попробуйте удалить ранее установленную версию приложения, используя:

adb uninstall com.package.name

а затем снова установите / запустите приложение


0

Возможно, вы установили из отдельной копии кода, номер версии которого был выше, чем у копии, с которой вы сейчас работаете. В любом случае удалите текущую установленную копию или откройте «Настройки»> «Приложения», чтобы определить номер версии для установленного приложения, и увеличьте свой versionCode, чтобы он был выше в AndroidManifest.


1
Почему это было отклонено? Возможно, это не лучший ответ, но похоже на жизнеспособное (и, возможно, самое простое) решение для тех, кто плохо знаком с этим! Пожалуйста, оставляйте комментарии к таким ответам, поскольку они важны не только для отвечающего, но и для читателей, которые зададут этот вопрос позже. : - |
jedd.ahyoung 08

Конечно, это можно сделать. Это уже очевидно. Вопрос в том, есть ли способ пропустить эту проверку и разрешить переход на более раннюю версию. И ответ - да. Этот ответ в основном говорит «нет».
tasomaniac

0

Я также столкнулся с той же проблемой. Ее можно решить с помощью следующих шагов, которые проще, чем удаление любого apk с устройства -

1) Запустите команду «adb logcat | grep -i version» на терминале

2) Найдите конкретную строку, которая будет показана в конце logcat -

"Downgrade detected: Update version code 5011  is older than current 9109"

3) скопируйте текущую версию (например, 9109) и вставьте ее в AndroidManifest.xml, как показано ниже -

android:versionCode="9109"

Теперь очистите и перестройте приложение, и оно должно работать нормально.


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.+'

-3

Для людей, которые сталкиваются с проблемами с Xiaomi:

adb shell pm uninstall <package_name>

Это ни в чем не помогает, и следует объяснить, почему это нужно делать именно так.
Беньямин Лиманто,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.