Чи є якийсь спосіб ігнорувати INSTALL_FAILED_VERSION_DOWNGRADE при встановленні програми за допомогою моста налагодження Android?


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

Наприклад, для видалення (поновлення) 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>.
Пол Ламмерцма

Це також корисно для пониження рівня, якщо adb -d все ще скаржиться як на мене.
Покажчик Нуль

14

Ви ввімкнули кілька пристроїв на своєму пристрої (і натисніть apk через ADB)? Якщо так, вам доведеться видалити apk у кожному обліковому записі. Після повного видалення ваш натискання буде в порядку.


Відновлення резервної копії через Titanium Backup не вдалося. Свіжа установка не працювала. Установка через APK та / або adb install не спрацювала. Це коштувало мені в 1,5 години, і ваш простий підказка зробив свою справу. Дякую!
бентолор

3

У моєму випадку це була усталена версія Служб Google Play, включена до мого проекту. Я використовую Android Studio. Я запустив оновлення на SDK та імпортував оновлену бібліотеку, і ця помилка усунулася. Тому моя пропозиція: оновити до останніх бібліотек, на які посилається ваш проект.


1

Спробуйте видалити раніше встановлену версію програми, використовуючи-

adb uninstall com.package.name

а потім знову встановити / запустити додаток


0

Можливо, ви встановили з окремої копії коду, де номер версії був вищим, ніж копія, з якою ви зараз працюєте. У будь-якому випадку видаліть встановлену на даний момент копію або відкрийте Налаштування> Програми, щоб визначити номер версії встановленого додатка, а збільшити свій ВерсіяКод вище на AndroidManifest.


1
Чому це було знято? Це може бути не найкращою відповіддю, але це здається життєздатним рішенням (і, можливо, найпростішим) для того, хто є новим у цьому! Будь ласка, залишайте коментарі для подібних відповідей, оскільки вони є важливими не лише для відповіді, але і для читачів, які пізніше відвідають це питання. : - |
jedd.ahyoung

Це, звичайно, щось, що можна зробити. Це вже очевидно. Питання полягає в тому, чи є спосіб пропустити цю перевірку та дозволити пониження рівня. І відповідь - так. Ця відповідь в основному говорить ні.
Тасоман

0

Я також зіткнувся з тією ж проблемою. Її можна вирішити за допомогою наведених нижче кроків, які простіше, ніж видалення будь-якого apk з пристрою -

1) Запустіть команду "adb logcat | grep -i версія" на терміналі

2) Шукайте конкретний рядок, який буде показаний в кінці логката -

"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>

Це нічим не допомагає, і слід пояснити, чому це потрібно робити так.
Benyamin Limanto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.