Як боротися з INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES без видалення?


277

Я спробував перевстановити apk

$adb install -r new.apk

І це показує помилку:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Одне з варіантів - видалити та встановити new.apk, що добре працює.

Але мені цікаво, чи зможу я перевлаштувати apk та перевстановити без видалення. Напр. змінити конфігурацію в AndroidManifest.xml або не підписати APK тощо.

Будемо дуже вдячні, якби ви могли сказати мені все значення "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES".


Спробуйте подолати проблему, запустивши apk на фактичному пристрої, він завжди працює для мене
Kyle

Це не працює для мене. ^ @ Mr.Derpinoughton
Crime_Master_GoGo

Це також може статися, коли додаток підписано двічі та оновлення підписано у зворотному порядку. Дивіться stackoverflow.com/a/13618894/5276890 для отримання додаткової інформації про це.
Рой Фолк

Відповіді:


319

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


6
@atourney: Вам доведеться скопіювати сховище ключів попередньої машини (наприклад, debug.keystore) на нову машину.
CommonsWare

12
Зауважте, що debug.keystoreце не в каталозі вашого проекту. Зазвичай це у вашому ~/.android/каталозі. (див. developer.android.com/guide/publishing/… )
ohhorob

3
Як можна надати пакету налагодження іншу назву? (наприклад, {PRODUCT_NAME} Dev)
пісок

6
@ChristianBongiorno: Синхронізуйте сховища підписів (наприклад, debug.keystore). Виберіть його для вашої майстер-магазину брелоків, скопіюйте його на всі інші машини розробника, замінивши їх наявні сховища ключів.
CommonsWare

2
Не забудьте відновити проект після копіювання файлу. Я перемістив файли і повторно надіслав додаток на пристрій (але він все ще використовував старий debug.keystore). Після того як я відновив проект (використовуючи Build-> Rebuild в Android Studio), клавіші потім синхронізувалися.
Бенджамін Кайзер

48

Я наткнувся на це під час тестування нового Xoom. Я раніше встановив свій додаток із Marketplace. Пізніше під час тестування нової версії програми я зіткнувся з цією помилкою.

Я виправив це, видаливши додаток, встановлений через Marketplace (просто утримуйте та перетягуйте у кошик). Після цього я зміг розгорнути свою розробну версію без жодних проблем.


12
так, видалення вирішить цю проблему з дозволом. Мені було цікаво, чи можу я це вирішити, не видаляючи
Джонні

Знайшов новий телефон і забув про це. Як я відзначаю це двічі :)
Ентоні Хорн

22

Це сталося зі мною, коли інший розробник у команді створив наш додаток на апаратному пристрої, до якого я намагався розгорнути. Видалення програми із апаратного забезпечення вирішило мою проблему.


16
Чудово! Працював після командування adb uninstall <package name>. Дякую.
Павло

У мене був більш унікальний випадок, але ця відповідь вела до вирішення. У мене був локальний додаток, встановлений через CLI-модуль cordova, а також встановлений з PG-збірки. Мені довелося видалити обидва додатки, щоб помилка усунулася.
DemitryT

@Paul Ваша превосходительство - король Павло I, хоча я не оригінальний запитувач, ваша команда працювала на мене (і, без сумніву, інші враховували, наскільки ваш коментар схвальний). Чи можу я запропонувати вам це як відповідь?
барлоп

1
@barlop: Я опублікував відповідь командою, щоб бути більш видимим для інших, які також можуть зіткнутися з цією проблемою. Дякую.
Павло

3
Я не розумію, чому ця відповідь викликає голоси. Він чітко говорить "БЕЗ ДЕНІНСТАЛАЦІЇ"! -
Крістіан

20

Це команда для видалення програми з пристрою за допомогою adb:

adb uninstall <package name>

8
Питання полягає в тому, як вирішити проблему без видалення.
Джанака Бандара

2
Я не розумію, чому ця відповідь викликає голоси. Він чітко говорить "БЕЗ ДЕНІНСТАЛАЦІЇ"!
Крістіан

Немає прапора вечора для заміни пакета на несумісний сертифікат, правда? Намір безпеки?
JohnyTex

9

Я отримав цю помилку навіть після видалення оригінального APK, який був містифікуючим. Нарешті я зрозумів, що на своєму Nexus 7 встановив декількох користувачів для тестування і що додаток все ще встановлено для одного з інших користувачів. Щойно я видалив його для всіх користувачів, помилка пішла.


5

Я змінив ім'я пакета під час кодування оновлення, щоб я міг налагодити його на своєму пристрої через Eclipse, не видаляючи стару версію, яка була встановлена. Не повертаючи ім'я пакету, яке я використовував при спробі перевстановити, я отримав цю саму помилку. Використання однойменної назви пакета перевстановлення було успішним.


3

Просто видаліть стару збірку з пристрою та перевстановіть її. Оскільки device.keystore вже існує в пристрої, тому просто видаліть збірку та перевстановіть APK, що все.

Дякую


Так, краще і чіткіше відповідь, що відповідь від CommonsWare. Дякую
tres.14159

3

Я зіткнувся з іншим випадком використання, коли я отримав подібну помилку. Коли спочатку я отримав помилку, я запанікував і видалив. /data/data/{package.name} Після цього я спробував, і моя проблема все ще була присутня. Потім я спробував видалити, не вдалося.

Потім я видалив файл apk, присутній у /system/app(необхідний кореневий доступ), і спробував видалити, і це було успішно.

Після цього я спробував перевстановити apk, він спрацював.


1

Оскільки це варте, я зіткнувся з цією проблемою після додавання нового плагіна до свого проекту Кордова. У мене були побудовані та встановлені шнури безпосередньо на пристрої через USB.

Я виправив це, видаливши додаток із пристрою, і при наступному розгортанні проблем не було.


1

Якщо у вікні виводу виникла помилка розгортання на пристрої або емуляторі Andorid із помилкою "Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]", просто видаліть наявну програму на пристрої чи емуляторі та повторно розгорніть. Збірки налагодження використовуватимуть сертифікат налагодження, а версії для випуску використовуватимуть ваш налаштований сертифікат. Ця помилка просто повідомляє вам про те, що сертифікат програми, встановленої на пристрої, відрізняється від сертифікату, який ви намагаєтесь встановити. У сценаріях, що не розробляються (магазин додатків), це може бути індикатором пошкодженого чи іншим чином модифікованого додатку, не безпечного для встановлення на пристрої.


0

Ніщо зверху для мене не працювало. Проблема для мене полягала в тому, що в моєму Java Build Path помилкове джерело для android-support-v7-appcompat. Коли ви переходите до Проекту> Шлях збірки> Налаштування контуру збірки>. На вкладці Джерело переконайтеся, що у вас є android-support-v7-appcompat / gen, android-support-v7-appcompat / libs та android-support-v7-appcompat / src та більше нічого. Натисніть кнопку ОК, і це повинно працювати.


0

У мене була та сама помилка сьогодні, але проблема була не зовсім такою ж. Я використовую ADB з Android, встановленим у VirtualBox . Я спробував встановити різні версії свого додатка (підписаний / не підписаний, налагодження / випуск) і отримав дві помилки альтернативно: INSTALL_FAILED_UID_CHANGEDі INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES.

Тепер, переглядаючи /data/data/{package.name}, я виявив купу файлів, які все ще були після видалення програми. Я намагався rm -rfїх успішно: я отримав помилки вводу / виводу.

Рішенням цього було:

  • Вимкніть ВМ
  • Змонтуйте зображення VDI за допомогою vdfuse(читання / запис)
  • Відновіть Partition1файл зображення за допомогоюe2fsck
  • Вигадайте і перезапустіть програму VM

0

У мене була така ж проблема, поки я не зрозумів, що запускається тренажер, і adb намагався встановити це


0

Оскільки верифікація заснована на імені пакета, ви можете змінити ім’я пакета всередині вашого config.xml або маніфесту для іншого потрібного імені.

Опублікувавши додаток , не забудьте змінити ім'я!


0

У мене була ця проблема, намагаючись виконати завдання Gradle connectedDebugAndoidTest(або connectedAndroidTest) на Genymotion . Запуск його на звичайному емуляторі вирішив проблему.


Я також отримував це у тій же ситуації (тестування з Genymotion). Виявляється, це був конфлікт із підписом для тестового пакету. Видалення тестового пакету вирішило проблему.
D-C0d3r

0

Я думаю, ваш додаток встановлено іншим обліковим записом. (Функція декількох режимів облікового запису) Ви можете видалити додаток у розділі Налаштування> Програми> "Ім'я програми"> Видалити

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