Version Code คือจำนวนเต็มบวกในการพัฒนา Android ที่ระบุแต่ละบิลด์ใหม่ของแอปพลิเคชันอย่างไม่ซ้ำกัน Google Play และระบบ Android ใช้ Version Code เพื่อพิจารณาว่าจำเป็นต้องอัปเดตหรือไม่: หากโค้ดของบิลด์ใหม่มากกว่าที่ติดตั้งไว้ กระบวนการอัปเดตจะเริ่มต้นขึ้น ตาม เอกสารสำหรับนักพัฒนา Android Version Code จะไม่แสดงให้ผู้ใช้เห็นและใช้สำหรับการกำหนดหมายเลขเวอร์ชันภายในเท่านั้น
ประเด็นสำคัญ
Version Code คือจำนวนเต็มชนิด Integer ที่กำหนดให้กับแต่ละบิลด์ของแอปพลิเคชัน Android ซึ่งแตกต่างจาก Version Name ตรงที่ Version Code ไม่แสดงให้ผู้ใช้เห็นและใช้โดยระบบปฏิบัติการและ Google Play เท่านั้นเพื่อเปรียบเทียบเวอร์ชันเมื่อติดตั้งอัปเดต
Version Code ต้องเป็นจำนวนเต็มบวกในช่วงตั้งแต่ 1 ถึง 2100000000 บิลด์ที่ตามมาแต่ละบิลด์ต้องมี Version Code มากกว่าบิลด์ก่อนหน้าอย่างเคร่งครัด หากนักพัฒนาเผยแพร่บิลด์ด้วย Version Code 5 การเผยแพร่ครั้งต่อไปสามารถใช้ 6, 7 หรือจำนวนใดๆ ที่มากกว่า 5 แต่ไม่ใช่ 4 และไม่ใช่ 5 ซ้ำ
Google แนะนำการแบ่งแยกระหว่าง Version Code และ Version Name พร้อมกับการเปิดตัว Android SDK ในปี 2007 Version Code ถูกออกแบบให้เป็นตัวระบุเครื่องสำหรับการเปรียบเทียบเวอร์ชันอัตโนมัติ ในขณะที่ Version Name ถูกออกแบบให้เป็นป้ายชื่อที่มนุษย์อ่านได้ การแบ่งแยกนี้ช่วยให้นักพัฒนาสามารถตั้งชื่อเวอร์ชันตามต้องการในขณะที่รักษาลำดับการอัปเดตที่เคร่งครัดผ่านโค้ดตัวเลข
| พารามิเตอร์ | Version Code | Version Name |
|---|---|---|
| ชนิดข้อมูล | Integer | String |
| การแสดงต่อผู้ใช้ | ไม่ | ใช่ |
| การเปรียบเทียบเวอร์ชัน | การเปรียบเทียบตัวเลข | ไม่ใช้ |
| รูปแบบ | 1, 2, 3, 10, 100 | 1.0.0, 2.3.1-rc |
| ช่วง | 1 — 2100000000 | ไม่มีขีดจำกัด |
กลไกการเปรียบเทียบของ Version Code ถูกสร้างไว้ในระบบปฏิบัติการ Android และ Google Play Store ทุกครั้งที่เผยแพร่ Google Play จะตรวจสอบว่า Version Code ของบิลด์ใหม่มากกว่าโค้ดของเวอร์ชันที่ติดตั้งไว้ หากเงื่อนไขไม่เป็นไปตามนั้น การเผยแพร่จะถูกปฏิเสธพร้อมข้อผิดพลาด
เมื่ออุปกรณ์ติดต่อ Google Play เพื่อตรวจสอบอัปเดต เซิร์ฟเวอร์จะเปรียบเทียบ Version Code ของแอปพลิเคชันที่ติดตั้งกับค่าสูงสุดที่มีในร้านค้า หากโค้ดบนเซิร์ฟเวอร์มากกว่า การดาวน์โหลดและติดตั้งอัปเดตจะเริ่มต้นขึ้น ผู้ใช้เห็น Version Name ที่นักพัฒนากำหนด แต่การตัดสินใจอัปเดตจะขึ้นอยู่กับ Version Code
นักพัฒนาใช้กลยุทธ์ต่างๆ ในการเพิ่ม Version Code วิธีที่ง่ายที่สุดคือเพิ่มทีละ 1 ในแต่ละบิลด์ สำหรับไปป์ไลน์ CI/CD มักใช้ timestamp หรือหมายเลขบิลด์: 2026070301 (ปี-เดือน-วัน-หมายเลข) สิ่งสำคัญคือโค้ดต้องเพิ่มขึ้นแบบโมโนโทนิกและไม่ซ้ำกันระหว่างบิลด์และแทร็กของ Google Play ที่แตกต่างกัน
Version Code และ Version Name เป็นสองฟิลด์อิสระใน build.gradle ที่ทำหน้าที่ต่างกัน Version Code เป็นตัวระบุภายในสำหรับระบบ Version Name เป็นป้ายชื่อทางการตลาดสำหรับผู้ใช้ ทั้งสองสามารถเปลี่ยนแปลงได้อย่างอิสระจากกัน
Version Name คือสตริงที่แสดงในการตั้งค่าแอปพลิเคชัน ใน Google Play และในไดอะล็อกอัปเดต นักพัฒนาสามารถระบุรูปแบบใดก็ได้: 1.0.0, 2.3.1-beta, 3.0-rc1 Version Name ไม่ได้ใช้สำหรับเปรียบเทียบเวอร์ชันสตริง — Google Play ขึ้นอยู่กับ Version Code เสมอ
เป็นไปได้ที่ Version Code จะเพิ่มขึ้นในขณะที่ Version Name ยังคงเหมือนเดิม ตัวอย่างเช่น หากนักพัฒนาแก้ไขบั๊กที่สำคัญในบิลด์ hotfix โดยไม่เปลี่ยนแปลงฟังก์ชันการทำงาน Version Name ยังคงเป็น 2.0.0 ในขณะที่ Version Code เปลี่ยนจาก 5 เป็น 6 Google Play จะจัดการอัปเดตดังกล่าวอย่างถูกต้อง
// ตัวอย่าง: version name ไม่เปลี่ยนแปลง โค้ดเพิ่มขึ้น
android {
defaultConfig {
versionCode 6 // เคยเป็น 5 — hotfix โดยไม่มีฟีเจอร์ใหม่
versionName "2.0.0" // ไม่เปลี่ยนแปลง
}
}
// การตรวจสอบเวอร์ชันใน runtime
val code = BuildConfig.VERSION_CODE
val name = BuildConfig.VERSION_NAME
println("Code: $code, Name: $name")
การกำหนดค่า Version Code ทำได้ในไฟล์ build.gradle ของโมดูลแอปพลิเคชัน ฟิลด์ versionCode รับจำนวนเต็มและเป็นส่วนหนึ่งของบล็อก defaultConfig สำหรับบิลด์ flavor ที่แตกต่างกัน สามารถกำหนดค่าแบบกำหนดเองได้ผ่านฟิลด์ versionCode ในการกำหนดค่าผลิตภัณฑ์
// build.gradle.kts — Kotlin DSL
android {
defaultConfig {
applicationId "com.example.app"
versionCode 15
versionName "2.1.0"
}
flavorDimensions +"version"
productFlavors {
create("demo") {
versionCode 1015
}
create("full") {
versionCode 2015
}
}
}
Product flavors อนุญาตให้ใช้ Version Code ที่แตกต่างกันสำหรับการกำหนดค่าที่แตกต่างกัน: เวอร์ชันสาธิต, เวอร์ชันแยกสำหรับแท็บเล็ต หากใช้ flavors ในโปรเจกต์ Version Code สุดท้ายจะประกอบด้วยหมายเลขฐานและการเพิ่มเฉพาะ flavor Google Play ติดตามแต่ละชุดค่าผสมอย่างอิสระ
ใน ไปป์ไลน์ CI/CD (GitHub Actions, GitLab CI, Jenkins) Version Code มักถูกสร้างขึ้นโดยอัตโนมัติตามหมายเลขบิลด์หรือวันที่ ซึ่งช่วยขจัดข้อผิดพลาดของมนุษย์ในการอัปเดตด้วยตนเอง สคริปต์จะอ่าน Version Code ปัจจุบันจาก build.gradle เพิ่มค่า และเขียนกลับก่อนเริ่มบิลด์
// การเพิ่ม Version Code อัตโนมัติ
import java.util.Properties
import java.io.FileInputStream
val versionProps = Properties()
versionProps.load(FileInputStream("version.properties"))
val versionCode = versionProps.getProperty("VERSION_CODE").toInt() + 1
versionProps.setProperty("VERSION_CODE", versionCode.toString())
android {
defaultConfig {
versionCode = versionCode
}
}
Google Play มีกฎที่เข้มงวดสำหรับ Version Code เมื่อเผยแพร่และอัปเดตแอปพลิเคชัน การละเมิดกฎเหล่านี้นำไปสู่การปฏิเสธบิลด์หรือไม่สามารถเผยแพร่อัปเดตได้ นักพัฒนาจำเป็นต้องเข้าใจข้อจำกัดและกลยุทธ์การจัดการโค้ดในทุกขั้นตอนของวงจรชีวิต
Google Play ไม่อนุญาตให้อัปโหลด APK หรือ AAB ที่มี Version Code น้อยกว่าหรือเท่ากับที่เผยแพร่ในปัจจุบัน กฎนี้ใช้กับแต่ละแทร็ก (production, beta, alpha) อย่างอิสระ หากอัปโหลดบิลด์ด้วย Version Code 10 ใน production และบิลด์ด้วยโค้ด 5 ใน alpha แทร็ก alpha สามารถอัปเดตเป็น 6, 7, 8 หรือ 9 แต่ production ยังคงอยู่ที่ 10
เมื่อเลื่อนระดับบิลด์จาก alpha เป็น beta และจากนั้นเป็น production Version Code ต้องเพิ่มขึ้นในแต่ละขั้นตอน หากเวอร์ชัน alpha มีโค้ด 10 beta สามารถใช้ 11 และ production ใช้ 12 คุณไม่สามารถเผยแพร่บิลด์ด้วยโค้ด 10 ไปยัง production หาก alpha ใช้ 10 อยู่แล้ว แม้ว่า production จะยังไม่เห็นก็ตาม
ข้อผิดพลาดที่พบบ่อยที่สุดคือการตรงกันของ Version Code ในบิลด์ต่างๆ ที่อัปโหลดไปยังแทร็กเดียวกัน Google Play ส่งคืนข้อผิดพลาด APK_VERSION_CODE_ALREADY_EXISTS ข้อผิดพลาดอีกประการคือการเกินค่าสูงสุด 2100000000 ซึ่งทำให้การคอมไพล์ล้มเหลว เพื่อหลีกเลี่ยงความขัดแย้ง ให้ใช้การสร้างโค้ดอัตโนมัติในระบบ CI ของคุณที่เชื่อมโยงกับหมายเลขบิลด์หรือวันที่บิลด์
นักพัฒนามักทำผิดพลาดโดยไม่เพิ่ม Version Code เมื่อสร้างรีลีส hotfix สำหรับแทร็กทางเลือก หาก production มีโค้ด 15 และแทร็ก alpha ยังคงอยู่ที่ 14 เมื่อเลื่อนระดับ alpha เป็น production Google Play จะปฏิเสธบิลด์เนื่องจากโค้ดของมันน้อยกว่าโค้ด production ปัจจุบัน ตรวจสอบความโมโนโทนิกของโค้ดในทุกแทร็กพร้อมกัน — สำหรับสิ่งนี้ สะดวกในการใช้ไฟล์ version.properties เดียวที่ทุกแทร็กอ่านค่าปัจจุบัน
คำถามที่พบบ่อย
ไม่ Google Play ไม่อนุญาตให้อัปโหลดบิลด์ที่มี Version Code น้อยกว่าหรือเท่ากับที่เผยแพร่ในปัจจุบันในแทร็กเดียวกัน ระบบตรวจสอบโค้ดเมื่ออัปโหลดและส่งคืนข้อผิดพลาดหากกฎการเพิ่มแบบโมโนโทนิกถูกละเมิด สำหรับแทร็ก alpha และ beta ใช้หลักการเดียวกันอย่างอิสระ
สำหรับการเผยแพร่ครั้งแรก คุณสามารถระบุ Version Code 1 Google Play ไม่กำหนดเกณฑ์ขั้นต่ำอื่นนอกเหนือจากจำนวนเต็มบวก ขอแนะนำให้เริ่มต้นด้วย 1 และเพิ่มทีละ 1 ในแต่ละบิลด์ถัดไป หากคุณใช้รูปแบบ timestamp บิลด์แรกอาจเป็น 20260701
Version Code เป็นตัวระบุเครื่องภายในที่ระบบใช้สำหรับการเปรียบเทียบ Version Name เป็นป้ายชื่อสำหรับผู้ใช้ที่แสดงใน Google Play และบนอุปกรณ์ ผู้ใช้เห็น Version Name (เช่น 2.0.0) ในขณะที่ Google Play ใช้ Version Code เพื่อพิจารณาว่าจำเป็นต้องอัปเดตหรือไม่
ค่าสูงสุดของ Version Code คือ 2100000000 (Integer.MAX_VALUE) หากเกิน คอมไพเลอร์จะส่งคืนข้อผิดพลาดเนื่องจากฟิลด์เป็นชนิด int สำหรับโปรเจกต์ที่มีจำนวนบิลด์มาก (CI/CD ที่มีรีลีสรายวัน) ขอแนะนำให้ใช้รูปแบบ timestamp หรือรีเซ็ตตัวนับเมื่อเริ่มเวอร์ชัน major
Version Code ไม่ได้ใช้โดยตรงสำหรับการทดสอบ A/B แต่มีผลทางอ้อม Google Play อนุญาตให้กำหนดค่าการเผยแพร่แบบ staged rollout ตามเปอร์เซ็นต์ของผู้ใช้สำหรับบิลด์เฉพาะ Version Code ระบุบิลด์ ในขณะที่การทดสอบ A/B ถูกกำหนดค่าผ่าน Firebase Remote Config หรือบริการที่คล้ายกัน
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม