Cách ký một tập tin apk Android


111

Tôi đang cố gắng ký vào tệp apk của mình. Tôi không thể tìm ra cách để làm điều đó. Tôi không thể tìm thấy hướng dẫn chuyên sâu tốt. Tôi có rất ít kinh nghiệm lập trình, vì vậy mọi sự trợ giúp sẽ được đánh giá cao.



2
Bạn có thể tìm thấy một hướng dẫn tuyệt vời về vấn đề này ở đây tại androidcookers.co.cc/2012/06/...
Bratin

1
Tôi đã sử dụng hướng dẫn đầy đủ này từ việc tạo kho khóa của riêng mình đến xuất APK đã ký trong Eclipse. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Câu trả lời:


84

Hướng dẫn sử dụng đủ rõ ràng. Vui lòng chỉ rõ phần nào bạn gặp khó khăn sau khi hoàn thành, tôi khuyên bạn nên:

https://developer.android.com/studio/publish/app-signs.html

Được rồi, một tổng quan nhỏ không có tài liệu tham khảo hoặc nhật thực xung quanh, vì vậy hãy để lại một số khoảng trống cho lỗi, nhưng nó hoạt động như thế này

  • Mở dự án của bạn trong nhật thực
  • Nhấn chuột phải -> công cụ (công cụ android?) -> xuất ứng dụng đã ký (apk?)
  • Xem qua trình hướng dẫn:
  • Tạo một kho chìa khóa mới. nhớ mật khẩu đó
  • Ký ứng dụng của bạn
  • Lưu nó, v.v.

Ngoài ra, từ liên kết:

Biên dịch và ký bằng Eclipse ADT

Nếu bạn đang sử dụng Eclipse với plugin ADT, bạn có thể sử dụng Trình hướng dẫn Xuất để xuất .apk đã ký (và thậm chí tạo kho khóa mới, nếu cần). Trình hướng dẫn xuất thực hiện tất cả các tương tác với Keytool và Jarsigner cho bạn, cho phép bạn ký gói bằng GUI thay vì thực hiện các thủ tục thủ công để biên dịch, ký và căn chỉnh, như đã thảo luận ở trên. Sau khi trình hướng dẫn đã biên dịch và ký gói của bạn, nó cũng sẽ thực hiện căn chỉnh gói bằng căn chỉnh zip. Vì Trình hướng dẫn xuất sử dụng cả Keytool và Jarsigner, bạn nên đảm bảo rằng chúng có thể truy cập được trên máy tính của bạn, như được mô tả ở trên trong Cài đặt cơ bản để ký.

Để tạo .apk được ký và căn chỉnh trong Eclipse:

  1. Chọn dự án trong Trình khám phá gói và chọn Tệp> Xuất.
  2. Mở thư mục Android, chọn Xuất ứng dụng Android và nhấp vào Tiếp theo.

    Giờ đây, trình hướng dẫn Xuất ứng dụng Android sẽ bắt đầu, sẽ hướng dẫn bạn thực hiện quá trình ký ứng dụng của mình, bao gồm các bước chọn khóa riêng tư để ký .apk (hoặc tạo kho khóa mới và khóa riêng).

  3. Hoàn thành Trình hướng dẫn xuất và ứng dụng của bạn sẽ được biên dịch, ký, căn chỉnh và sẵn sàng để phân phối.

Tôi không hiểu làm thế nào để bắt đầu. Tôi đang sử dụng eclipse Version: Helios Service Release 1
Chriss

2
nhưng hãy đọc toàn bộ điều. có một số lời khuyên cuối cùng cho nhật thực quá
Nanne

1
trong quá trình tạo khóa, tôi cần nhập gì cho bí danh?
chriss

9
Bạn đã đọc hướng dẫn sử dụng? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.Nó chỉ là một bí danh. Một cái tên, nếu bạn muốn. tôi đề nghị "khóa đầu tiên" :-)
Nanne,

1
Xin lỗi, tôi vẫn chưa hiểu. Tôi sẽ sử dụng bí danh này như thế nào. Mục đích của nó là gì?
dùng462990

37

Dưới đây là hướng dẫn về cách ký APK theo cách thủ công. Nó bao gồm thông tin về cái mới được apk-signergiới thiệu vào build-tools 24.0.3 (10/2016)

Quy trình tự động:

Sử dụng công cụ này (sử dụng apksigner mới của Google):

https://github.com/patrickfav/uber-apk-signer

Tuyên bố từ chối trách nhiệm: Tôi là nhà phát triển :)

Quy trình thủ công:

Bước 1: Tạo Kho khóa (chỉ một lần)

Bạn cần tạo một kho khóa một lần và sử dụng nó để ký gói unsignedứng dụng của mình . Sử dụng cung cấp bởi JDK được tìm thấy trongkeytool %JAVA_HOME%/bin/

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

Bước 2 hoặc 4: Zipalign

zipalign là một công cụ được cung cấp bởi SDK Android, ví dụ như %ANDROID_HOME%/sdk/build-tools/24.0.2/là bước tối ưu hóa bắt buộc nếu bạn muốn tải apk lên Cửa hàng Play.

zipalign -p 4 my.apk my-aligned.apk

Lưu ý: khi sử dụng cái cũ jarsignerbạn cần zipalign SAU KHI ký. Khi sử dụng apksignerphương pháp mới, bạn thực hiện TRƯỚC KHI ký (khó hiểu, tôi biết). Gọi zipalign trước khi apksigner hoạt động tốt vì apksigner duy trì tính năng căn chỉnh và nén APK (không giống như jarigner).

Bạn có thể xác minh sự liên kết với

zipalign -c 4 my-aligned.apk

Bước 3: Ký & Xác minh

Sử dụng công cụ xây dựng 24.0.2 trở lên

Sử dụng jarsigner, như keytool, đi kèm với phân phối JDK được tìm thấy trong %JAVA_HOME%/bin/và sử dụng nó như vậy:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

và có thể được xác minh bằng

jarsigner -verify -verbose my_application.apk

Sử dụng công cụ xây dựng 24.0.3 và mới hơn

Android 7.0 giới thiệu APK Signature Scheme v2, một sơ đồ 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 chống lại các thay đổi trái phép đối với tệp APK (Xem tại đâytại đây để biết thêm chi tiết). Trước khi Google triển khai trình ký apk của riêng họ được gọi làapksigner (duh!) Tệp tập lệnh có thể được tìm thấy trong %ANDROID_HOME%/sdk/build-tools/24.0.3/(.jar nằm trong /libthư mục con). Sử dụng nó như thế này

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

và có thể được xác minh bằng

apksigner verify my-app.apk

Tài liệu chính thức có thể được tìm thấy ở đây.


10

Đối với người dùng IntelliJ IDEA hoặc Android Studio, hãy thực hiện các bước sau:
* Từ menu Build/Generate signed APK
* Bạn cần tạo đường dẫn kho khóa. Từ hộp thoại nhấp vào Create new. Bạn sẽ tạo một tệp jks bao gồm các khóa của bạn. Chọn thư mục, xác định mật khẩu. Vì vậy, kho khóa của bạn ok.
* Tạo khóa mới cho ứng dụng của bạn bằng cách sử dụng bí danh, mật khẩu khóa, tên của bạn, v.v.
* Nhấp vào tiếp theo.
* Từ hộp thoại, chọn Proguard hoặc không.

Tệp APK đã ký của bạn đã sẵn sàng.

Tệp trợ giúp: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html


8

Đừng lo lắng ...! Làm theo các bước dưới đây và bạn sẽ nhận được tệp .apk đã ký của mình. Tôi cũng lo lắng về điều đó, nhưng bước đi này giúp tôi thoát khỏi sự thất vọng. Các bước để ký đơn đăng ký của bạn:

  1. Xuất gói hàng chưa ký:

Nhấp chuột phải vào dự án trong Eclipse -> Công cụ Android -> Xuất Gói ứng dụng chưa được ký (giống như ở đây chúng tôi xuất GoogleDriveApp.apk của mình sang Máy tính để bàn)

Ký đơn đăng ký bằng cách sử dụng kho khóa của bạn và công cụ đánh dấu (làm theo các bước bên dưới):

Mở cmd -> thay đổi thư mục nơi "jarigner.exe" của bạn tồn tại (như ở đây trong hệ thống của tôi, nó tồn tại tại "C: \ Program Files \ Java \ jdk1.6.0_17 \ bin"

Bây giờ nhập lệnh belwo trong cmd:

jarigner -verbose -keystore c: \ users \ android \ debug.keystore c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk my_keystore_alias

Nó sẽ yêu cầu bạn cung cấp mật khẩu: Nhập Mật khẩu cho kho khóa: Nó sẽ ký apk của bạn. Để xác minh rằng việc ký kết thành công, bạn có thể chạy:

jarigner -verify c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk

Nó sẽ trở lại với: jar được xác minh.

Phương pháp 2

Nếu bạn đang sử dụng eclipse với ADT, thì thật đơn giản để biên dịch, ký, căn chỉnh và sẵn sàng tệp để phân phối. Những gì bạn phải làm chỉ cần làm theo các bước sau.

  • Tệp> Xuất.
  • Xuất ứng dụng android
  • Duyệt -> chọn dự án của bạn
  • Tiếp theo -> Tiếp theo

Các bước này sẽ được biên soạn, ký tên và căn chỉnh zip dự án của bạn và bây giờ bạn đã sẵn sàng để phân phối dự án của mình hoặc tải lên tại cửa hàng Google Play.


Đó chính xác là những gì tôi cần, đó là sử dụng một công cụ xây dựng trực tuyến mới và phải sử dụng kho khóa trước đó của tôi, không phải kho khóa mới được tạo của chúng. Chỉ có điều tôi đã mất tích là ZIP sắp xếp các gói ứng dụng, vì vậy nếu ai có cùng một vấn đề, hãy vào đây stackoverflow.com/a/22682132/826194
Larzan

5

Quy trình ký APK

Để ký thủ công tệp APK Android, hãy chạy ba lệnh sau:

  1. Tạo tệp Kho khóa

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. Ký tệp APK của bạn bằng jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. Căn chỉnh APK đã ký bằng công cụ zipalign

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

BƯỚC 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keyize 2048 -validity 10000

Thí dụ:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

mật khẩu kho khóa: mật khẩu khóa yourApp @ 123 : yourApp @ 123

CMD O / P

D:\ru\SignedBuilds\MySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

BƯỚC 2


Sign your app with your private keystore using jarsigner

bình chứa -verbose -sigalg SHA1withRSA -digestalg SHA1-keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

Thí dụ

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate's expiration date (2044-02-07) or after an
y future revocation date.

D:\ru\SignedBuilds\MySignedApp>

Verify that your APK is signed

jarigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

Thí dụ

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:\ru\SignedBuilds\MySignedApp>

BƯỚC 3


Căn chỉnh gói APK cuối cùng bằng cách sử dụng zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Thí dụ

zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

Thí dụ

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Ghi chú:

Lệnh xác minh chỉ để kiểm tra xem APK có được tạo và ký chính xác hay không!

Người giới thiệu

Tôi hy vọng điều này sẽ giúp một người và tất cả :)


2

Tôi gặp sự cố này và đã được giải quyết bằng cách kiểm tra phiên bản min sdk trong tệp kê khai. Nó được đặt thành 15 (ICS), nhưng điện thoại của tôi đang chạy 10 (Gingerbread)

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.