การลงนามแอป
คีย์และการลงนามแอปบน Play
การลงนามแอป เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุผลที่แอปต้องลงลายเซ็น
แอนดรอยด์จะไม่ติดตั้งแอป เว้นแต่แอปนั้นจะ ลงลายเซ็นดิจิทัล ลายเซ็นจะยืนยันสองสิ่ง ได้แก่ ใครเป็นผู้เผยแพร่แอป และ APK ไม่ได้ถูกแก้ไขนับตั้งแต่เผยแพร่
สิ่งสำคัญคือ ลายเซ็นจะผูก การอัปเดต เข้ากับแอปต้นฉบับ การอัปเดตจะได้รับการยอมรับก็ต่อเมื่อลงลายเซ็นด้วยคีย์ เดียวกัน กับรุ่นที่ติดตั้งอยู่ หากทำคีย์นั้นหาย คุณจะไม่สามารถอัปเดตแอปได้อีกเลย
บทเรียนนี้ครอบคลุมที่เก็บคีย์ การกำหนดค่าการลงลายเซ็น และแนวทางสมัยใหม่ที่ปลอดภัยกว่าของกูเกิล ซึ่งก็คือ การลงลายเซ็นแอปโดยเพลย์
ที่เก็บคีย์และคีย์
ข้อมูลระบุตัวตนสำหรับการลงลายเซ็นของคุณจะอยู่ในไฟล์ ที่เก็บคีย์ (.jks หรือ .keystore) ที่เก็บคีย์หนึ่งแห่งสามารถเก็บคีย์ได้หลายคีย์ โดยแต่ละคีย์จะมี ชื่อแฝง และรหัสผ่านของตัวเอง
- รหัสผ่านที่เก็บคีย์ — ใช้ปลดล็อกไฟล์
- ชื่อแฝงคีย์ — ใช้ระบุคีย์ภายในที่เก็บคีย์
- รหัสผ่านคีย์ — ใช้ปลดล็อกคีย์นั้นโดยเฉพาะ
บิลด์ดีบักที่คุณเรียกใช้เป็นประจำทุกวันจะลงลายเซ็นโดยอัตโนมัติด้วยที่เก็บคีย์ดีบักชั่วคราว แต่สำหรับรุ่นเผยแพร่ คุณต้องใช้ที่เก็บคีย์ของตนเอง
การสร้างที่เก็บคีย์
คุณสามารถสร้างที่เก็บคีย์จากกล่องโต้ตอบของแอนดรอยด์สตูดิโอ หรือใช้คำสั่ง keytool ที่มาพร้อมกับ JDK ได้
ใช้ ระยะเวลาที่มีผลนาน (อย่างน้อย 25 ปี) เพราะหากคีย์หมดอายุ คุณจะไม่สามารถเผยแพร่การอัปเดตได้ RSA 2048 เป็นมาตรฐาน
keytool -genkeypair \
-v \
-keystore release.jks \
-alias upload \
-keyalg RSA \
-keysize 2048 \
-validity 10000บล็อก signingConfigs
หากต้องการลงลายเซ็นโดยอัตโนมัติระหว่างการสร้างด้วย Gradle ให้ประกาศรายการ signingConfigs และผูกเข้ากับประเภทธบิลด์ release
วิธีนี้ใช้งานได้ แต่โปรดสังเกตว่ารหัสผ่านอยู่ในไฟล์บิลด์โดยตรง เราจะแก้ไขเรื่องนี้ในหัวข้อถัดไป
android {
signingConfigs {
create("release") {
storeFile = file("release.jks")
storePassword = "superSecret"
keyAlias = "upload"
keyPassword = "superSecret"
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
}
}
}เก็บข้อมูลลับให้ห่างจาก Git
อย่าคอมมิตรหัสผ่านหรือที่เก็บคีย์ไว้ในระบบควบคุมเวอร์ชัน ให้อ่านค่าจากไฟล์ keystore.properties ในเครื่องซึ่งถูกยกเว้นจาก git แทน
เพิ่ม keystore.properties และ *.jks ลงใน .gitignore
// top of app/build.gradle.kts
val keystoreProps = Properties().apply {
val f = rootProject.file("keystore.properties")
if (f.exists()) load(f.inputStream())
}
android {
signingConfigs {
create("release") {
storeFile = file(keystoreProps["storeFile"] as String)
storePassword = keystoreProps["storePassword"] as String
keyAlias = keystoreProps["keyAlias"] as String
keyPassword = keystoreProps["keyPassword"] as String
}
}
}ไฟล์ keystore.properties
ไฟล์คุณสมบัติที่สอดคล้องกันจะเป็นรายการคีย์=ค่าแบบข้อความธรรมดา เก็บไว้นอก git และจัดเก็บอย่างปลอดภัย เช่น ในตัวจัดการรหัสผ่านหรือที่เก็บข้อมูลลับของ CI
บนเซิร์ฟเวอร์ CI คุณควรส่งค่าเหล่านี้เข้าไปเป็นข้อมูลลับจากสภาพแวดล้อม แทนการใช้ไฟล์ที่คอมมิตไว้ในคลัง
# keystore.properties (git-ignored!)
storeFile=release.jks
storePassword=superSecret
keyAlias=upload
keyPassword=superSecretการลงลายเซ็นแอปโดยเพลย์
เพลย์สมัยใหม่ใช้ การลงลายเซ็นแอปโดยเพลย์ โดยกูเกิลจะเก็บ คีย์ลงลายเซ็นแอป จริงไว้ในโครงสร้างพื้นฐานที่ปลอดภัย และใช้คีย์นี้ลงลายเซ็นให้ APK ที่ส่งมอบแก่ผู้ใช้
คุณจะจัดการเพียง คีย์อัปโหลด เท่านั้น คุณใช้คีย์นี้ลงลายเซ็นให้ชุดรวมแล้วอัปโหลด เพลย์จะตรวจสอบคีย์อัปโหลดของคุณ นำคีย์นั้นออก และลงลายเซ็นใหม่ด้วยคีย์ลงลายเซ็นแอป
ข้อดีสำคัญคือ หากคุณทำคีย์อัปโหลดหาย คุณสามารถขอรีเซ็ตได้ แต่คีย์ลงลายเซ็นแอป ซึ่งเป็นคีย์ที่ผู้ใช้เชื่อถือ จะยังปลอดภัยอยู่กับกูเกิล
คีย์อัปโหลดกับคีย์ลงลายเซ็นแอป
คีย์สองดอก หน้าที่สองอย่าง อย่าสับสนกัน:
- คีย์อัปโหลด — เป็นของคุณ ใช้ลงลายเซ็นให้ AAB ที่คุณอัปโหลด และรีเซ็ตได้หากทำหาย
- คีย์ลงลายเซ็นแอป — เป็นของกูเกิล (หรือคีย์ที่คุณอัปโหลดไว้ครั้งหนึ่ง) ใช้ลงลายเซ็นให้ APK ขั้นสุดท้ายที่ผู้ใช้ติดตั้ง และไม่สามารถเปลี่ยนได้
เมื่อสมัครแอปใหม่ วิธีที่ง่ายที่สุดคือให้กูเกิล สร้างคีย์ลงลายเซ็นแอป แล้วใช้คีย์อัปโหลดของคุณลงลายเซ็นสำหรับการอัปโหลด
การตรวจสอบลายเซ็น
หากต้องการยืนยันว่าอาร์ติแฟกต์ลงลายเซ็นอย่างไร ให้ใช้ apksigner จากเครื่องมือสร้างของ Android SDK เครื่องมือนี้จะแสดงใบรับรองการลงลายเซ็นและรูปแบบลายเซ็นที่มีอยู่ (v1/v2/v3)
การเปรียบเทียบลายนิ้วมือ SHA-256 ของใบรับรองยังเป็นวิธีที่ใช้ลงทะเบียนแอปกับบริการต่าง ๆ เช่น Firebase หรือ Google Sign-In ด้วย
# Verify and print signer certificates of an APK
apksigner verify --print-certs app-release.apk
# Show the SHA-256 fingerprint of a keystore key
keytool -list -v -keystore release.jks -alias uploadการปกป้องคีย์
คีย์อัปโหลดของคุณเปลี่ยนทดแทนได้ยาก และคีย์ลงลายเซ็นแอป (หากคุณจัดการเอง) ไม่สามารถทดแทนได้เลย จงดูแลคีย์เหล่านี้ราวกับเป็นสมบัติล้ำค่า:
- สำรองที่เก็บคีย์ไว้ในสถานที่ปลอดภัยอย่างน้อยสองแห่ง
- เก็บรหัสผ่านไว้ในตัวจัดการรหัสผ่าน ห้ามเก็บไว้ในซอร์สโค้ด
- ใช้การลงลายเซ็นแอปโดยเพลย์ เพื่อให้กู้คืนคีย์อัปโหลดที่สูญหายได้
- จำกัดจำนวนสมาชิกในทีมที่เข้าถึงที่เก็บคีย์ได้
แอปที่เผยแพร่แล้วจำนวนมากต้องถูกยกเลิก เพียงเพราะนักพัฒนาทำคีย์หายและไม่สามารถส่งการอัปเดตได้อีก
การประกอบทุกส่วนเข้าด้วยกัน
ขั้นตอนการลงลายเซ็นสำหรับรุ่นเผยแพร่ทั้งหมดมีดังนี้:
- สร้าง ที่เก็บคีย์อัปโหลด ด้วย
keytool - เชื่อมเข้ากับ
signingConfigsโดยอ่านข้อมูลลับจากkeystore.properties - สร้าง
.aabที่ลงลายเซ็นด้วย./gradlew bundleRelease - อัปโหลดไปยังเพลย์ ซึ่งจะลงลายเซ็นใหม่ด้วย คีย์ลงลายเซ็นแอป ก่อนส่งมอบให้ผู้ใช้
นับจากนี้ การอัปเดตทุกครั้งต้องลงลายเซ็นด้วยคีย์อัปโหลดเดียวกันนี้
ตรวจสอบความเข้าใจ
เมื่อเปิดใช้การลงลายเซ็นแอปโดยเพลย์ คุณใช้คีย์ใดลงลายเซ็นให้ชุดรวมที่อัปโหลด และจะเกิดอะไรขึ้นหากคุณทำคีย์นั้นหาย
สรุป: การลงลายเซ็นแอป
การลงลายเซ็นคือสิ่งที่ทำให้แอปแอนดรอยด์ติดตั้งและอัปเดตได้:
- ที่เก็บคีย์ใช้เก็บคีย์ โดยแต่ละคีย์มีชื่อแฝงและรหัสผ่าน
- สร้างคีย์ที่มีระยะเวลาที่มีผลนานด้วย
keytoolและเชื่อมเข้ากับsigningConfigs - เก็บรหัสผ่านให้ห่างจาก git ด้วย
keystore.propertiesและ.gitignore - การลงลายเซ็นแอปโดยเพลย์จะแยกคีย์เป็น คีย์อัปโหลด ของคุณที่รีเซ็ตได้ และ คีย์ลงลายเซ็นแอป ถาวรของกูเกิล
- สำรองคีย์อย่างระมัดระวัง เพราะคีย์ที่สูญหายอาจทำให้แอปต้องยุติการให้บริการ
ถัดไป: การตั้งค่า Play Console และหน้าร้านค้าของคุณ
คำถามที่พบบ่อย
บทเรียน “การลงนามแอป” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การลงนามแอป” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การลงนามแอป”
คีย์และการลงนามแอปบน Play คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การลงนามแอป” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ