กระบวนการอัตโนมัติ:
ใช้เครื่องมือนี้ (ใช้ apksigner ใหม่จาก Google):
https://github.com/patrickfav/uber-apk-signer
คำเตือน: ฉันเป็นผู้พัฒนา :)
กระบวนการด้วยตนเอง:
ขั้นตอนที่ 1: สร้าง Keystore (เพียงครั้งเดียว)
คุณต้องสร้างที่เก็บคีย์หนึ่งครั้งและใช้เพื่อลงนามunsigned
apk ของคุณ ใช้สิ่งที่จัดเตรียมโดย 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 โดยไม่ได้รับอนุญาต (ดูรายละเอียดเพิ่มเติมที่นี่และที่นี่ ) ดังนั้น 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
ดูเอกสารอย่างเป็นทางการได้ที่นี่