Как бороться с INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES без удаления?


277

Я пытался переустановить апк

$adb install -r new.apk

И это показывает ошибку:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

Одним из решений является удаление и установка new.apk, который работает нормально.

Но мне интересно, могу ли я пересобрать apk и переустановить без деинсталляции. Например. изменить некоторые настройки в AndroidManifest.xml или не подписывать APK и т. д.

Было бы очень признательно, если бы вы могли рассказать мне все значение слова "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES".


Попробуйте обойти проблему, запустив свой apk на реальном устройстве, у меня это всегда работает
Кайл

Это не работает для меня. ^ @ Mr.Derpinthoughton
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
Я не понимаю, почему этот ответ имеет положительные отзывы. Он четко говорит "БЕЗ УДАЛЕНИЯ"!
Кристиан

Нет флага pm для замены пакета на несовместимый сертификат, верно? Намерение безопасности?
JohnyTex

9

Я получил эту ошибку даже после удаления оригинального APK, который был загадочным. Наконец я понял, что настроил несколько пользователей на своем Nexus 7 для тестирования и что приложение все еще установлено для одного из других пользователей. Как только я удалил его для всех пользователей, ошибка исчезла.


5

Я изменил имя пакета во время кодирования обновления, чтобы можно было отлаживать его на своем устройстве через Eclipse, не удаляя старую версию, которая была установлена. Не возвращая имя пакета, которое я использовал при попытке переустановить, я получил ту же ошибку. При использовании того же имени пакета переустановка прошла успешно.


3

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

Спасибо


Да, ответ лучше и яснее, что ответ от CommonsWare. Спасибо
tres.14159

3

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

Затем я удалил файл apk, присутствующий в /system/app(требуется доступ с правами root), и попытался удалить программу, и она прошла успешно.

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


1

Что бы это ни стоило, я столкнулся с этой проблемой после добавления нового плагина в мой проект Cordova. У меня была Кордова, делающая сборки и установки непосредственно на устройстве через USB.

Я исправил это, удалив приложение с устройства, и при следующем развертывании не было никаких проблем.


1

Если вы столкнулись с неудачным развертыванием на устройстве или эмуляторе Andorid с ошибкой «Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]» в окне вывода, просто удалите существующее приложение на устройстве или эмуляторе и повторите развертывание. В отладочных сборках будет использоваться отладочный сертификат, а в сборках выпуска будет использоваться настроенный сертификат. Эта ошибка просто сообщает вам, что сертификат приложения, установленного на устройстве, отличается от сертификата, который вы пытаетесь установить. В сценариях, не связанных с разработкой (магазин приложений), это может быть индикатором поврежденного или иным образом модифицированного приложения, которое небезопасно для установки на устройстве.


0

Ничто сверху не помогло мне. Проблема для меня заключалась в том, что у меня был неправильный источник в моем пути сборки Java для android-support-v7-appcompat. Когда вы идете в Проект> Путь сборки> Настроить Путь сборки>. На вкладке Источник убедитесь, что у вас есть android-support-v7-appcompat / gen, android-support-v7-appcompat / libs и android-support-v7-appcompat / src и ничего больше. Нажмите OK, и это должно работать.


0

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

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

Решение этого было:

  • Выключите ВМ
  • Смонтируйте образ VDI с помощью vdfuse(чтение / запись)
  • Восстановите Partition1файл изображения с помощьюe2fsck
  • Размонтируйте и перезапустите ВМ

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.