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

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

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

Когда я попытался изменить его на прежнее состояние, он все равно дал мне ту же ошибку … что я сделал!?!?!

Solutions Collecting From Web of "Что такое ошибка INSTALL_PARSE_FAILED_NO_CERTIFICATES?"

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

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

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

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

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

У меня была эта проблема с «муравей», и это было связано с этим ПРЕДУПРЕЖДЕНИЕМ, упомянутым в документации:

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 вручную и сделал zipaligned, но он дал немного другую ошибку:

 $ "$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}" /> к  <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}" /> 

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

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

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

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

(Для меня), используя в keytool аргументы

 -sigalg MD5withRSA -keyalg RSA -keysize 1024 

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

 -sigalg MD5withRSA -digestalg SHA1 

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

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

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

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

java.library.path

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

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

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

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

Повеселись

В моем случае я мог создавать и запускать сборки релизов, но при попытке выполнить отладочную сборку получил ошибку 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 , содержащую файл AndroidManifest.xml .

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

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

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

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

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

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

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

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

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

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

Исправить отметку правильной версии подписи в диалоговом окне «Создать подпись APK»