Що таке помилка INSTALL_PARSE_FAILED_NO_CERTIFICATES?


163

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

Помилка встановлення: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Коли я спробував повернути його до попереднього стану, він все ще робив мені таку саму помилку ... Що я зробив?


Для будь-кого іншого: INSTALL_PARSE_FAILED_NO_CERTIFICATESце помилка, -103яку ви можете отримати / побачити через adb log( src ), наприклад. D/PackageInstaller(21320): Installation error code: -103

відповідь вірна. І є ще одна причина, яка викликає цю помилку, коли у вас на телефоні встановлено старе додаток з тим же ім'ям пакета .. просто видаліть з телефону перед тим, як встановити новий
Emre Kilinc Arslan

1
Всім, хто натрапляє на це питання - прочитайте всі відповіді нижче! Схоже, це повідомлення про помилку - це скоріше помилка типу "щось не так". Причиною, з якою я зіткнувся з цим, був один із способів відповідей, вниз по списку !!!!
GMc

Відповіді:


56

Ви редагували AndroidManifest.xmlбезпосередньо у .apkфайлі? Якщо так, це не вийде.

Кожен Android .apkпотрібно підписати, якщо він буде встановлений на телефоні , навіть якщо ви не встановлюєте через Ринок. Інструменти розробки вирішують цю проблему, підписуючи сертифікат про розробку, але .apkвін все ще підписаний.

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

Тож якщо ви внесете будь-які зміни у додаток, вам знадобиться відновити його, .apkщоб він підписався належним чином.


велике спасибі, чи є кнопка для автоматичного відновлення маніфесту?
mtmurdock

Хлопці, які борються з трепетом, бігайте flutter cleanта бігайте / налагоджуйте знову! Ця операція схожа на рішення вище, оскільки вона очищає папку збірки та знову відновлює файл збірки під час запуску / налагодження!
Маной Кумар

183

Я виявив, що ця помилка тепер може виникнути і при використанні неправильної конфігурації підпису. Як описано тут , Android 7.0 представляє нову схему підпису, V2 . Схема V2 підписує весь APK, а не лише JAR, як це робиться у схемі V1. Якщо ви підпишетесь лише на V2 і спробуєте встановити ціль до 7.0, ви отримаєте цю помилку, оскільки самі JAR не підписані, а програма до 7.0 PackageManager не може виявити наявність підпису V2 APK.

Щоб бути сумісним з усіма цільовими системами, переконайтесь, що APK підписано з обома схемами, встановивши прапорці обох полів версії підпису в діалоговому вікні " Створення підписаного APK" Android Studio, як показано тут:

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

Якщо передбачається лише 7,0 цілей, тоді не потрібно включати підпис V1.


5
Ти врятував мої багато часу. Оновлення Android Studio викликало кошмар проблем. Це був один із них. Цікаво, якби не було близько половини розробки Android, загинуло б. Android Studio не дає підказки про помилки.
Атул

4
На щастя, я тестував свою версію apk на старому пристрої, перш ніж розгорнути її в Google Play. Це було б катастрофою, якщо на всіх пристроях <Android 7.0 не вдалося встановити нову версію. Ця річ з двома версіями повинна бути BIG RED POP UP DIALOG при натисканні, щоб створити версію apk!
Кирило Кармазін

Дякую за це Зійдемо з розуму, шукаючи, чому мій APK не працює на Android 7, але це був просто простий прапорець. Так дратує.
japzone

54

Я виявив, що це було викликано моєю версією JDK.

У мене виникли проблеми з «мурашкою», і це було пов’язано з цим ОБЕРЕЖНО, згаданим у документації:

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

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

У мене 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]

Я підписав 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: \ Програмні файли \ 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}" />

3
JDK 7 також була моєю проблемою. Я був ледачий і видалений JDK 7 і встановив JDK 6, також працював ^^. Інше рішення про злому, але менш радикальне, може бути дозволено обом встановити, але встановити JAVA_HOME на JDK 6 і поставити бін шлях JDK 6 першим у PATH.
Ixx

1
JDK 8 має ту саму проблему. Зміна PATH на JDK 6 спрацювала. Дякую рятівнику!
Кріс Сюе

Дякую! Мій додаток на ринку було складено з JDK6. Коли я компілював додаток із сховищем ключів за допомогою JDK7 і намагався його встановити, це дало мені цю проблему.
Sileria

28

Більшість випадків рішення цієї помилки дійсно просте:

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

Я зробив 2,3,4 і отримав таку ж помилку. Що ви маєте на увазі під час видалення apk? З мого пристрою? Я не думаю, що це колись було на моєму пристрої.
Кертіс

я раптом почав отримувати цю помилку з нічого, немає, якщо проект, а просто проект очищення спрацював. Дякую.
pgcan

18

вирішено (для мене) за допомогою аргументів у keytool

-sigalg MD5withRSA -keyalg RSA -keysize 1024

і використання в jarsigner

-sigalg MD5withRSA -digestalg SHA1

рішення, знайдене в

Які підводні камені існують для підписання Android APK?


Дякую, вирішили проблему і для мене (у мене є JDK 7).
Енріко Рос

Я виправив це так само, оскільки я використовую apptalerator титан і не маю доступу до сценарію генерації apk. Зверніть увагу, що ці рішення потребують відновлення (зміни!) Приватного ключа.
Федеріко

8

Я також стикався з тим же питанням. Спочатку я створив збірку за допомогою V2 і встановив її на мобільних пристроях, що працюють на ОС 5.1, і в мене виникла та сама проблема. Але збірка працювала чудово на планшетному ПК, який працює на ОС 7.0. Тому я створив збірку за допомогою підпису V1 Jar, і він працював чудово на обох пристроях.

Висновок: Якщо ви підтримуєте пристрій нижче для android OS 7.0. Використовуйте підпис V1 jar для створення збірки.


Не потрібно перевіряти обидва, виберіть V1, якщо ви підтримуєте ОС 7.0 і нижче. Перевірте V2, якщо ви підтримуєте пристрої, що працюють на версії 7.0 і вище.
Раджив Ранджан

7

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

5

Це некрасиве, але швидке рішення: використовуйте JDK 6 замість 7.

Прочитавши відповідь Хлої, я видалив JDK 7 (зараз він не потрібен) і встановив JDK 6. Це виправило. Кращим рішенням було б зробити мурашки для використання JDK 6 (без видалення 7). Можливо, можливо змінити / встановити цю властивість:

java.library.path

у файлі local.properties. Це в каталозі проектів (root).

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


5

Це тому, що раніше створена збірка та поточний конфлікт у версії підпису між v1 (jar підписом) та v2 (повний підпис APK),

Щоб виправити належну версію підпису під діалоговим вікном Створити підписаний APK


4

Нещодавно у мене відбулася помилка під час оновлення до Android Studio 4.0. Причина полягала в тому, що проект був відключений підключенням V2 у конфігурації підписання в build.gradle.

Рішення полягало в тому, щоб видалити v2SigningEnabled falseабо явно встановити його true, що є значенням за замовчуванням.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

Я використовую Android Studio 4.0. Але в моєму файлі build.gradle такого поняття "v2SigningEnabled" немає. Тоді що мені робити?
Nuwan Harshakumara Piyarathna

3

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


3

більшість відповідей вірні. і деякі інші причини, які трапляються, є

► ваш мінімум sdk менше, ніж sdk пристрою.
► у вашому пристрої є старша програма з тим же найменуванням пакета


Це був мій досвід - мінімум sdk в моєму проекті був вищим, ніж sdk пристрою. Це сталося тому, що я "пропустив" правильний вибір, коли я створював проект в Android Studio і випадково вибрав наступну вищу версію як мій SDK, а потім мій старий планшет.
GMc

прирівнюючи мін min sdk і sdk пристрою вирішив мою проблему.
Nuwan Harshakumara Piyarathna

2

Це може статися, якщо ви спробуєте включити .jarбібліотеку, яка містить AndroidManifest.xmlфайл.

  • Якщо це чиста Java, переконайтеся, що ви не включите її до експорту .jar
  • Якщо це не чиста Java (тобто проект Android), ви повинні включити її як бібліотечний проект

2

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

Project Structure-> Default Config->Signing Config

після того, як ви додасте все, що вам потрібно


1

Установка змінної середовища JAVA_HOMEна JDK 5 або 6 (замість JDK 7) виправила помилку.


0

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

В основному це враховує останні файли (це можуть бути зображення чи макети ), які ви вводите. Якщо ви видалите їх, це вийде, і ви можете створити свій проект заново.


0

У мене на консолі Eclipse була помилка. Виявляється, у мене було два банки з однаковим змістом, але різними назвами, і вони суперечили один одному. Я просто видалив одну з них і мені вдалося встановити додаток на пристрій.


0

Я отримував цю помилку, тому що я випустив, що мій ant releaseне вдався, тому що мені не вистачало місця на диску.


0

Я отримав цю помилку, коли спробував встановити проект Xamarin, побудований на попередньому попередньому перегляді Android N на телефоні під управлінням api v23. Рішення - не робити цього.


0

Ще один спосіб отримати цю помилку - побудувати за допомогою antmacOS і мати файл значка Finder ( Icon\r) у вихідному дереві програми. Здається, jarsignerне вдається впоратися з поверненням перевезення у назві файлу, і, хоча, ви заявите, що підпис дійсний, якщо ви-verify APK, це завжди призводить до того, що APK не буде встановлено на пристрої. Як не дивно, плагін Finder Google Drive є чудовим джерелом файлів значків Finder.

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

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

0

Ця проблема виникне, якщо ви встановите версію APK, яка не підписується. Перевірте, чи правильно встановлено APK.


0

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

Я видалив додаток на мобільному пристрої (Налаштування / Програми), помилка зникла і додаток запускається.


0

Сьогодні це помилка для мене, тому що у мене є додаток з мінімальним sdk 28 і натискаю на емуляторі з версією SDK 23. Це, як правило, неможливо (AS Grey - це кнопка відтворення), але сьогодні це не так багато.


0

По-перше, просто спробуйте це зробити:

  • перейдіть до скрипту Gradle → bulid.gradle (модуль: додаток) → тоді вам доведеться змінити (minSdkVersion) значення. Наприклад, якщо ви використовували 26, ви можете спробувати зменшити значення, наприклад (minSdkVersion 20)
  • потім спробуйте (синхронізуйте зараз).

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.