วิธีลงนามไฟล์ android apk


112

ฉันพยายามเซ็นชื่อไฟล์ apk ฉันคิดไม่ออกว่าจะทำอย่างไร ฉันไม่พบทิศทางเชิงลึกที่ดี ฉันมีประสบการณ์ในการเขียนโปรแกรมน้อยมากดังนั้นจะขอขอบคุณความช่วยเหลือใด ๆ


2
ตรวจสอบสิ่งนี้: วิธีลงนาม apk โครงการ Android
droid kid

2
คุณสามารถดูบทแนะนำดีๆเกี่ยวกับเรื่องนี้ได้ที่androidcookers.co.cc/2012/06/…
Bratin

1
ฉันใช้บทช่วยสอนที่สมบูรณ์นี้ตั้งแต่การสร้างที่เก็บคีย์ของฉันเองไปจนถึงการส่งออก APK ที่ลงชื่อใน Eclipse mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

คำตอบ:


84

คู่มือมีความชัดเจนเพียงพอ โปรดระบุสิ่งที่คุณติดขัดหลังจากที่คุณทำงานผ่านฉันขอแนะนำ:

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

เอาล่ะภาพรวมเล็ก ๆ ที่ไม่มีการอ้างอิงหรือเกิดคราสรอบ ๆ ดังนั้นควรเว้นที่ว่างไว้สำหรับข้อผิดพลาด แต่ก็ใช้ได้เช่นนี้

  • เปิดโปรเจ็กต์ของคุณใน eclipse
  • กดเมาส์ขวา -> เครื่องมือ (เครื่องมือ Android?) -> ส่งออกแอปพลิเคชันที่ลงนาม (apk?)
  • ผ่านตัวช่วยสร้าง:
  • สร้างที่เก็บคีย์ใหม่ จำรหัสผ่านนั้น
  • ลงนามแอปของคุณ
  • บันทึกเป็นต้น

นอกจากนี้จากลิงค์:

คอมไพล์และลงนามด้วย Eclipse ADT

หากคุณกำลังใช้ Eclipse กับปลั๊กอิน ADT คุณสามารถใช้ตัวช่วยสร้างการส่งออกเพื่อเอ็กซ์พอร์ต. apk ที่ลงชื่อ (และสร้างที่เก็บคีย์ใหม่ได้หากจำเป็น) ตัวช่วยสร้างการส่งออกจะดำเนินการโต้ตอบทั้งหมดกับ Keytool และ Jarsigner ให้กับคุณซึ่งช่วยให้คุณสามารถเซ็นชื่อแพ็กเกจโดยใช้ GUI แทนการดำเนินการตามขั้นตอนด้วยตนเองเพื่อรวบรวมลงนามและจัดแนวตามที่กล่าวไว้ข้างต้น เมื่อวิซาร์ดรวบรวมและลงนามแพ็กเกจของคุณแล้วมันจะดำเนินการจัดตำแหน่งแพ็คเกจด้วย zip align เนื่องจากตัวช่วยสร้างการส่งออกใช้ทั้ง Keytool และ Jarsigner คุณควรตรวจสอบให้แน่ใจว่าสามารถเข้าถึงได้บนคอมพิวเตอร์ของคุณตามที่อธิบายไว้ข้างต้นในการตั้งค่าพื้นฐานสำหรับการลงนาม

ในการสร้าง. apk ที่เซ็นชื่อและจัดแนวใน Eclipse:

  1. เลือกโครงการใน Package Explorer และเลือกไฟล์> ส่งออก
  2. เปิดโฟลเดอร์ Android เลือกส่งออกแอปพลิเคชัน Android แล้วคลิกถัดไป

    ขณะนี้ตัวช่วยสร้างการส่งออกแอปพลิเคชัน Android เริ่มต้นขึ้นซึ่งจะแนะนำคุณตลอดขั้นตอนการลงนามแอปพลิเคชันของคุณรวมถึงขั้นตอนในการเลือกคีย์ส่วนตัวที่จะลงนามใน. apk (หรือการสร้างที่เก็บคีย์และคีย์ส่วนตัวใหม่)

  3. กรอกตัวช่วยสร้างการส่งออกและแอปพลิเคชันของคุณจะถูกคอมไพล์ลงนามจัดแนวและพร้อมสำหรับการแจกจ่าย

ฉันไม่เข้าใจวิธีเริ่มต้น ฉันใช้ eclipse Version: Helios Service Release 1
chriss

2
แต่โปรดอ่านสิ่งทั้งหมด มีเคล็ดลับในตอนท้ายสำหรับคราสด้วย
แน

1
ในการสร้างคีย์ฉันต้องป้อนอะไรให้กับนามแฝง?
chriss

9
คุณอ่านคู่มือหรือไม่? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.มันเป็นเพียงนามแฝง ชื่อถ้าคุณต้องการ ฉันขอแนะนำ "คีย์แรก" :-)
แน

1
ขออภัยฉันยังไม่เข้าใจ ฉันจะใช้นามแฝงนี้อย่างไร จุดประสงค์คืออะไร?
user462990

37

นี่คือคำแนะนำเกี่ยวกับวิธีลงนาม APK ด้วยตนเอง รวมถึงข้อมูลเกี่ยวกับการapk-signerเปิดตัวใหม่ในbuild-tools 24.0.3 (10/2016)

กระบวนการอัตโนมัติ:

ใช้เครื่องมือนี้ (ใช้ apksigner ใหม่จาก Google):

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

คำเตือน: ฉันเป็นผู้พัฒนา :)

กระบวนการด้วยตนเอง:

ขั้นตอนที่ 1: สร้าง Keystore (เพียงครั้งเดียว)

คุณต้องสร้างที่เก็บคีย์หนึ่งครั้งและใช้เพื่อลงนามunsignedapk ของคุณ ใช้สิ่งที่จัดเตรียมโดย JDK ที่พบในkeytool %JAVA_HOME%/bin/

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

ขั้นตอนที่ 2 หรือ 4: Zipalign

zipalign ซึ่งเป็นเครื่องมือที่จัดเตรียมโดย Android SDK ที่พบเช่น%ANDROID_HOME%/sdk/build-tools/24.0.2/เป็นขั้นตอนการเพิ่มประสิทธิภาพที่จำเป็นหากคุณต้องการอัปโหลด apk ไปยัง Play Store

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

หมายเหตุ:เมื่อใช้แบบเก่าjarsignerคุณจำเป็นต้อง zipalign หลังจากเซ็นชื่อ เมื่อใช้apksignerวิธีการใหม่ที่คุณทำก่อนเซ็นชื่อ (ฉันรู้ว่าสับสน) การเรียกใช้ zipalign ก่อน apksigner จะทำงานได้ดีเนื่องจาก apksigner รักษาการจัดแนวและการบีบอัด APK ไว้ (ไม่เหมือนกับ jarsigner)

คุณสามารถตรวจสอบการจัดตำแหน่งด้วย

zipalign -c 4 my-aligned.apk

ขั้นตอนที่ 3: ลงชื่อและยืนยัน

ใช้ build-tools 24.0.2 และเก่ากว่า

ใช้jarsignerซึ่งเช่นเดียวกับเครื่องมือที่มาพร้อมกับการกระจาย JDK ที่พบ %JAVA_HOME%/bin/และใช้ในลักษณะนี้:

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

และสามารถตรวจสอบได้ด้วย

jarsigner -verify -verbose my_application.apk

ใช้ build-tools 24.0.3 และใหม่กว่า

Android 7.0 แนะนำ APK Signature Scheme v2 ซึ่งเป็นรูปแบบการลงนามแอปใหม่ที่ให้เวลาในการติดตั้งแอปเร็วขึ้นและการป้องกันที่มากขึ้นจากการแก้ไขไฟล์ APK โดยไม่ได้รับอนุญาต (ดูรายละเอียดเพิ่มเติมที่นี่และที่นี่ ) Threfore Google ติดตั้งผู้ลงนาม apk ของตัวเองที่เรียกว่าapksigner (duh!) ไฟล์สคริปต์สามารถพบได้ใน%ANDROID_HOME%/sdk/build-tools/24.0.3/(. jar อยู่ใน/libโฟลเดอร์ย่อย) ใช้แบบนี้ครับ

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

และสามารถตรวจสอบได้ด้วย

apksigner verify my-app.apk

ดูเอกสารอย่างเป็นทางการได้ที่นี่


10

สำหรับผู้ใช้ IntelliJ IDEA หรือ Android Studio ให้ทำขั้นตอนเหล่านี้:
* จากเมนูBuild/Generate signed APK
* คุณต้องสร้างเส้นทางที่เก็บคีย์ Create newจากการคลิกโต้ตอบ คุณจะสร้างไฟล์ jks ที่มีคีย์ของคุณ เลือกโฟลเดอร์กำหนดรหัสผ่าน ที่เก็บคีย์ของคุณก็โอเค
* สร้างคีย์ใหม่สำหรับแอปพลิเคชันของคุณโดยใช้นามแฝงรหัสผ่านคีย์ชื่อของคุณ ฯลฯ
* คลิกถัดไป
* จากกล่องโต้ตอบให้เลือกProguardหรือไม่

ไฟล์ APK ที่ลงชื่อของคุณพร้อมแล้ว

ไฟล์ช่วยเหลือ: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html


8

ไม่ต้องห่วง ... ! ทำตามขั้นตอนด้านล่างนี้และคุณจะได้รับไฟล์. apk ที่ลงชื่อ ฉันก็กังวลเช่นกัน แต่ขั้นตอนเหล่านี้ทำให้ฉันหลุดพ้นจากความหงุดหงิด ขั้นตอนในการลงนามใบสมัครของคุณ:

  1. ส่งออกแพ็คเกจที่ไม่ได้ลงนาม:

คลิกขวาที่โครงการใน Eclipse -> Android Tools -> Export Unsigned Application Package (เช่นที่นี่เราส่งออก GoogleDriveApp.apk ไปยังเดสก์ท็อป)

ลงนามแอปพลิเคชันโดยใช้ที่เก็บคีย์และเครื่องมือ jarsigner (ทำตามขั้นตอนด้านล่าง):

เปิด cmd -> เปลี่ยนไดเร็กทอรีที่ "jarsigner.exe" ของคุณมีอยู่ (เช่นที่นี่ในระบบของฉันมีอยู่ที่ "C: \ Program Files \ Java \ jdk1.6.0_17 \ bin"

ตอนนี้ป้อนคำสั่ง belwo ใน cmd:

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

ระบบจะขอให้คุณระบุรหัสผ่านของคุณ: ป้อนข้อความรหัสผ่านสำหรับที่เก็บคีย์: มันจะลงชื่อ apk ของคุณ ในการตรวจสอบว่าการลงนามสำเร็จคุณสามารถเรียกใช้:

jarsigner - ยืนยัน c: \ users \ pir fahim \ Desktops \ GoogleDriveApp.apk

มันควรจะกลับมาพร้อมกับ: jar ตรวจสอบแล้ว

วิธีที่ 2

หากคุณใช้ eclipse กับ ADT การคอมไพล์ลงนามจัดแนวและเตรียมไฟล์สำหรับการแจกจ่ายนั้นเป็นเรื่องง่ายสิ่งที่คุณต้องทำเพียงทำตามขั้นตอนนี้

  • ไฟล์> ส่งออก
  • ส่งออกแอปพลิเคชัน Android
  • เรียกดู -> เลือกโครงการของคุณ
  • ถัดไป -> ถัดไป

ขั้นตอนเหล่านี้จะรวบรวมลงนามและ zip จัดแนวโปรเจ็กต์ของคุณและตอนนี้คุณพร้อมที่จะแจกจ่ายโปรเจ็กต์ของคุณหรืออัปโหลดที่ Google Play Store


นั่นคือสิ่งที่ฉันต้องการคือใช้เครื่องมือสร้างออนไลน์ใหม่และต้องใช้ที่เก็บคีย์ก่อนหน้าไม่ใช่ที่เก็บคีย์ที่สร้างขึ้นใหม่ สิ่งเดียวที่ฉันขาดหายไปคือ ZIP ALIGNing apk ดังนั้นหากใครมีปัญหาเดียวกันไปที่นี่stackoverflow.com/a/22682132/826194
Larzan

5

ขั้นตอนการลงนาม APK

ในการลงนามไฟล์ Android APK ด้วยตนเองให้เรียกใช้คำสั่งทั้งสามนี้:

  1. สร้างไฟล์ Keystore

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. ลงชื่อไฟล์ APK ของคุณโดยใช้ jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. จัดแนว APK ที่ลงชื่อโดยใช้เครื่องมือ zipalign

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

ขั้นตอนที่ 1


Generate Keystore file

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

ตัวอย่าง:

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

รหัสผ่านที่เก็บคีย์: 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>

ขั้นตอนที่ 2


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

ตัวอย่าง

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

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

ตัวอย่าง

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>

ขั้นตอนที่ 3


จัดแนวแพ็คเกจ APK สุดท้ายโดยใช้ zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

ตัวอย่าง

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

ตัวอย่าง

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>

บันทึก:

คำสั่งตรวจสอบมีไว้เพื่อตรวจสอบว่า APK สร้างและลงนามถูกต้องหรือไม่!

อ้างอิง

ฉันหวังว่านี่จะช่วยได้ทุกคน :)


2

ฉันพบปัญหานี้และได้รับการแก้ไขโดยการตรวจสอบเวอร์ชัน min sdk ในรายการ ตั้งค่าเป็น 15 (ICS) แต่โทรศัพท์ของฉันใช้ 10 (Gingerbread)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.