Что такое ошибка INSTALL_PARSE_FAILED_NO_CERTIFICATES?

Я пытался изменить свою активность по умолчанию / main / startup (как бы вы это ни называли), отредактировав файл androidmanifest.xml. Все, что я сделал, это изменил свойство android:name. однако это полностью сломало все приложение. когда я пытаюсь установить, он терпит неудачу и читает.

Ошибка установки: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Когда я попытался вернуть его в предыдущее состояние, он все еще выдавал ту же ошибку ... Что я сделал?


person mtmurdock    schedule 26.05.2010    source источник


Ответы (33)


Вы редактировали AndroidManifest.xml прямо в .apk файле? Если так, это не сработает.

Каждый Android .apk должен быть подписан, если он будет установлен на телефон , даже если вы устанавливаете не через Маркет. Инструменты разработки обходят это путем подписания сертификатом разработки, но .apk все еще подписан.

Одно из его применений - это то, что устройство может определить, является ли .apk допустимым обновлением для установленного приложения, поскольку в этом случае сертификаты будут такими же.

Поэтому, если вы вообще внесете какие-либо изменения в свое приложение, вам нужно будет перестроить .apk, чтобы он был правильно подписан.

person Dave Webb    schedule 26.05.2010
comment
Большое спасибо, есть ли кнопка для автоматического восстановления манифеста? - person mtmurdock; 26.05.2010
comment
Для парней, которые борются с трепетанием, запустите flutter clean и снова запустите / отладьте! Эта операция аналогична описанному выше решению, поскольку она очищает папку сборки и заново создает файл сборки при запуске / отладке! - person Manoj Kumar; 11.06.2020
comment
Я только что сделал "Make Project" и попробовал после него. у меня это сработало. - person Jagdish Chopde; 27.11.2020

Я обнаружил, что эта ошибка теперь также может возникать при использовании неправильной конфигурации подписи. Как описано здесь, Android 7.0 представляет новую схему подписи, V2 < / em>. Схема V2 подписывает весь APK, а не только JAR, как это сделано в схеме V1. Если вы подпишетесь только с V2 и попытаетесь установить на целевой объект до 7.0, вы получите эту ошибку, поскольку сами JAR-файлы не подписаны, а PackageManager до 7.0 не может обнаружить наличие Подпись APK V2.

Чтобы быть совместимым со всеми целевыми системами, убедитесь, что APK подписан с помощью обеих схем, установив оба флажка версии подписи в диалоговом окне Android Studio Создать подписанный APK, как показано здесь:

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

Если ожидаются цели только 7.0, то нет необходимости включать подпись V1.

person Paul Ratazzi    schedule 29.03.2017
comment
Вы сэкономили мне много времени. Обновление Android Studio вызвало кошмар неприятностей. Это был один из них. Интересно, если бы SO не было, больше половины разработчиков Android умерли бы. Android Studio не сообщает об ошибках. - person Atul; 06.09.2018
comment
К счастью, я протестировал свой релизный apk на старом устройстве, прежде чем выкатить его в Google Play. Это было бы катастрофой, если бы все устройства Android 7.0 не смогли установить новую версию. Эта штука с двумя версиями должна быть БОЛЬШОЙ КРАСНЫМ ВСПОМОГАТЕЛЬНЫМ ДИАЛОГОМ, когда вы нажимаете, чтобы создать выпуск apk! - person Kirill Karmazin; 12.02.2019
comment
Спасибо за это. Собираюсь сойти с ума, пытаясь понять, почему мой APK не запускается на версиях ниже Android 7, но это был простой флажок. Так раздражает. - person japzone; 18.05.2020

Я обнаружил, что это вызвано моей версией JDK.

У меня была эта проблема с 'ant', и это было из-за этого ПРЕДУПРЕЖДЕНИЯ, упомянутого в документации:

http://developer.android.com/guide/publishing/app-signing.html#signapp

Внимание: Начиная с JDK 7, алгоритм подписи по умолчанию был изменен, и вам необходимо указать алгоритмы подписи и дайджеста (-sigalg и -digestalg) при подписании APK.

У меня JDK 7. В моем журнале Ant я использовал -v для подробного вывода, и он показал

$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
 [exec]     pkg: /data/local/tmp/PairFinder-release.apk
 [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Я подписал JAR вручную и выровнял его, но он дал немного другую ошибку:

$ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)

Я нашел ответ здесь.

Как справиться с INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES без удаления >

Мне нужно было только удалить его, и все заработало!

$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)

Теперь мне нужно только изменить build.xml, чтобы использовать эти параметры при подписании!

Хорошо, вот оно: C: \ Program Files \ Java \ android-sdk \ tools \ ant \ build.xml

            <signjar
                    sigalg="MD5withRSA"
                    digestalg="SHA1"
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />
person Chloe    schedule 10.04.2012
comment
JDK 7 тоже был моей проблемой. Я поленился и удалил JDK 7 и установил JDK 6, тоже сработало ^^. Другое решение для взлома, но менее радикальное, может быть установлено обоими, но для JAVA_HOME необходимо установить JDK 6 и сначала указать путь к контейнеру JDK 6 в PATH. - person User; 11.05.2012
comment
У JDK 8 такая же проблема. Изменение PATH на JDK 6 сработало. Спасибо вам палочка-выручалочка! - person Chris Xue; 15.08.2014
comment
Спасибо! Мое приложение Market было скомпилировано с использованием JDK6. Когда я скомпилировал приложение с хранилищем ключей выпуска с помощью JDK7 и попытался установить, у меня возникла эта проблема. - person Sileria; 17.10.2014

В большинстве случаев решение этой ошибки действительно простое:

  1. Удалите apk
  2. Очистите свой Android-проект
  3. Создайте свой Android-проект
  4. Установите / запустите свой apk
person JanCor    schedule 10.04.2013
comment
Я сделал 2,3,4 и получил ту же ошибку. Что вы имеете в виду под удалением apk? С моего устройства? Я не думаю, что это когда-либо было на моем устройстве. - person Curtis; 01.05.2020
comment
я внезапно начал получать эту ошибку из ничего, None, если решение, а просто проект очистки работал. Спасибо. - person pgcan; 05.06.2020


Эта ошибка может возникнуть, если вы добавите свою конфигурацию подписи (создадите ключ подписи и добавите в структуру проекта ›Модули› Конфигурации подписи), но забудете указать в структуре проекта ›Варианты сборки› Типы сборки ›Конфигурация подписи.

Поле конфигурации подписи не должно быть пустым! (См. Рисунок ниже) В противном случае вы увидите

"INSTALL_PARSE_FAILED_NO_CERTIFICATES...APK signature verification failed." 

ошибка при попытке установить release вариант. (или другой вариант с такой же неправильной конфигурацией)

Пример конфигурации подписи

person eddym    schedule 02.10.2020
comment
Спасибо! Ошибка была трудно найти… - person AymKdn; 06.06.2021

Я тоже столкнулся с той же проблемой. Сначала я создал сборку с использованием V2 и установил ее на мобильных устройствах под управлением OS 5.1, и у меня возникла та же проблема. Но сборка работала нормально на планшете под управлением OS 7.0. Итак, я создал сборку с подписью V1 Jar, и она отлично работала на обоих устройствах.

Вывод: если вы поддерживаете устройство ниже ОС Android 7.0. Используйте подпись jar V1 для создания сборки.

person Rajiv Ranjan    schedule 22.05.2019
comment
Нет необходимости проверять оба. Выберите V1, если вы поддерживаете OS 7.0 и ниже. Отметьте V2, если вы поддерживаете устройства, работающие на 7.0 и выше. - person Rajiv Ranjan; 26.05.2020

Недавно у меня была эта ошибка при обновлении до Android Studio 4.0. Причина заключалась в том, что у проекта была отключена подпись V2 в конфигурации подписи в build.gradle.

Решением было удалить v2SigningEnabled false или явно установить true, что является значением по умолчанию.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}
person mikehc    schedule 02.06.2020

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

Решением было удалить мой debug.keystore файл и позволить ADT воссоздать его. Очевидно, срок его действия истек.

Лучшее долгосрочное решение - явно создать debug.keystore, срок действия которого не истекает только через год, вместо того, чтобы позволить ADT создать его. Вот как это сделать:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000

При появлении запроса введите эти значения:

  • Имя и фамилия: Отладка Android.
  • Организационное подразделение: Android
  • Название организации: Неизвестно
  • Город или населенный пункт: Неизвестно
  • Штат или провинция: Неизвестно
  • Код страны: США
person Kristopher Johnson    schedule 29.05.2013

Уродливое, но быстрое решение: используйте JDK 6 вместо 7.

Прочитав ответ Хлои, я удалил свой JDK 7 (он в любом случае не нужен) и установил JDK 6. Это исправило. Лучшее решение - заставить ant использовать JDK 6 (без удаления 7). Возможно, возможно изменение / установка этого свойства:

java.library.path

в файле local.properties. Он находится в каталоге проекта (корень).

Android в любом случае не работает с JDK 7 (только 6 или 5), поэтому сделать так, чтобы скрипт ant также использовал JDK 6 или 5, вероятно, будет хорошим решением.

person User    schedule 11.05.2012

Это связано с тем, что ранее созданная сборка и текущая версия имеют конфликт в версии подписи между v1 (подпись jar) и v2 (полная подпись APK),

Чтобы исправить, отметьте правильную версию подписи в диалоговом окне «Создать подписанный APK»

person Pankaj kumar    schedule 31.03.2017

В более новых версиях Android Studio 3.2+, если вы пытаетесь запустить release install и не определили какие-либо конфигурации подписи, отобразится сообщение об ошибке, и установка завершится неудачно. Вам нужно либо запустить сборку debug, либо правильно настроить конфигурацию подписи (V1 или V2).

person Otieno Rowland    schedule 18.12.2018
comment
Еще есть подсказки о том, как настроить конфигурацию подписи (V2)? - person Travis Griggs; 22.04.2021

В моем случае я устанавливал проект с MinimumSDK больше, чем версия Android моего реального устройства. Я использовал другое устройство, и оно решено.

Мой проект MinSDK - ›24

Версия My Phone для Android - ›21

person iman kazemayni    schedule 08.02.2021

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

► ваш минимальный SDK меньше, чем SDK устройства.
► на вашем устройстве установлено более старое приложение с тем же именем пакета

person Emre Kilinc Arslan    schedule 11.02.2020
comment
Это был мой опыт - min sdk в моем проекте был выше, чем sdk устройства. Это произошло потому, что я пропустил правильный выбор, когда создавал проект в Android Studio, и случайно выбрал следующую более высокую версию в качестве моего SDK, тогда как мой старый планшет работал. - person GMc; 01.05.2020
comment
Уравнивание моего минимального SDK и устройства SDK решило мою проблему. - person Nuwan Harshakumara Piyarathna; 19.06.2020

Также вы можете проверить

Project Structure -> Default Config -> Signing Config

после того, как вы добавите все, что вам нужно

person Morozov    schedule 19.11.2019

Это могло произойти, если вы попытаетесь включить .jar библиотеку, содержащую AndroidManifest.xml файл.

  • Если это чистая Java, убедитесь, что вы не включаете ее в экспорт .jar.
  • Если это не чистая Java (имеется в виду проект Android), вы должны включить его как проект библиотеки.
person znat    schedule 02.11.2013

Установка переменной среды JAVA_HOME на JDK 5 или 6 (вместо JDK 7) исправила ошибку.

person TN.    schedule 04.06.2012

Я получал эту ошибку, потому что я сообщил, что мой ant release не работает из-за нехватки места на диске.

person Red Cricket    schedule 17.06.2016

Это вызывает эту ошибку для меня сегодня, потому что у меня есть приложение с минимальным sdk 28, и я нажимаю играть на эмуляторе с версией SDK 23. Обычно это невозможно (поскольку кнопка воспроизведения серого цвета), но сегодня не так много.

person Daniel Wilson    schedule 28.01.2020
comment
Спасибо, Дэниел. После долгих исследований и последующего использования ваш метод, наконец, решает эту проблему. - person Tushar Bapte; 01.02.2021

Через некоторое время и несколько онлайн-обсуждений на эту тему мне удалось исправить свой проект.

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

person Nelson R.    schedule 03.05.2012

У меня была эта ошибка в моей консоли Eclipse. Оказывается, у меня было две банки с одинаковым содержимым, но разными именами, и они противоречили друг другу. Я просто удалил один из них, и мне удалось установить приложение на устройство.

person joao2fast4u    schedule 22.08.2014

У меня возникла эта ошибка, когда я попытался установить проект Xamarin, созданный для предварительного просмотра Android N, на телефоне с api v23. Решение - не делать этого.

person James Moore    schedule 27.06.2016

Другой способ получить эту ошибку - выполнить сборку с использованием ant в macOS и иметь файл значка Finder (Icon\r) в дереве исходного кода приложения. Похоже, jarsigner не может справиться с возвратом каретки в имени файла, и, хотя он будет утверждать, что подпись действительна, если вы -verify APK, это всегда приводит к APK, который не устанавливается на устройство. По иронии судьбы плагин Google Drive Finder - отличный источник файлов значков Finder.

Решение состоит в том, чтобы исключить вредоносные файлы (которые в любом случае бесполезны в APK) с помощью такого спецификатора в fileset:

    <exclude name="**/Icon&#13;" />
person Perry    schedule 07.03.2017

Эта проблема может возникнуть, если вы устанавливаете неподписанную версию APK. Убедитесь, что вы установили правильный APK.

person NeeK    schedule 30.01.2019

У меня была проблема с кодом ionic / Visual Studio (запуск Android на устройстве):

Я удалил приложение на мобильном устройстве (Настройки / Приложения), ошибка исчезла, и приложение запускается.

person Michael Maier    schedule 12.03.2019

Сначала просто попробуйте это сделать:

  • перейдите в Gradle script → bulid.gradle (module: app) → затем вам нужно изменить значение (minSdkVersion). Например, если вы использовали 26, вы можете попробовать уменьшить значение, например (minSdkVersion 20)
  • затем попробуйте (синхронизировать сейчас).
person Engineer Ahmed IT    schedule 21.03.2020

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

person Shashank Pandey    schedule 22.04.2020

Убедитесь, что вариант сборки настроен на отладку (а не выпуск) в Android Studio (проверьте панель вариантов сборки).

person shubomb    schedule 29.08.2020

Я столкнулся с этой проблемой в IDE JetBrains Rider.

Полная ошибка

INSTALL_PARSE_FAILED_NO_CERTIFICATES: не удалось собрать сертификаты из /data/app/vmdl1252907876.tmp/base.apk: попытаться получить длину нулевого массива

Проблема возникла в результате использования JDK8. Переход на JDK11 решил проблему.

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

person Ryan Payne    schedule 08.10.2020

откройте терминал, напишите Clean project- ›нажмите Enter-› эта проблема будет решена автоматически в течение нескольких секунд.

person Minhajul Islam Apu    schedule 06.02.2021

Что касается меня, я забываю добавить новую конфигурацию входа в

Project Structure -> Default Config -> Signing Config

person Mohamed Ben Romdhane    schedule 16.03.2021
comment
Как мне на самом деле сгенерировать конфиги подписи, чтобы поместить сюда? - person Travis Griggs; 22.04.2021
comment
Когда вы создаете свой первый Apk, вам необходимо создать конфигурацию входа - person Mohamed Ben Romdhane; 27.04.2021

Простым, но глупым решением для меня была установка JRE и JDK.

Я начал новый проект Kotlin с новой установки Android Studio для рабочего задания. Я попытался создать шаблон по умолчанию для эмулированного телефона и получил данную ошибку.

Я сделал следующее:

  • установлены последние версии JRE и JDK
  • Открыл CMD и сделал java -version, чтобы убедиться, что он установлен. Он вернулся с сообщением о действительной версии.
  • Перезапустил Android Studio и загрузил мой проект
  • Нажмите кнопку Play, чтобы установить на мое эмулируемое устройство.
  • Все работает нормально.
person Jay Gould    schedule 24.03.2021

You can also just change the build variant to Debug and you should be good to go введите описание изображения здесь

person Pascal Nitcheu    schedule 07.02.2021