0Pricing
Android Academy · บทเรียน

การลงนามแอป

คีย์และการลงนามแอปบน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเตรียมบิลด์สำหรับเผยแพร่
  2. การลงนามแอป
  3. Play Console และหน้ารายการแอป
  4. การทยอยเปิดตัวและการอัปเดต
← กลับไปที่ Android Academy