Sự khác biệt giữa các phiên bản chữ ký - V1 (Chữ ký Jar) và V2 (Chữ ký APK đầy đủ) trong khi tạo APK có chữ ký trong Android Studio?


234

Vui lòng chọn ít nhất một trong các phiên bản chữ ký để sử dụng trong Android Studio 2.3

Bây giờ trong khi tạo APK có chữ ký trong Android Studio, nó hiển thị hai tùy chọn (CheckBox) là 1. V1 (Jar Signature)và 2. V2 (Full APK Signature)Phiên bản chữ ký trong bước cuối cùng của quy trình tạo APK đã ký.

** Phiên bản chữ ký ** tùy chọn

Vậy, sự khác biệt giữa V1 (Chữ ký Jar)V2 (Chữ ký APK đầy đủ) trong bản cập nhật Android Studio mới là gì?

Và tôi nên sử dụng (hoặc cả hai) để ký apk để phát hành cửa hàng chơi?

Ngoài ra, tôi đang gặp lỗi Cài đặt Parse Không có Chứng chỉ khi cài đặt APK khi tôi sử dụng tùy chọn thứ hai.

Câu trả lời:


219

Đây là một cơ chế ký mới được giới thiệu trong Android 7.0, với các tính năng bổ sung được thiết kế để làm cho chữ ký APK an toàn hơn.

Nó không bắt buộc. Bạn nên kiểm tra cả hai hộp kiểm đó nếu có thể, nhưng nếu cơ chế ký V2 mới gây ra sự cố, bạn có thể bỏ qua nó.

Vì vậy, bạn chỉ có thể bỏ chọn V2 nếu bạn gặp sự cố, nhưng nên kiểm tra nếu có thể.


Mặc dù vậy, bạn nên đọc lại câu hỏi của mình, có vẻ như bạn thậm chí chưa đọc tài liệu được liên kết ... thật hữu ích khi biết bạn có thể bỏ chọn dấu kiểm đó. Có lẽ nếu bạn thêm "thông báo lỗi và sự cố bạn gặp phải), thì câu hỏi này sẽ trở nên có giá trị hơn cho tương lai
Booger

Tôi đã tải lên ứng dụng bằng ứng dụng đã ký bằng cách sử dụng V1 và V2. Sau đó, tôi tải xuống ứng dụng từ google play và chạy cùng một phiên bản từ Android Studio, nó hiển thị cho tôi hộp thoại "Cài đặt không thành công vì thiết bị có một ứng dụng có cùng gói nhưng có chữ ký khác .." Đang làm sai cần cập nhật build.gradle?
Usman Afzal

@UsmanAfzal, đó là hành vi được mong đợi kể từ khi bạn ký ứng dụng trên playstore với bản phát hành và bây giờ bạn muốn gỡ lỗi hoặc chạy nó thông qua Android Studio với gỡ lỗi. Lưu ý rằng bản phát hành và gỡ lỗi là chữ ký khác nhau
Parama Dharmika

44

Tôi có nên sử dụng (hoặc cả hai) để ký apk để phát hành cửa hàng play? Một câu trả lời là .

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

Trong Android 7.0, APK có thể được xác minh theo Sơ đồ chữ ký APK v2 (lược đồ v2) hoặc ký JAR (lược đồ v1). Các nền tảng cũ hơn bỏ qua chữ ký v2 và chỉ xác minh chữ ký v1.

Tôi đã cố gắng tạo bản dựng bằng cách kiểm tra tùy chọn V2 (Chữ ký Apk đầy đủ) . Sau đó, khi tôi cố gắng cài đặt bản phát hành trong thiết bị bên dưới 7.0 và tôi không thể cài đặt bản dựng trong thiết bị.

Sau đó, tôi đã cố gắng xây dựng bằng cách chọn cả hai hộp kiểm phiên bản và tạo bản phát hành. Sau đó có thể cài đặt bản dựng.


24

Nó được viết ở đây rằng "Theo mặc định, Android Studio 2.2 và Plugin Android cho Gradle 2.2 ký ứng dụng của bạn bằng cả APK Signature Scheme v2 và lược đồ ký truyền thống, sử dụng ký JAR."

Vì dường như các hộp kiểm mới này đã xuất hiện với Android 2.3, tôi hiểu rằng các phiên bản Android Studio trước đây của tôi (ít nhất là 2.2) đã ký với cả hai chữ ký. Vì vậy, để tiếp tục như tôi đã làm trước đây, tôi nghĩ rằng tốt hơn là kiểm tra cả hai hộp kiểm.

EDIT ngày 31 tháng 3 năm 2017: đã gửi một số ứng dụng có cả chữ ký => không có vấn đề gì :)


7

Tôi nghĩ rằng điều này đại diện cho một câu trả lời tốt.

Xác minh APK Chữ ký v2

  1. Xác định vị trí APK Signing Blockvà xác minh rằng:
    1. Hai trường kích thước APK Signing Blockchứa cùng một giá trị.
    2. ZIP Central Directoryngay lập tức theo sau bởi ZIP End of Central Directoryhồ sơ.
    3. ZIP End of Central Directory không được theo sau bởi nhiều dữ liệu hơn.
  2. Xác định vị trí đầu tiên APK Signature Scheme v2 Blockbên trong APK Signing Block. Nếu Khối v2 nếu có, hãy chuyển sang bước 3. Mặt khác, quay lại xác minh APK bằng sơ đồ v1.
  3. Đối với mỗi người ký trong APK Signature Scheme v2 Block:
    1. Chọn ID thuật toán chữ ký được hỗ trợ mạnh nhất từ ​​chữ ký. Thứ tự sức mạnh tùy thuộc vào từng phiên bản triển khai / nền tảng.
    2. Xác nhận chữ ký tương ứng từ chữ ký đối với dữ liệu đã ký bằng khóa chung. (Bây giờ an toàn để phân tích dữ liệu đã ký.)
    3. Xác minh rằng danh sách ID thuật toán chữ ký được sắp xếp theo thứ tự và chữ ký là giống hệt nhau. (Điều này là để ngăn chặn tước / bổ sung chữ ký.)
    4. Tính toán tiêu hóa nội dung APK bằng thuật toán digest giống như thuật toán digest được sử dụng bởi thuật toán chữ ký.
    5. Xác minh rằng các tiêu hóa được tính toán giống hệt với các thông báo tương ứng từ các thông báo.
    6. Xác nhận rằng SubjectPublicKeyInfochứng chỉ đầu tiên của chứng chỉ giống hệt với khóa chung.
  4. Xác minh thành công nếu ít nhất một người ký được tìm thấy và bước 3 đã thành công cho mỗi người ký được tìm thấy.

Lưu ý: Không được xác minh APK bằng cách sử dụng lược đồ v1 nếu xảy ra lỗi ở bước 3 hoặc 4.

Xác minh APK có chữ ký của JAR (lược đồ v1)

APK có chữ ký JAR là JAR được ký tiêu chuẩn, phải chứa chính xác các mục được liệt kê trong đó META-INF/MANIFEST.MFvà tất cả các mục phải được ký bởi cùng một bộ người ký. Tính toàn vẹn của nó được xác minh như sau:

  1. Mỗi người ký được đại diện bởi một mục META-INF/<signer>.SFMETA-INF/<signer>.(RSA|DSA|EC)JAR.
  2. <signer>.(RSA|DSA|EC)là một PKCS #7 CMS ContentInfocấu trúc với SignedData có chữ ký được xác minh qua <signer>.SFtệp.
  3. <signer>.SFtập tin chứa toàn bộ tập tin và các bản tóm tắt META-INF/MANIFEST.MFcủa từng phần của META-INF/MANIFEST.MF. Bản tóm tắt toàn bộ tệp MANIFEST.MFđược xác minh. Nếu thất bại, MANIFEST.MFthay vào đó , thông báo của từng phần được xác minh.
  4. META-INF/MANIFEST.MFchứa, đối với mỗi mục JAR được bảo vệ toàn vẹn, một phần được đặt tên tương ứng có chứa phần tóm tắt nội dung không nén của mục nhập. Tất cả các tiêu hóa được xác minh.
  5. Xác minh APK không thành công nếu APK chứa các mục JAR không được liệt kê trong MANIFEST.MFvà không phải là một phần của chữ ký JAR. Do đó, chuỗi bảo vệ là <signer>.(RSA|DSA|EC)<signer>.SFMANIFEST.MF→ nội dung của từng mục JAR được bảo vệ toàn vẹn.

trong đó ghi "Lưu ý: Không được xác minh APK bằng cách sử dụng lược đồ v1 nếu xảy ra lỗi ở bước 3 hoặc 4", bước 3 hoặc 4 trong sơ đồ 2 hoặc sơ đồ 1? ngoài ra nếu một lỗi xảy ra ở bước 3 hoặc 4 trong v2 và sau đó nói rằng nó không thể được xác minh bằng lược đồ v1 thì nó sẽ không được xác minh trong v1 hoặc v2, làm thế nào để xác minh?
isJulian00

7

Theo liên kết này: chữ ký trợ giúp

Đề án Chữ ký APK v2 cung cấp:

  1. Thời gian cài đặt ứng dụng nhanh hơn
  2. Bảo vệ nhiều hơn chống lại sự thay đổi trái phép đối với các tệp APK.

Android 7.0 giới thiệu APK Signature Scheme v2, một chương trình ký ứng dụng mới cung cấp thời gian cài đặt ứng dụng nhanh hơn và bảo vệ nhiều hơn trước những thay đổi trái phép đối với các tệp APK. Theo mặc định, Android Studio 2.2 và Plugin Android cho Gradle 2.2 ký ứng dụng của bạn bằng cả APK Signature Scheme v2 và sơ đồ ký truyền thống, sử dụng ký JAR.

Bạn nên sử dụng APK Signature Scheme v2 nhưng không bắt buộc .

Mặc dù chúng tôi khuyên bạn nên áp dụng APK Signature Scheme v2 cho ứng dụng của mình, nhưng chương trình mới này không bắt buộc. Nếu ứng dụng của bạn không được xây dựng chính xác khi sử dụng APK Signature Scheme v2, bạn có thể tắt chương trình mới.


Xin chào @Shirish, chúng ta có thể tạo bản dựng v2 từ nhật thực không?
Arjun T Raj
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.