2010-05-26 3 views
93

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

Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES

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

ответ

39

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

Every Android .apk needs to be signed if it is going to be installed on a phone, даже если вы не устанавливаете через рынок. Инструменты разработки работают вокруг этого, подписываясь с сертификатом разработки, но .apk все еще подписан.

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

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

+0

большой спасибо, есть ли кнопка, чтобы автоматически перестроить манифест? – mtmurdock

+3

Просто отредактируйте манифест в Eclipse и нажмите «сохранить» – HXCaine

51

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

У меня была эта проблема с «муравей», и это было связано с этим ОСТОРОЖНО, указанной в документации:

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

Caution: As of JDK 7, the default signing algorithim has changed, requiring you to specify the signature and digest algorithims (-sigalg and -digestalg) when you sign an 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) 

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

How to deal with INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES without uninstallation

Я только необходимо, чтобы удалить его, а затем он работал!

$ 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, чтобы использовать эти параметры при подписании!

Ok здесь: C: \ Program Files \ Java \ Android-SDK \ Tools \ муравей \ 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}" /> 
+3

JDK 7 также была моей проблемой. Я ленился и удалил JDK 7 и установил JDK 6, также работал ^^. Другое решение для взлома, но менее радикальное, можно было бы установить как установленное, но и установить JAVA_HOME в JDK 6 и сначала поместить путь JDK 6 в PATH. – Ixx

+1

JDK 8 имеет ту же проблему. Сработало изменение PATH на JDK 6. Спасибо, спасатель! –

+0

Спасибо! Приложение моего рынка было составлено с помощью JDK6. Когда я скомпилировал приложение с хранилищем ключей с помощью JDK7 и попытался установить его, он дал мне эту проблему. – Sileria

0

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

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

5

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

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

java.library.path

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

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

2

Настройка переменной окружения JAVA_HOME на JDK 5 или 6 (вместо JDK 7) зафиксировала ошибку.

15

решена (для меня), используя в Keytool в аргументах

-sigalg MD5withRSA -keyalg RSA -keysize 1024 

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

-sigalg MD5withRSA -digestalg SHA1 

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

What kind of pitfals exist for the Android APK signing?

+0

Спасибо, исправил проблему для меня тоже (у меня JDK 7). –

+0

Я исправил его таким же образом, так как я использую тизер appcelerator и не имею доступа к сценарию генерации apk. Обратите внимание, что для этих решений требуется регенерация (изменение!) Секретного ключа. – Federico

6

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

  1. Uninstall your apk.
  2. Clean your android project.
  3. Build your android project.
  4. install/run your apk

Веселитесь

4

В моем случае, я мог бы построить и запустить выпуск сборки, но получил ошибку 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
  • Имя организации: Неизвестный
  • Город или Местность: Неизвестный
  • государство или провинция: Неизвестный
  • Код страны: США
2

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

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

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

0

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

0

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

0

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

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

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

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

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

enter image description here

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

1

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

Чтобы исправить галочку соответствующей версии подписи под Генерированием Подписи APK диалог

Смежные вопросы