Apakah itu kesalahan INSTALL_PARSE_FAILED_NO_CERTIFICATES?

163

Saya mencoba mengubah aktivitas default / main / startup (apa pun namanya) dengan mengedit androidmanifest.xmlfile. Yang saya lakukan hanyalah mengubah android:nameproperti. Namun, ini benar-benar merusak seluruh aplikasi. ketika saya mencoba untuk menginstalnya gagal dan membaca.

Kesalahan pemasangan: INSTALL_PARSE_FAILED_NO_CERTIFICATES

Ketika saya mencoba mengubahnya kembali ke keadaan sebelumnya, itu masih memberi saya kesalahan yang sama ... Apa yang telah saya lakukan?

mtmurdock
sumber
Untuk orang lain: INSTALL_PARSE_FAILED_NO_CERTIFICATESadalah kesalahan -103yang bisa Anda dapatkan / lihat melalui adb log( src ) misalnya. D/PackageInstaller(21320): Installation error code: -103
Jawabannya benar. Dan ada satu alasan lain yang memberikan kesalahan ini adalah ketika Anda memiliki aplikasi lama dengan nama paket yang sama di telepon Anda diinstal .. cukup uninstall dari ponsel Anda sebelum Anda menginstal yang baru
Emre Kilinc Arslan
2
Untuk siapa saja yang menemukan pertanyaan ini - bacalah semua jawaban di bawah ini! Sepertinya pesan kesalahan ini lebih merupakan jenis kesalahan "ada yang salah". Alasan saya temui itu karena salah satu cara jawaban, jalan daftar !!
GMc

Jawaban:

56

Apakah Anda mengedit AndroidManifest.xmllangsung di .apkfile? Jika demikian, itu tidak akan berhasil.

Setiap Android .apkharus ditandatangani jika ingin diinstal pada ponsel , bahkan jika Anda tidak menginstal melalui Market. Alat pengembangan bekerja di sekitar ini dengan menandatangani dengan sertifikat pengembangan tetapi.apk masih ditandatangani.

Salah satu penggunaannya adalah agar perangkat dapat mengetahui apakah suatu .apkupgrade yang valid untuk aplikasi yang diinstal, karena jika itu Sertifikatnya akan sama.

Jadi, jika Anda membuat perubahan apa pun pada aplikasi Anda, Anda harus membangunnya kembali .apkagar ditandatangani dengan benar.

Dave Webb
sumber
terima kasih, apakah ada tombol untuk secara otomatis membangun kembali manifes?
mtmurdock
Untuk cowok yang kesulitan dengan flutter, jalankan flutter cleandan jalankan / debug lagi! Operasi ini mirip dengan solusi di atas karena membersihkan folder build dan membangun kembali file build lagi saat dijalankan / debug!
Manoj Kumar
183

Saya menemukan bahwa kesalahan ini sekarang juga dapat terjadi ketika menggunakan konfigurasi penandatanganan yang salah. Seperti dijelaskan di sini , Android 7.0 memperkenalkan skema tanda tangan baru, V2 . Skema V2 menandatangani seluruh APK daripada hanya JAR, seperti yang dilakukan dalam skema V1. Jika Anda masuk dengan hanya V2, dan mencoba untuk menginstal pada target pra-7.0, Anda akan mendapatkan kesalahan ini karena JAR sendiri tidak ditandatangani dan PackageManager pra-7.0 tidak dapat mendeteksi keberadaan tanda tangan APK V2.

Agar kompatibel dengan semua sistem target, pastikan APK ditandatangani dengan kedua skema dengan mencentang kedua kotak versi tanda tangan di dialog Generate Signed APK Android Studio seperti yang ditunjukkan di sini:

masukkan deskripsi gambar di sini

Jika hanya 7,0 target yang diantisipasi, maka tidak perlu menyertakan tanda tangan V1.

Paul Ratazzi
sumber
5
Anda menghemat banyak waktu saya. Memutakhirkan Android Studio menyebabkan mimpi buruk masalah. Ini salah satunya. Saya ingin tahu apakah SO tidak lebih dari setengah dari Pengembangan Android akan mati. Android Studio tidak memberikan petunjuk tentang kesalahan.
Atul
4
Untungnya saya menguji apk rilis saya di perangkat lama sebelum saya meluncurkannya di Google Play. Itu akan menjadi bencana jika semua perangkat <Android 7.0 gagal menginstal versi baru. Benda dengan dua versi itu haruslah sebuah POP DIALOG POP MERAH BESAR ketika Anda mengklik untuk membuat rilis apk!
Kirill Karmazin
Terima kasih untuk ini. Akan menjadi gila mencari mengapa APK saya tidak akan berjalan di bawah Android 7, tapi itu hanya kotak centang sederhana. Sangat mengganggu.
japzone
54

Saya menemukan ini disebabkan oleh versi JDK saya.

Saya mengalami masalah ini dengan 'semut' dan itu karena HATI-HATI ini disebutkan dalam dokumentasi:

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

Perhatian: Pada JDK 7, algoritme penandatanganan default telah berubah, mengharuskan Anda untuk menentukan algoritme tanda tangan dan intisari (-sigalg dan -digestalg) saat Anda menandatangani APK.

Saya memiliki JDK 7. Dalam log Ant saya, saya menggunakan -v untuk verbose dan itu menunjukkan

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

Saya menandatangani JAR secara manual dan menandainya, tetapi memberikan kesalahan yang sedikit berbeda:

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

Saya menemukan jawaban itu di sini.

Cara menangani INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES tanpa penghapusan instalasi

Saya hanya perlu mencopotnya lalu berhasil!

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

Sekarang saya hanya perlu memodifikasi build.xml untuk menggunakan opsi itu ketika masuk!

Oke, ini dia: 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}" />
Chloe
sumber
3
JDK 7 juga masalah saya. Saya malas dan menghapus JDK 7 dan menginstal JDK 6, juga berfungsi ^^. Solusi hack lain tetapi kurang radikal bisa membiarkan keduanya diinstal tetapi mengatur JAVA_HOME ke JDK 6 dan menempatkan path bin JDK 6 pertama di PATH.
Ixx
1
JDK 8 memiliki masalah yang sama. Mengubah PATH ke JDK 6 berhasil. Terima kasih penyelamat!
Chris Xue
Terima kasih! Aplikasi pasar saya dikompilasi dengan JDK6. Ketika saya mengkompilasi aplikasi dengan rilis keystore menggunakan JDK7 dan mencoba menginstal, itu memberi saya masalah ini.
Sileria
28

Sebagian besar waktu solusi untuk kesalahan ini sangat sederhana:

  1. Copot pemasangan apk Anda
  2. Bersihkan proyek Android Anda
  3. Bangun proyek Android Anda
  4. Instal / jalankan apk Anda
JanCor
sumber
Saya melakukan 2,3,4 dan mendapatkan kesalahan yang sama. Apa yang Anda maksud dengan menghapus instalan apk Anda? Dari perangkat saya? Saya tidak berpikir itu pernah ada di perangkat saya.
Curtis
tiba-tiba saya mulai mendapatkan kesalahan ini dari ketiadaan, Tidak ada jika solusi tetapi hanya proyek pembersihan berhasil. Terima kasih.
pgcan
18

dipecahkan (untuk saya) menggunakan di keytool the args

-sigalg MD5withRSA -keyalg RSA -keysize 1024

dan menggunakan di jarsigner

-sigalg MD5withRSA -digestalg SHA1

solusi ditemukan di

Pitfal macam apa yang ada untuk penandatanganan APK Android?

Alejadro Xalabarder
sumber
Terima kasih, perbaiki masalah untuk saya juga (saya punya JDK 7).
Enrico Ros
Saya telah memperbaikinya dengan cara yang sama, karena saya menggunakan appcelerator titanium dan tidak memiliki akses ke skrip pembuatan apk. Perhatikan bahwa solusi ini memerlukan regenerasi (perubahan!) Dari kunci pribadi.
Federico
8

Saya juga menghadapi masalah yang sama. Pertama saya membuat build menggunakan V2 dan menginstalnya di perangkat seluler yang berjalan pada OS 5.1 dan saya mendapatkan masalah yang sama. Tapi build berfungsi dengan baik pada Tablet yang berjalan pada OS 7.0. Jadi saya membuat build dengan tanda tangan V1 Jar dan bekerja dengan baik pada kedua perangkat.

Kesimpulan: Jika Anda mendukung perangkat di bawah Android OS 7.0. Gunakan tanda tangan jar V1 untuk menghasilkan build.

Rajiv Ranjan
sumber
Tidak perlu memeriksa keduanya, Pilih V1 jika Anda mendukung OS 7.0 dan di bawah Periksa V2 jika Anda mendukung perangkat yang berjalan pada 7.0 dan di atas.
Rajiv Ranjan
7

Dalam kasus saya, saya bisa membangun dan menjalankan rilis build, tetapi mendapatkan INSTALL_PARSE_FAILED_NO_CERTIFICATESkesalahan ketika mencoba melakukan build debug.

Solusinya adalah menghapus debug.keystorefile saya dan membiarkan ADT membuatnya kembali. Tampaknya sudah kedaluwarsa.

Solusi jangka panjang yang lebih baik adalah secara eksplisit membuat debug.keystoreyang tidak berakhir setelah hanya satu tahun, daripada membiarkan ADT membuatnya. Inilah perintah untuk melakukan itu:

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

Saat diminta, masukkan nilai-nilai ini:

  • Nama depan dan belakang: Android Debug
  • Unit organisasi: Android
  • Nama organisasi: Tidak Dikenal
  • Kota atau Lokalitas: Tidak Diketahui
  • Negara Bagian atau Provinsi: Tidak Dikenal
  • Kode negara: AS
Kristopher Johnson
sumber
5

Ini adalah solusi yang jelek tapi cepat: gunakan JDK 6 bukannya 7.

Setelah membaca jawaban Chloe, saya menghapus JDK 7 saya (tidak memerlukannya saat ini) dan menginstal JDK 6. Itu memperbaikinya. Solusi yang lebih baik akan membuat semut menggunakan JDK 6 (tanpa menghapus instalasi 7). Mungkin mungkin mengubah / mengatur properti ini:

java.library.path

dalam file properti lokal. Itu ada di direktori proyek (root).

Bagaimanapun, Android tidak bekerja dengan JDK 7 (hanya 6 atau 5), jadi pastikan skrip semut juga menggunakan JDK 6 atau 5 mungkin merupakan solusi yang baik.

Ixx
sumber
5

Karena build dan current yang dihasilkan sebelumnya mengalami konflik dalam versi tanda tangan antara v1 (jar signature) dan v2 (tanda tangan APK lengkap),

Untuk memperbaiki centang versi tanda tangan yang tepat di bawah dialog Generate Signed APK

Pankaj kumar
sumber
5

Baru-baru ini saya mengalami kesalahan ini saat meningkatkan ke Android Studio 4.0. Penyebabnya adalah bahwa proyek memiliki Penandatanganan V2 Dinonaktifkan dalam konfigurasi penandatanganan di build.gradle.

Solusinya adalah menghapus v2SigningEnabled falseatau secara eksplisit mengaturnya true, yang merupakan nilai default.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}
mikehc
sumber
Saya menggunakan Android studio 4.0. Tapi Tidak ada yang namanya "v2SigningEnabled" di file build.gradle saya. Lalu apa yang harus saya lakukan?
Nuwan Harshakumara Piyarathna
3

Di Android Studio versi 3.2+ yang lebih baru, jika Anda mencoba menjalankan releaseinstalasi, dan Anda belum menentukan konfigurasi penandatanganan, itu akan menampilkan prompt kesalahan dan instalasi akan gagal. Yang perlu Anda lakukan adalah menjalankan debugbuild atau mengatur konfigurasi penandatanganan (V1 atau V2) dengan benar.

Rowland Mtetezi
sumber
3

sebagian besar jawaban benar. dan beberapa alasan lain yang terjadi adalah

► min sdk Anda lebih kecil dari sdk perangkat.
► Anda memiliki aplikasi yang lebih lama di perangkat Anda dengan nama paket yang sama

Emre Kilinc Arslan
sumber
Ini adalah pengalaman saya - SDK min dalam proyek saya lebih tinggi dari SDK perangkat. Itu terjadi karena saya "melewatkan" pilihan yang benar ketika saya membuat proyek di Android Studio dan secara tidak sengaja memilih versi yang lebih tinggi berikutnya sebagai SDK saya kemudian tablet lama saya berjalan.
GMc
membuat sama dengan min sdk dan perangkat saya memecahkan masalah saya.
Nuwan Harshakumara Piyarathna
2

Ini bisa terjadi jika Anda mencoba memasukkan .jarpustaka yang berisi AndroidManifest.xmlfile.

  • Jika itu murni Java, pastikan Anda tidak memasukkannya dalam ekspor .jar
  • Jika itu bukan Java murni (artinya ini proyek Android) maka Anda harus memasukkannya sebagai Proyek Perpustakaan
znat
sumber
2

Anda juga dapat memeriksa

Project Structure-> Default Config->Signing Config

setelah kamu menambahkan semua yang kamu butuhkan

Morozov
sumber
1

Pengaturan variabel lingkungan JAVA_HOMEke JDK 5 atau 6 (bukan JDK 7) memperbaiki kesalahan.

TN.
sumber
0

Setelah beberapa waktu dan beberapa utas online tentang subjek saya berhasil memperbaiki proyek saya.

Ini terutama mempertimbangkan file terakhir ( bisa berupa gambar atau tata letak ) yang Anda masukkan. Jika Anda menghapusnya, itu akan berhasil, dan Anda dapat membangun proyek Anda lagi.

Nelson R.
sumber
0

Saya mengalami kesalahan ini di Eclipse Console saya. Ternyata saya memiliki dua toples dengan konten yang sama tetapi nama yang berbeda dan mereka saling bertentangan. Saya baru saja menghapus salah satunya dan berhasil menginstal aplikasi pada perangkat.

joao2fast4u
sumber
0

Saya mendapatkan kesalahan ini karena saya melepaskan bahwa saya ant releasegagal karena saya kehabisan ruang disk.

Kriket Merah
sumber
0

Saya mendapatkan kesalahan ini ketika saya mencoba menginstal proyek Xamarin yang dibangun terhadap pratinjau Android N pada ponsel yang menjalankan api v23. Solusi adalah tidak melakukan itu.

James Moore
sumber
0

Cara lain untuk mendapatkan kesalahan ini adalah membangun menggunakan antpada macOS dan memiliki file ikon Finder ( Icon\r) di pohon sumber aplikasi. Tampaknya jarsignertidak dapat mengatasi carriage return dalam nama file dan, meskipun ia akan mengklaim penandatanganan itu valid jika Anda-verify APK, selalu menghasilkan APK yang tidak akan diinstal pada perangkat. Ironisnya, plugin Google Drive Finder adalah sumber yang bagus untuk file ikon Finder.

Solusinya adalah dengan mengecualikan file yang menyinggung (yang tidak berguna di APK pula) dengan specifier seperti ini di fileset:

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

Masalah ini akan terjadi jika Anda menginstal versi APK yang tidak ditandatangani. Periksa apakah Anda menginstal APK yang benar.

NeeK
sumber
0

Saya punya masalah dengan ionic / Visual Studio Code (Jalankan Android di perangkat):

Saya mencopot aplikasi pada perangkat seluler (Pengaturan / Aplikasi), kesalahan hilang dan aplikasi mulai.

Michael Maier
sumber
0

Ini melempar kesalahan ini untuk saya hari ini karena saya memiliki aplikasi dengan min SD dari 28 dan saya memukul bermain pada emulator dengan versi SDK 23. Biasanya ini tidak mungkin (AS abu-abu keluar tombol putar), tapi hari ini tidak begitu banyak.

Daniel Wilson
sumber
0

Pertama coba lakukan itu:

  • buka skrip Gradle → bulid.gradle (module: app) → lalu Anda harus mengubah nilai (minSdkVersion). Sebagai contoh, jika Anda menggunakan 26, Anda dapat mencoba mengurangi nilainya, seperti (minSdkVersion 20)
  • lalu coba (sinkronkan sekarang).
Insinyur Ahmed IT
sumber
0

Jika Anda menggunakan emulator maka coba setel ulang dan jika Anda di mobile pertama hapus instalan aplikasi kemudian matikan mode pengembang, dan kemudian aktifkan masalah yang akan dipecahkan.

Shashank Pandey
sumber