Lỗi INSTALL_PARSE_FAILED_NO_CERTIFICATE là gì?


163

Tôi đã cố gắng thay đổi hoạt động mặc định / chính / khởi động (bất cứ thứ gì bạn gọi nó) bằng cách chỉnh sửa androidmanifest.xmltệp. Tất cả tôi đã làm là thay đổi android:nametài sản. tuy nhiên, điều này đã phá vỡ hoàn toàn toàn bộ ứng dụng. Khi tôi cố gắng cài đặt nó không thành công và đọc.

Lỗi cài đặt: INSTALL_PARSE_FAILED_NO_CERTIFICATE

Khi tôi cố gắng thay đổi nó trở lại trạng thái trước đó, nó vẫn gây ra lỗi tương tự ... Tôi đã làm gì?


Đối với bất kỳ ai khác: INSTALL_PARSE_FAILED_NO_CERTIFICATESlà lỗi -103mà bạn có thể nhận / xem qua adb log( src ), vd. D/PackageInstaller(21320): Installation error code: -103

Câu trả lời là đúng. Và có một lý do khác đưa ra lỗi này là khi bạn có ứng dụng cũ có cùng tên gói trong điện thoại của mình .. chỉ cần gỡ cài đặt khỏi điện thoại của bạn trước khi cài đặt cái mới
Emre Kilinc Arslan

1
Cho bất cứ ai vấp phải câu hỏi này - hãy đọc tất cả các câu trả lời dưới đây! Có vẻ như thông báo lỗi này là một loại lỗi "có gì đó không đúng". Lý do tôi gặp phải là do một trong những cách trả lời, cách xuống danh sách !!!!
GMc

Câu trả lời:


56

Bạn đã chỉnh sửa AndroidManifest.xmltrực tiếp trong .apktập tin? Nếu vậy, điều đó sẽ không làm việc.

Mọi Android .apkcần phải được ký nếu nó sẽ được cài đặt trên điện thoại , ngay cả khi bạn không cài đặt qua Market. Các công cụ phát triển làm việc này bằng cách ký với một chứng chỉ phát triển nhưng .apkvẫn được ký.

Một cách sử dụng này là để một thiết bị có thể biết liệu đây có phải .apklà một bản nâng cấp hợp lệ cho một ứng dụng đã cài đặt hay không, vì nếu đó là Chứng chỉ sẽ giống nhau.

Vì vậy, nếu bạn thực hiện bất kỳ thay đổi nào cho ứng dụng của mình, bạn sẽ cần phải xây dựng lại để ứng dụng .apkđược ký hợp lệ.


Rất cảm ơn, có một nút để tự động xây dựng lại bảng kê khai?
mtmurdock

Đối với những người đấu tranh với rung, hãy chạy flutter cleanvà chạy / gỡ lỗi một lần nữa! Thao tác này tương tự như giải pháp ở trên vì nó dọn sạch thư mục bản dựng và xây dựng lại tệp bản dựng một lần nữa khi chạy / gỡ lỗi!
Manoj Kumar

183

Tôi thấy rằng lỗi này bây giờ cũng có thể xảy ra khi sử dụng cấu hình ký sai. Như được mô tả ở đây , Android 7.0 giới thiệu sơ đồ chữ ký mới, V2 . Lược đồ V2 ký toàn bộ APK thay vì chỉ JAR, như được thực hiện trong sơ đồ V1. Nếu bạn đăng ký với chỉ V2, và cố gắng để cài đặt trên một mục tiêu trước 7.0, bạn sẽ nhận được lỗi này kể từ khi lọ mình không đăng nhập và tiền 7.0 PackageManager không thể phát hiện sự hiện diện của chữ ký V2 apk.

Để tương thích với tất cả các hệ thống đích, hãy đảm bảo APK được ký với cả hai lược đồ bằng cách chọn cả hai hộp phiên bản chữ ký trong hộp thoại Tạo tệp đã ký của Android Studio như được hiển thị ở đây:

nhập mô tả hình ảnh ở đây

Nếu chỉ có 7.0 mục tiêu được dự đoán, thì không cần phải bao gồm chữ ký V1.


5
Bạn đã tiết kiệm rất nhiều thời gian của tôi. Nâng cấp Android Studio gây ra cơn ác mộng rắc rối. Đây là một trong số đó. Tôi tự hỏi nếu SO không có hơn một nửa Phát triển Android sẽ chết. Android Studio không đưa ra manh mối nào về lỗi.
Atul

4
May mắn thay, tôi đã thử nghiệm apk phát hành của mình trên một thiết bị cũ trước khi tôi tung nó ra trên Google Play. Đó sẽ là một thảm họa nếu tất cả các thiết bị <Android 7.0 không cài đặt được phiên bản mới. Điều đó với hai phiên bản sẽ là một DIALOG BIG RED POP UP khi bạn nhấp để tạo bản phát hành apk!
Kirill Karmazin

Cảm ơn vì điều đó. Sắp phát điên khi tìm kiếm lý do tại sao APK của tôi không chạy trên Android 7, nhưng đó chỉ là một hộp kiểm đơn giản. Rất khó chịu.
japzone

54

Tôi thấy điều này là do phiên bản JDK của tôi gây ra.

Tôi đã gặp vấn đề này với 'con kiến' và đó là do THẬN TRỌNG được đề cập trong tài liệu này:

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

Thận trọng: Kể từ JDK 7, thuật toán ký mặc định đã thay đổi, yêu cầu bạn chỉ định thuật toán chữ ký và tiêu hóa (-sigache và -digestache) khi bạn ký APK.

Tôi có JDK 7. Trong nhật ký Ant của tôi, tôi đã sử dụng -v cho verbose và nó hiển thị

$ 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]

Tôi đã ký JAR bằng tay và mã hóa nó, nhưng nó có một lỗi khác:

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

Tôi thấy rằng đã trả lời ở đây.

Cách đối phó với INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATE mà không cần gỡ cài đặt

Tôi chỉ cần gỡ cài đặt nó và sau đó nó hoạt động!

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

Bây giờ tôi chỉ cần sửa đổi build.xml để sử dụng các tùy chọn đó khi ký!

Ok đây là: C: \ Chương trình tập tin \ 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 cũng là vấn đề của tôi. Tôi đã lười biếng và gỡ cài đặt JDK 7 và cài đặt JDK 6, cũng hoạt động ^^. Giải pháp hack khác nhưng ít triệt để hơn có thể cho phép cả hai cài đặt nhưng đặt JAVA_HOME thành JDK 6 và đặt đường dẫn bin của JDK 6 lên đầu tiên trong PATH.
Ixx

1
JDK 8 có cùng một vấn đề. Thay đổi PATH thành JDK 6 đã hoạt động. Cảm ơn phao cứu sinh!
Chris Xue

Cảm ơn! Ứng dụng thị trường của tôi đã được biên dịch với JDK6. Khi tôi biên dịch ứng dụng với kho khóa phát hành bằng cách sử dụng JDK7 và cố gắng cài đặt, nó đã cho tôi vấn đề này.
Sileria

28

Hầu hết thời gian giải pháp cho lỗi này thực sự đơn giản:

  1. Gỡ cài đặt apk của bạn
  2. Làm sạch dự án Android của bạn
  3. Xây dựng dự án Android của bạn
  4. Cài đặt / chạy apk của bạn

Tôi đã làm 2,3,4 và nhận được cùng một lỗi. Bạn có ý nghĩa gì khi gỡ cài đặt apk của bạn? Từ thiết bị của tôi? Tôi không nghĩ nó đã từng có trên thiết bị của tôi.
Curtis

Tôi đột nhiên bắt đầu nhận được lỗi này từ không có gì, Không có gì nếu giải pháp mà chỉ đơn giản là làm sạch dự án. Cảm ơn.
pgcan

18

đã giải quyết (cho tôi) bằng cách sử dụng trong keytool các đối số

-sigalg MD5withRSA -keyalg RSA -keysize 1024

và sử dụng trong jarsigner

-sigalg MD5withRSA -digestalg SHA1

giải pháp tìm thấy trong

Những loại pitfals tồn tại cho việc ký APK Android?


Cảm ơn, đã sửa lỗi cho tôi (Tôi có JDK 7).
Enrico Ros

Tôi đã sửa nó theo cùng một cách, vì tôi sử dụng titan appcelerator và không có quyền truy cập vào tập lệnh tạo apk. Lưu ý giải pháp này yêu cầu tái tạo (thay đổi!) Của khóa riêng.
Federico

8

Tôi cũng đã đối mặt với vấn đề tương tự. Đầu tiên tôi tạo bản dựng bằng V2 và cài đặt nó trong các thiết bị di động chạy trên OS 5.1 và tôi gặp vấn đề tương tự. Nhưng bản dựng đã hoạt động tốt trên Tablet chạy trên OS 7.0. Vì vậy, tôi đã tạo bản dựng với chữ ký Jar Jar và nó hoạt động tốt trên cả hai thiết bị.

Kết luận: Nếu bạn đang hỗ trợ thiết bị bên dưới hệ điều hành Android 7.0. Sử dụng chữ ký jar V1 để tạo bản dựng.


Không cần kiểm tra cả hai, Chọn V1 nếu bạn đang hỗ trợ OS 7.0 trở xuống Kiểm tra V2 nếu bạn đang hỗ trợ các thiết bị chạy trên 7.0 trở lên.
Rajiv Ranjan

7

Trong trường hợp của tôi, tôi có thể xây dựng và chạy các bản phát hành, nhưng có INSTALL_PARSE_FAILED_NO_CERTIFICATES gặp lỗi khi cố gắng thực hiện bản dựng gỡ lỗi.

Giải pháp là xóa debug.keystoretập tin của tôi và để ADT tạo lại nó. Nó dường như đã hết hạn.

Một giải pháp dài hạn tốt hơn là tạo ra một cách rõ ràng debug.keystorekhông hết hạn chỉ sau một năm, thay vì để ADT tạo ra nó. Đây là lệnh để làm điều đó:

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

Khi được nhắc, hãy nhập các giá trị sau:

  • Tên và họ: Gỡ lỗi Android
  • Đơn vị tổ chức: Android
  • Tên tổ chức: Không biết
  • Thành phố hoặc địa phương: Không xác định
  • Bang hoặc tỉnh: Không rõ
  • Mã quốc gia: Mỹ

5

Đây là một giải pháp xấu nhưng nhanh: sử dụng JDK 6 thay vì 7.

Sau khi đọc câu trả lời của Chloe, tôi đã gỡ cài đặt JDK 7 của mình (hiện tại không cần nó nữa) và cài đặt JDK 6. Điều đó đã sửa nó. Một giải pháp tốt hơn sẽ khiến ant sử dụng JDK 6 (mà không cần gỡ cài đặt 7). Có thể thay đổi / thiết lập thuộc tính này:

java.l Library.path

trong tập tin local.properies. Nó nằm trong thư mục dự án (root).

Android không hoạt động với JDK 7 dù sao (chỉ 6 hoặc 5), do đó, làm cho tập lệnh ant cũng sử dụng JDK 6 hoặc 5 có lẽ là một giải pháp tốt.


5

Do bản dựng và hiện tại được tạo trước đây có xung đột trong phiên bản chữ ký giữa v1 (chữ ký jar) và v2 (Chữ ký APK đầy đủ),

Để sửa đánh dấu phiên bản chữ ký thích hợp trong hộp thoại Tạo chữ ký APK


4

Gần đây tôi gặp lỗi này khi nâng cấp lên Android Studio 4.0. Nguyên nhân là do dự án đã bị vô hiệu hóa ký kết V2 trong cấu hình ký build.gradle.

Giải pháp là loại bỏ v2SigningEnabled falsehoặc đặt nó một cách rõ ràng true, đó là giá trị mặc định.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

Tôi đang sử dụng Android studio 4.0. Nhưng không có thứ "v2SigningEnables" như vậy trong tệp build.gradle của tôi. Sau đó, tôi nên làm gì?
Nuwan Harshakumara Piyarathna

3

Trong các phiên bản Android Studio 3.2+ mới hơn, nếu bạn đang cố chạy releasecài đặt và bạn chưa xác định bất kỳ cấu hình ký nào, nó sẽ hiển thị dấu nhắc lỗi và cài đặt sẽ thất bại. Những gì bạn cần làm là chạy bản debugdựng hoặc thiết lập cấu hình ký (V1 hoặc V2) một cách chính xác.


3

hầu hết các câu trả lời là đúng. và một số lý do khác xảy ra là

► sdk tối thiểu của bạn nhỏ hơn sdk thiết bị.
► bạn có ứng dụng cũ hơn trong thiết bị của mình với cùng tên gói


Đây là kinh nghiệm của tôi - sdk tối thiểu trong dự án của tôi cao hơn sdk thiết bị. Nó xảy ra do tôi "bỏ lỡ" lựa chọn chính xác khi tôi đang tạo dự án trong Android Studio và vô tình chọn phiên bản cao hơn tiếp theo làm SDK của tôi sau đó máy tính bảng cũ của tôi đang chạy.
GMc

làm cho sdk tối thiểu của tôi và sdk thiết bị đã giải quyết vấn đề của tôi.
Nuwan Harshakumara Piyarathna

2

Điều này có thể xảy ra nếu bạn cố gắng bao gồm một .jarthư viện có chứa một AndroidManifest.xmltệp.

  • Nếu đó là Java thuần túy, hãy đảm bảo bạn không đưa nó vào xuất .jar
  • Nếu đó không phải là Java thuần túy (nghĩa là đó là một dự án Android) thì bạn phải đưa nó vào như một Dự án Thư viện

2

Ngoài ra bạn có thể kiểm tra

Project Structure-> Default Config->Signing Config

sau khi bạn thêm tất cả những gì bạn cần


1

Đặt biến môi trường JAVA_HOMEthành JDK 5 hoặc 6 (thay vì JDK 7) đã sửa lỗi.


0

Sau một thời gian và nhiều chủ đề trực tuyến về chủ đề này, tôi đã cố gắng khắc phục dự án của mình.

Nó chủ yếu xem xét các tệp cuối cùng ( có thể là hình ảnh hoặc bố cục ) mà bạn đặt vào. Nếu bạn xóa chúng, nó sẽ hoạt động và bạn có thể xây dựng lại dự án của mình.


0

Tôi đã gặp lỗi này trong Bảng điều khiển Eclipse. Hóa ra tôi có hai cái lọ có cùng nội dung nhưng tên khác nhau và chúng mâu thuẫn với nhau. Tôi vừa xóa một trong số chúng và quản lý để cài đặt ứng dụng trên thiết bị.


0

Tôi đã nhận được lỗi này bởi vì tôi đã phát hành rằng tôi ant releaseđã thất bại vì tôi hết dung lượng đĩa.


0

Tôi đã gặp lỗi này khi tôi cố gắng cài đặt dự án Xamarin được xây dựng dựa trên bản xem trước Android N trên điện thoại chạy api v23. Giải pháp là không làm điều đó.


0

Một cách khác để nhận lỗi này là xây dựng bằng antmacOS và có tệp biểu tượng Finder ( Icon\r) trong cây nguồn của ứng dụng. Nó xuất hiện jarsignerkhông thể đối phó với sự trở lại vận chuyển trong tên tệp và, mặc dù nó sẽ tuyên bố ký là hợp lệ nếu bạn-verify là APK, nhưng nó luôn dẫn đến một APK không cài đặt trên thiết bị. Trớ trêu thay, plugin Google Drive Finder là một nguồn tuyệt vời của các tệp biểu tượng Finder.

Giải pháp là loại trừ các tệp vi phạm (dù sao cũng vô dụng trong APK) với một công cụ xác định như thế này trong fileset:

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

0

Vấn đề này sẽ xảy ra nếu bạn đang cài đặt phiên bản APK chưa ký. Kiểm tra nếu bạn đang cài đặt APK chính xác.


0

Tôi gặp vấn đề với Mã ionic / Visual Studio (Chạy Android trên thiết bị):

Tôi đã gỡ cài đặt Ứng dụng trên thiết bị di động (Cài đặt / Ứng dụng), lỗi không còn nữa và ứng dụng đang bắt đầu.


0

Hôm nay tôi đã gặp phải lỗi này vì tôi có một ứng dụng có sdk tối thiểu 28 và đang chơi play trên trình giả lập với phiên bản SDK là 23. Thông thường, điều này là không thể (NHƯ nút màu xám ra), nhưng hôm nay thì không như vậy nhiều


0

Đầu tiên chỉ cần cố gắng để làm điều đó:

  • đi tới tập lệnh Gradle → bulid.gradle (mô-đun: ứng dụng) → sau đó bạn phải thay đổi giá trị (minSdkVersion). Ví dụ: nếu bạn đã sử dụng 26, bạn có thể cố gắng giảm giá trị, như (minSdkVersion 20)
  • sau đó thử (đồng bộ hóa ngay bây giờ).

0

Nếu bạn đang sử dụng trình giả lập thì hãy thử thiết lập lại và nếu bạn ở thiết bị di động trước tiên hãy gỡ cài đặt ứng dụng rồi tắt chế độ nhà phát triển, sau đó bật nó lên, vấn đề sẽ được giải quyết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.