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

การเตรียมบิลด์สำหรับเผยแพร่

ชุดแอปและการลดขนาด

การเตรียมบิลด์สำหรับเผยแพร่ เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

จากการแก้ไขข้อบกพร่องสู่รุ่นเผยแพร่

ทุกวันคุณเรียกใช้รุ่นแก้ไขข้อบกพร่องจาก Android Studio แต่ Google Play ต้องการรุ่นเผยแพร่ ซึ่งมีขนาดเล็กกว่า เร็วกว่า และไม่ถูกระบุว่าแก้ไขข้อบกพร่องได้

รุ่นเผยแพร่แตกต่างกันในสามประเด็นสำคัญ: มีการลงลายเซ็นด้วยคีย์เผยแพร่ มีค่า debuggable false และโดยทั่วไปจะถูกลดขนาดเพื่อนำโค้ดและทรัพยากรที่ไม่ได้ใช้ออก

ในบทเรียนนี้ คุณจะเตรียมรุ่นเผยแพร่ที่ถูกต้องและสร้างไฟล์ที่ Google Play ต้องการ นั่นคือ Android App Bundle (.aab)

ประเภทการสร้างใน Gradle

Gradle กำหนดประเภทการสร้างไว้สองแบบตามค่าเริ่มต้น ได้แก่ debug และ release คุณกำหนดค่าเหล่านี้ใน build.gradle.kts ของโมดูล

บล็อก release คือส่วนที่ใช้เปิดการเพิ่มประสิทธิภาพ โปรดสังเกต isMinifyEnabled และ isShrinkResources ด้านล่าง เพราะนี่คือสวิตช์ที่ทำให้แอปมีขนาดเล็กลง

android {
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

AAB เทียบกับ APK

Google Play กำหนดให้ใช้ Android App Bundle (.aab) ไม่ใช่ .apk แบบทั่วไป

  • .apk มีโค้ดและทรัพยากรสำหรับอุปกรณ์ทุกแบบ ทั้งความหนาแน่นหน้าจอ สถาปัตยกรรม CPU และภาษาทั้งหมด
  • .aab จะอัปโหลดไปยัง Play จากนั้น Play จะสร้าง APK ขนาดเล็กที่ได้รับการปรับให้เหมาะสมสำหรับอุปกรณ์เฉพาะของผู้ใช้แต่ละคน

ผลลัพธ์คือผู้ใช้ดาวน์โหลดข้อมูลน้อยลง และแอปของคุณติดตั้งโดยใช้พื้นที่น้อยลง คุณยังคงใช้ APK เพื่อทดสอบโดยตรงบนโทรศัพท์ได้ แต่เมื่อต้องเผยแพร่ ให้เผยแพร่เป็น AAB

R8 / การลดขนาดคืออะไร

เมื่อ isMinifyEnabled = true Android Studio จะเรียกใช้ R8 โดย R8 ทำงานสามอย่างในขั้นตอนเดียว:

  • การลดขนาด — นำคลาสและเมธอดที่แอปไม่เคยเรียกใช้ออก
  • การทำให้นิรนาม — เปลี่ยนชื่อคลาสและเมธอดเป็นชื่อสั้น ๆ เช่น a, b, c เพื่อประหยัดพื้นที่และขัดขวางการทำวิศวกรรมย้อนกลับ
  • การเพิ่มประสิทธิภาพ — แทรกโค้ดและเขียนโค้ดใหม่เพื่อให้ทำงานเร็วขึ้น

การลดขนาดทรัพยากร (isShrinkResources = true) จะนำ drawable, เลย์เอาต์ และสตริงที่ไม่ได้ใช้ออกเพิ่มเติม

กฎการคงไว้ด้วย ProGuard

บางครั้ง R8 จะลบหรือเปลี่ยนชื่อโค้ดที่ถูกอ้างถึงผ่านการสะท้อนกลับเท่านั้น (เช่น โดย Gson, Retrofit หรือการทำให้เป็นอนุกรม) คุณสามารถป้องกันโค้ดดังกล่าวได้ด้วย กฎการคงไว้ ใน proguard-rules.pro

กฎการคงไว้จะบอก R8 ว่า “อย่าเปลี่ยนชื่อหรือลบคลาสเหล่านี้”

# proguard-rules.pro

# Keep data classes used with Gson reflection
-keep class com.example.app.model.** { *; }

# Keep Retrofit interface methods
-keepattributes Signature
-keepattributes *Annotation*

# Keep Kotlin metadata used by libraries
-keep class kotlin.Metadata { *; }

การกำหนดเวอร์ชันให้แอป

การเผยแพร่แต่ละครั้งต้องมีค่าเวอร์ชันสองค่าใน build.gradle.kts:

  • versionCode — จำนวนเต็มที่ต้องเพิ่มขึ้นทุกครั้งที่อัปโหลด เพลย์ใช้ค่านี้เพื่อตรวจสอบว่าบิลด์ใดใหม่กว่า
  • versionName — ข้อความที่มนุษย์อ่านได้ เช่น "1.4.0" ซึ่งจะแสดงให้ผู้ใช้เห็น

หากลืมเพิ่มค่า versionCode เพลย์จะปฏิเสธการอัปโหลดโดยมองว่าเป็นรายการซ้ำ

android {
    defaultConfig {
        applicationId = "com.example.app"
        minSdk = 24
        targetSdk = 35
        versionCode = 12
        versionName = "1.4.0"
    }
}

การสร้างชุดรวมในแอนดรอยด์สตูดิโอ

หากต้องการสร้างชุดรวมรุ่นเผยแพร่ที่ลงลายเซ็นจากส่วนติดต่อผู้ใช้:

  • เปิด Build → Generate Signed Bundle / APK
  • เลือก Android App Bundle
  • เลือก (หรือสร้าง) ที่เก็บคีย์และคีย์ของคุณ
  • เลือกตัวแปรบิลด์ release

แอนดรอยด์สตูดิโอจะเรียกใช้ R8 ลงลายเซ็นให้ชุดรวม และวาง .aab ไว้ใน app/release/ ไฟล์เดียวนั้นคือไฟล์ที่คุณอัปโหลดไปยังเพลย์

การสร้างจากบรรทัดคำสั่ง

สำหรับ CI/CD หรือสคริปต์ ให้สร้างชุดรวมโดยเรียกใช้ Gradle โดยตรง ชื่องานจะเป็นไปตามรูปแบบ bundle<Variant>

bundleRelease จะสร้าง AAB และไฟล์จะอยู่ที่ app/build/outputs/bundle/release/

# Build a release App Bundle (.aab)
./gradlew bundleRelease

# Output:
# app/build/outputs/bundle/release/app-release.aab

# Build a release APK instead (for direct install/testing)
./gradlew assembleRelease

การตรวจสอบและทดสอบ AAB

คุณไม่สามารถติดตั้ง .aab ลงในโทรศัพท์โดยตรงได้ หากต้องการทดสอบ APK ที่เพลย์จะสร้างขึ้นจริง ให้ใช้ เครื่องมือจัดชุดของกูเกิล

เครื่องมือนี้จะสร้าง APK ที่ตรงกับอุปกรณ์จากชุดรวมของคุณ และติดตั้งลงในอุปกรณ์ที่เชื่อมต่ออยู่ ซึ่งใกล้เคียงกับการดาวน์โหลดจากเพลย์จริงมากที่สุด

# Generate APKs from the bundle for the connected device
java -jar bundletool.jar build-apks \
  --bundle=app-release.aab \
  --output=app.apks \
  --connected-device

# Install them on the device
java -jar bundletool.jar install-apks --apks=app.apks

การนำโค้ดดีบักออกจากรุ่นเผยแพร่

บิลด์รุ่นเผยแพร่ไม่ควรบันทึกข้อมูลสำคัญหรือเปิดใช้ฟีเจอร์ที่มีไว้เฉพาะสำหรับการดีบัก ใช้ BuildConfig.DEBUG เพื่อแยกพฤติกรรม โดยค่าดังกล่าวจะเป็น true เฉพาะในบิลด์ดีบักเท่านั้น

R8 ยังสามารถตัดบล็อกที่มีเงื่อนไขกำกับด้วยค่าคงที่ false ออกได้ด้วย จึงช่วยลดขนาดได้เช่นกัน

fun setupLogging() {
    if (BuildConfig.DEBUG) {
        // Verbose logging only in debug builds
        Log.d("App", "Debug logging enabled")
        Timber.plant(Timber.DebugTree())
    } else {
        // Release: send to crash reporting only, no console spam
        Timber.plant(CrashReportingTree())
    }
}

รายการตรวจสอบความพร้อมของรุ่นเผยแพร่

ก่อนสร้างชุดรวมขั้นสุดท้าย ให้ตรวจสอบว่า:

  • เพิ่มค่า versionCode และอัปเดต versionName แล้ว
  • เปิดใช้ isMinifyEnabled และ isShrinkResources สำหรับรุ่นเผยแพร่แล้ว
  • เพิ่มกฎการคงไว้สำหรับไลบรารีที่ใช้การสะท้อนกลับแล้ว
  • targetSdk ตรงตามข้อกำหนดปัจจุบันของเพลย์
  • ไม่มีการบันทึกข้อมูลหรือจุดเชื่อมต่อสำหรับการทดสอบที่มีไว้เฉพาะสำหรับการดีบักในโค้ดรุ่นเผยแพร่
  • ทดสอบ AAB ด้วยเครื่องมือจัดชุดบนอุปกรณ์จริงแล้ว

เมื่อผ่านการตรวจสอบทั้งหมด .aab ของคุณก็พร้อมอัปโหลด

ตรวจสอบความเข้าใจ

คุณตั้งค่า isMinifyEnabled = true แล้วแอปขัดข้องในรุ่นเผยแพร่ โดยตัวแยกวิเคราะห์ JSON แจ้งข้อผิดพลาดว่า “ไม่พบคลาส” แต่ในรุ่นดีบักกลับทำงานได้ตามปกติ สาเหตุที่เป็นไปได้มากที่สุดคืออะไร

สรุป: การเตรียมบิลด์รุ่นเผยแพร่

ตอนนี้คุณทราบวิธีเปลี่ยนแอปดีบักให้เป็นบิลด์ที่พร้อมเผยแพร่แล้ว:

  • เพลย์กำหนดให้ใช้ .aab ที่ลงลายเซ็น และเพลย์จะสร้าง APK สำหรับแต่ละอุปกรณ์จากไฟล์ดังกล่าว
  • ประเภทธบิลด์ release จะเปิดใช้ R8 ผ่าน isMinifyEnabled และ isShrinkResources เพื่อย่อ ทำให้สับสนชื่อ และปรับปรุงประสิทธิภาพ
  • กฎการคงไว้ จะป้องกันไม่ให้โค้ดที่ใช้การสะท้อนกลับถูกลบ
  • เพิ่มค่า versionCode และอัปเดต versionName อยู่เสมอ
  • สร้างด้วย ./gradlew bundleRelease และทดสอบผลลัพธ์ด้วย เครื่องมือจัดชุด

ถัดไป: วิธีทำงานจริงของการลงลายเซ็นที่ทำให้บิลด์นี้น่าเชื่อถือ

คำถามที่พบบ่อย

บทเรียน “การเตรียมบิลด์สำหรับเผยแพร่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเตรียมบิลด์สำหรับเผยแพร่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเตรียมบิลด์สำหรับเผยแพร่”

ชุดแอปและการลดขนาด คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การเตรียมบิลด์สำหรับเผยแพร่” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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