Perbedaan antara versi tanda tangan - V1 (Jar Signature) dan V2 (Tanda Tangan APK Lengkap) saat membuat APK yang ditandatangani di Android Studio?

234

Silakan pilih setidaknya salah satu versi tanda tangan untuk digunakan di Android Studio 2.3

Sekarang saat membuat APK yang ditandatangani di Android Studio, itu menunjukkan dua opsi (Kotak centang) yaitu 1. V1 (Jar Signature)dan 2. V2 (Full APK Signature)sebagai Versi Tanda Tangan pada langkah terakhir dari proses pembuatan APK yang ditandatangani.

** Versi Tanda Tangan ** opsi

Jadi, apa perbedaan antara V1 (Jar Signature) dan V2 (Full APK Signature) dalam pembaruan Android Studio yang baru?

Dan mana yang harus saya gunakan (atau keduanya) untuk menandatangani apk untuk rilis play store?

Juga, saya mendapatkan kesalahan Instal Parse Gagal Tidak Ada Sertifikat saat menginstal APK ketika saya menggunakan opsi kedua.

Shirish Herwade
sumber

Jawaban:

219

Ini adalah mekanisme penandatanganan baru yang diperkenalkan di Android 7.0, dengan fitur tambahan yang dirancang untuk membuat tanda tangan APK lebih aman.

Itu tidak wajib. Anda harus memeriksa KEDUA dari kotak centang itu jika memungkinkan, tetapi jika mekanisme penandatanganan V2 baru memberi Anda masalah, Anda dapat menghilangkannya.

Jadi Anda bisa membiarkan V2 tidak dicentang jika Anda mengalami masalah, tetapi harus memeriksanya jika memungkinkan.

Booger
sumber
Anda harus menuliskan kembali pertanyaan Anda, sepertinya Anda bahkan belum membaca dokumentasi yang ditautkan ... penting untuk mengetahui bahwa Anda dapat membiarkan tanda centang itu tidak dicentang. Mungkin jika Anda menambahkan "pesan kesalahan dan masalah yang Anda temui), maka pertanyaan ini akan menjadi lebih berharga untuk masa depan
Booger
Saya telah mengunggah aplikasi dengan aplikasi yang ditandatangani menggunakan V1 dan V2. Setelah itu saya mengunduh aplikasi dari google play dan menjalankan versi yang sama dari Android Studio itu menunjukkan kepada saya dialog "Instalasi gagal karena perangkat memiliki aplikasi dengan paket yang sama tetapi tanda tangan yang berbeda ..." Dapatkah Anda menyarankan saya apa yang saya yang saya lakukan salah perlu memperbarui build.gradle?
Usman Afzal
@UsmanAfzal, itu adalah perilaku yang diharapkan karena Anda menandatangani aplikasi di playstore dengan rilis, dan sekarang Anda ingin men-debug atau menjalankannya melalui Android Studio dengan debug. Perhatikan bahwa rilis dan debug adalah tanda tangan yang berbeda
Parama Dharmika
44

Haruskah saya menggunakan (atau keduanya) untuk menandatangani apk untuk rilis play store? Jawabannya adalah YA .

Sesuai https://source.android.com/security/apksigning/v2.html#verification :

Di Android 7.0, APK dapat diverifikasi sesuai dengan APK Signature Scheme v2 (skema v2) atau penandatanganan JAR (skema v1). Platform lama mengabaikan tanda tangan v2 dan hanya memverifikasi tanda tangan v1.

Saya mencoba menghasilkan build dengan memeriksa opsi V2 (Full Apk Signature) . Kemudian ketika saya mencoba menginstal rilis build di bawah perangkat 7.0 dan saya tidak dapat menginstal build di perangkat.

Setelah itu saya mencoba membangun dengan memeriksa kotak centang kedua versi dan menghasilkan rilis rilis. Kemudian bisa menginstal build.

pRaNaY
sumber
24

Di sini tertulis bahwa "Secara default, Android Studio 2.2 dan Android Plugin for Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan skema penandatanganan tradisional, yang menggunakan penandatanganan JAR."

Sepertinya kotak centang baru ini muncul dengan Android 2.3, saya mengerti bahwa versi Android Studio saya sebelumnya (setidaknya 2.2) memang masuk dengan kedua tanda tangan. Jadi, untuk melanjutkan seperti yang saya lakukan sebelumnya, saya pikir lebih baik untuk memeriksa kedua kotak centang.

EDIT 31 Maret 2017: mengirimkan beberapa aplikasi dengan kedua tanda tangan => tidak ada masalah :)

Regis_AG
sumber
7

Saya pikir ini merupakan jawaban yang bagus.

Verifikasi Tanda Tangan APK v2

  1. Temukan APK Signing Blockdan verifikasi bahwa:
    1. Dua bidang ukuran APK Signing Blockberisi nilai yang sama.
    2. ZIP Central Directorysegera diikuti oleh ZIP End of Central Directorycatatan.
    3. ZIP End of Central Directory tidak diikuti oleh lebih banyak data.
  2. Temukan yang pertama APK Signature Scheme v2 Blockdi dalam APK Signing Block. Jika Blok v2 jika ada, lanjutkan ke langkah 3. Jika tidak, kembali untuk memverifikasi APK menggunakan skema v1.
  3. Untuk setiap penanda tangan di APK Signature Scheme v2 Block:
    1. Pilih ID algoritme tanda tangan terkuat yang didukung dari tanda tangan. Kekuatan pemesanan hingga setiap versi implementasi / platform.
    2. Verifikasi tanda tangan yang sesuai dari tanda tangan terhadap data yang ditandatangani menggunakan kunci publik. (Sekarang aman untuk mem-parsing data yang ditandatangani.)
    3. Verifikasi bahwa daftar ID algoritme tanda tangan yang diurutkan dalam intisari dan tanda tangan identik. (Ini untuk mencegah pengupasan / penambahan tanda tangan.)
    4. Hitung intisari isi APK menggunakan algoritme intisari yang sama dengan algoritme intisari yang digunakan oleh algoritme tanda tangan.
    5. Verifikasi bahwa digest yang dihitung identik dengan digest yang sesuai dari digest.
    6. Pastikan SubjectPublicKeyInfosertifikat sertifikat pertama identik dengan kunci publik.
  4. Verifikasi berhasil jika setidaknya satu penanda tangan ditemukan dan langkah 3 berhasil untuk setiap penanda tangan yang ditemukan.

Catatan: APK tidak boleh diverifikasi menggunakan skema v1 jika kegagalan terjadi pada langkah 3 atau 4.

Verifikasi APK yang ditandatangani oleh JAR (skema v1)

APK bertanda JAR adalah JAR bertanda standar, yang harus berisi persis entri yang terdaftar META-INF/MANIFEST.MFdan di mana semua entri harus ditandatangani oleh set penanda yang sama. Integritasnya diverifikasi sebagai berikut:

  1. Setiap penandatangan diwakili oleh entri META-INF/<signer>.SFdan META-INF/<signer>.(RSA|DSA|EC)JAR.
  2. <signer>.(RSA|DSA|EC)adalah PKCS #7 CMS ContentInfodengan struktur SignedData yang tanda tangannya diverifikasi atas <signer>.SFfile.
  3. <signer>.SFfile berisi seluruh file intisari META-INF/MANIFEST.MFdan intisari setiap bagian META-INF/MANIFEST.MF. Integrasi seluruh file MANIFEST.MFdiverifikasi. Jika gagal, intisari setiap MANIFEST.MFbagian akan diverifikasi.
  4. META-INF/MANIFEST.MFberisi, untuk setiap entri JAR yang dilindungi integritas, bagian yang diberi nama yang berisi intisari konten terkompresi entri tersebut. Semua pencernaan ini diverifikasi.
  5. Verifikasi APK gagal jika APK berisi entri JAR yang tidak tercantum dalam MANIFEST.MFdan bukan bagian dari tanda tangan JAR. Rantai perlindungan dengan demikian <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ isi dari setiap entri JAR yang dilindungi integritas.
zonda
sumber
di mana tertulis "Catatan: APK tidak boleh diverifikasi menggunakan skema v1 jika kegagalan terjadi pada langkah 3 atau 4", langkah 3 atau 4 dalam Skema 2 atau skema 1? juga jika kegagalan terjadi pada langkah 3 atau 4 di v2 dan kemudian mengatakan bahwa itu tidak dapat diverifikasi menggunakan skema v1 maka itu tidak akan diverifikasi di v1 atau v2 bagaimana itu akan diverifikasi?
isJulian00
7

Menurut tautan ini: bantuan tanda tangan

APK Signature Scheme v2 menawarkan:

  1. Waktu pemasangan aplikasi lebih cepat
  2. Lebih banyak perlindungan terhadap perubahan yang tidak sah pada file APK.

Android 7.0 memperkenalkan APK Signature Scheme v2, skema penandatanganan aplikasi baru yang menawarkan waktu pemasangan aplikasi lebih cepat dan lebih banyak perlindungan terhadap perubahan tidak sah pada file APK. Secara default, Android Studio 2.2 dan Android Plugin for Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan skema penandatanganan tradisional, yang menggunakan penandatanganan JAR.

Hal ini dianjurkan untuk menggunakan APK Signature Scheme v2 tetapi tidak wajib .

Meskipun kami sarankan menerapkan APK Signature Scheme v2 ke aplikasi Anda, skema baru ini tidak wajib. Jika aplikasi Anda tidak membangun dengan benar saat menggunakan APK Signature Scheme v2, Anda dapat menonaktifkan skema baru.

Shirish Herwade
sumber
Hai @ Shirish, bisakah kita membuat v2 build dari eclipse?
Arjun T Raj