Что такое INSTALL PARSE FAILED NO CERTIFICATES error?

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

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

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

15 ответов


вы отредактировали AndroidManifest.xml непосредственно в ? Если так, то это не сработает.

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

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

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


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

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

enter image description here

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


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

у меня была эта проблема с "ant" , и это было связано с этой осторожностью, упомянутой в документации:

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

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

у меня есть JDK 7. В моем журнале муравьев я использовал -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]

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

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

теперь мне нужно только изменения.xml для использования этих параметров при подписании!

Ok вот он: C:\Program файлы\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}" />

решено (для меня), используя в keytool args

-sigalg MD5withRSA -keyalg RSA -keysize 1024

и использование в jarsigner

-sigalg MD5withRSA -digestalg SHA1

решение найдено в

какие питфалы существуют для подписания Android APK?


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

  1. удалите apk
  2. очистите свой проект Android
  3. создайте свой проект Android
  4. установить / запустить apk

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

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

java.библиотека.путь

в местный.файл свойств. Он находится в каталоге проекта (root).

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


в моем случае я мог бы создавать и запускать сборки выпуска, но получил 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 Debug
  • подразделение: Android
  • название организации: неизвестный
  • город: неизвестный
  • штат или провинция:неизвестный
  • код страны: нас

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


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

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

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

чтобы исправить галочку правильную версию подписи под диалогом создания подписанного APK


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

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


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


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


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


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

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

    <exclude name="**/Icon&#13;" />