การกำหนดเวอร์ชันเป็นองค์ประกอบสำคัญของกลยุทธ์การอัปเกรดและการบำรุงรักษาแอป การกำหนดเวอร์ชันมีความสำคัญเนื่องจากเหตุผลต่อไปนี้
- ผู้ใช้ต้องมีข้อมูลเฉพาะเกี่ยวกับเวอร์ชันของแอปที่ ติดตั้งในอุปกรณ์และเวอร์ชันอัปเกรดที่พร้อมให้ ติดตั้ง
- แอปอื่นๆ ซึ่งรวมถึงแอปอื่นๆ ที่คุณเผยแพร่เป็น ชุดแอป จะต้องค้นหาเวอร์ชันของแอปในระบบเพื่อ พิจารณาความเข้ากันได้และระบุการอ้างอิง
- บริการที่คุณเผยแพร่แอปอาจต้อง ค้นหาเวอร์ชันของแอปเพื่อให้แสดงเวอร์ชันแก่ผู้ใช้ได้ นอกจากนี้ บริการเผยแพร่อาจต้องตรวจสอบเวอร์ชันของแอปเพื่อ พิจารณาความเข้ากันได้และสร้างความสัมพันธ์ในการอัปเกรด/ดาวน์เกรด
ระบบ Android ใช้ข้อมูลเวอร์ชันของแอปเพื่อป้องกัน การดาวน์เกรด ระบบจะไม่ใช้ข้อมูลเวอร์ชันแอปเพื่อบังคับใช้ข้อจำกัดในการ อัปเกรดหรือความเข้ากันได้ของแอปของบุคคลที่สาม แอปของคุณต้องบังคับใช้ข้อจำกัดด้านเวอร์ชันและแจ้งให้ผู้ใช้ทราบ
ระบบ Android จะบังคับใช้ความเข้ากันได้ของเวอร์ชันระบบตามที่ระบุ
โดยminSdk
การตั้งค่าในไฟล์บิลด์ การตั้งค่านี้
ช่วยให้แอประบุ API ของระบบขั้นต่ำที่แอปใช้งานร่วมได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนดของ API ได้ที่ระบุข้อกำหนดเกี่ยวกับระดับ API (เวอร์ชัน SDK)
ข้อกำหนดการกำหนดเวอร์ชันจะแตกต่างกันไปในแต่ละโปรเจ็กต์ อย่างไรก็ตาม นักพัฒนาซอฟต์แวร์หลายคนถือว่า การกำหนดเวอร์ชันเชิงความหมายเป็นพื้นฐานที่ดีสำหรับ กลยุทธ์การกำหนดเวอร์ชัน
ตั้งค่าข้อมูลเวอร์ชันแอป
หากต้องการกำหนดข้อมูลเวอร์ชันสำหรับแอป ให้ตั้งค่าสำหรับการตั้งค่าเวอร์ชัน ในไฟล์บิลด์ Gradle ดังนี้
Groovy
android { namespace 'com.example.testapp' compileSdk 33 defaultConfig { applicationId "com.example.testapp" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" ... } ... } ...
Kotlin
android { namespace = "com.example.testapp" compileSdk = 33 defaultConfig { applicationId = "com.example.testapp" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" ... } ... } ...
การตั้งค่าเวอร์ชัน
กำหนดค่าสำหรับการตั้งค่าเวอร์ชันทั้ง 2 แบบที่มี ได้แก่ versionCode
และ versionName
versionCode
- จำนวนเต็มบวกที่ใช้เป็นหมายเลขเวอร์ชันภายใน
หมายเลขนี้ช่วยระบุว่าเวอร์ชันใดเป็นเวอร์ชันล่าสุด
โดยหมายเลขที่สูงกว่าจะบ่งบอกถึงเวอร์ชันล่าสุด นี่ไม่ใช่หมายเลขเวอร์ชันที่แสดงต่อผู้ใช้ แต่เป็นหมายเลขที่ตั้งค่าโดยการตั้งค่า
versionName
ระบบ Android ใช้ค่าversionCode
เพื่อป้องกันการดาวน์เกรดโดยการป้องกันไม่ให้ ผู้ใช้ติดตั้ง APK ที่มีversionCode
ต่ำกว่า เวอร์ชันที่ติดตั้งอยู่ในอุปกรณ์ค่านี้เป็นจำนวนเต็มบวกเพื่อให้แอปอื่นๆ ประเมินค่านี้โดยอัตโนมัติได้ เช่น เพื่อตรวจสอบความสัมพันธ์ของการอัปเกรดหรือดาวน์เกรด คุณ ตั้งค่าเป็นจำนวนเต็มบวกใดก็ได้ อย่างไรก็ตาม โปรดตรวจสอบว่า แอปแต่ละรุ่นที่เผยแพร่ต่อๆ กันใช้ค่าที่สูงขึ้น
หมายเหตุ: ค่าสูงสุดที่ Google Play อนุญาตสำหรับ
versionCode
คือ 2100000000คุณจะอัปโหลด APK ไปยัง Play Store โดยใช้
versionCode
ที่คุณ ใช้กับเวอร์ชันก่อนหน้าแล้วไม่ได้หมายเหตุ: ในบางสถานการณ์ คุณอาจต้องการ อัปโหลดแอปเวอร์ชันที่มี
versionCode
ต่ำกว่าเวอร์ชันล่าสุด เช่น หากคุณเผยแพร่ APK หลายรายการ คุณอาจมี ช่วงversionCode
ที่ตั้งค่าไว้ล่วงหน้าสำหรับ APK บางรายการ ดูข้อมูลเพิ่มเติมเกี่ยวกับ การกําหนดค่าversionCode
สําหรับ APK หลายรายการได้ที่ การกําหนดรหัสเวอร์ชันโดยปกติแล้ว คุณจะเผยแพร่แอปเวอร์ชันแรกโดยมี
versionCode
ตั้งค่าเป็น 1 จากนั้นจะเพิ่มค่า อย่างต่อเนื่องในแต่ละรุ่น ไม่ว่ารุ่นนั้นจะเป็นรุ่นหลักหรือ รุ่นย่อยก็ตาม ซึ่งหมายความว่าค่าversionCode
ไม่จำเป็นต้อง เหมือนกับเวอร์ชันที่เผยแพร่ของแอปที่ ผู้ใช้เห็น แอปและบริการเผยแพร่ไม่ควรแสดงค่าเวอร์ชันนี้ต่อผู้ใช้ versionName
สตริงที่ใช้เป็นหมายเลขเวอร์ชันที่แสดงต่อ ผู้ใช้ การตั้งค่านี้ระบุเป็นสตริงดิบหรือเป็นการอ้างอิงไปยัง ทรัพยากรสตริงได้
ค่าเป็นสตริงเพื่อให้คุณอธิบายเวอร์ชันแอปเป็นสตริง <major>.<minor>.<point> หรือเป็นตัวระบุเวอร์ชันแบบสัมบูรณ์หรือสัมพัทธ์ประเภทอื่นๆ ก็ได้
versionName
เป็นค่าเดียวที่แสดงต่อผู้ใช้
กำหนดค่าเวอร์ชัน
คุณกำหนดค่าเริ่มต้นสำหรับการตั้งค่าเหล่านี้ได้โดยรวมไว้ในบล็อก
defaultConfig {}
ซึ่งซ้อนอยู่ภายในบล็อก android {}
ของไฟล์ build.gradle
หรือ build.gradle.kts
ของโมดูล จากนั้นคุณสามารถ
ลบล้างค่าเริ่มต้นเหล่านี้สำหรับแอปเวอร์ชันต่างๆ ได้โดยกำหนดค่าแยกต่างหาก
สำหรับประเภทบิลด์หรือผลิตภัณฑ์แต่ละรายการ ไฟล์ต่อไปนี้แสดงการตั้งค่า
versionCode
และ versionName
ใน
บล็อก defaultConfig {}
รวมถึงบล็อก productFlavors {}
จากนั้นระบบจะผสานค่าเหล่านี้ลงในไฟล์ Manifest ของแอปในระหว่างกระบวนการสร้าง
Groovy
android { ... defaultConfig { ... versionCode 2 versionName "1.1" } productFlavors { demo { ... versionName "1.1-demo" } full { ... } } }
Kotlin
android { ... defaultConfig { ... versionCode = 2 versionName = "1.1" } productFlavors { create("demo") { ... versionName = "1.1-demo" } create("full") { ... } } }
ในบล็อก defaultConfig {}
ของตัวอย่างนี้ ค่า versionCode
ระบุว่า APK ปัจจุบันมีแอปเวอร์ชันที่ 2 และสตริง versionName
ระบุว่าแอปจะปรากฏต่อผู้ใช้เป็นเวอร์ชัน 1.1 ไฟล์นี้ยังกำหนด 2 รสชาติของผลิตภัณฑ์ ได้แก่
"demo" และ "full" เนื่องจาก Product Flavor "demo" กำหนด versionName
เป็น
"1.1-demo" บิลด์ "demo" จึงใช้ versionName
นี้แทนค่าเริ่มต้น
บล็อกรสชาติผลิตภัณฑ์ "full" ไม่ได้กำหนด versionName
ดังนั้นจึงใช้ค่าเริ่มต้นเป็น "1.1"
หมายเหตุ: หากแอปกำหนดเวอร์ชันแอปโดยตรงในองค์ประกอบ
<manifest>
ค่าเวอร์ชันในไฟล์บิลด์ Gradle จะลบล้างการตั้งค่าในไฟล์ Manifest
นอกจากนี้ การกำหนดการตั้งค่าเหล่านี้ในไฟล์บิลด์ Gradle ยังช่วยให้คุณระบุค่าที่แตกต่างกันสำหรับแอปเวอร์ชันต่างๆ ได้ด้วย เพื่อให้มีความยืดหยุ่นมากขึ้นและหลีกเลี่ยงการเขียนทับที่อาจเกิดขึ้นเมื่อผสานรวม Manifest ให้นำแอตทริบิวต์เหล่านี้ออกจากองค์ประกอบ <manifest>
แล้วกำหนดการตั้งค่าเวอร์ชันในไฟล์บิลด์ Gradle แทน
เฟรมเวิร์ก Android มี API ที่ช่วยให้คุณค้นหาข้อมูลเวอร์ชันเกี่ยวกับแอปในระบบได้
หากต้องการรับข้อมูลเวอร์ชัน ให้ใช้เมธอด
PackageManager.getPackageInfo(java.lang.String, int)
ระบุข้อกำหนดของระดับ API (เวอร์ชัน SDK)
หากแอปของคุณต้องใช้แพลตฟอร์ม Android เวอร์ชันขั้นต่ำที่เฉพาะเจาะจง คุณสามารถระบุข้อกำหนดด้านเวอร์ชันนั้นเป็นการตั้งค่าระดับ API
ในไฟล์ build.gradle
หรือ build.gradle.kts
ของแอป ในระหว่างกระบวนการบิลด์
ระบบจะผสานการตั้งค่าเหล่านี้ลงในไฟล์ Manifest ของแอป การระบุข้อกำหนดระดับ API
ช่วยให้มั่นใจได้ว่าแอปจะติดตั้งได้เฉพาะในอุปกรณ์ที่
ใช้แพลตฟอร์ม Android เวอร์ชันที่เข้ากันได้
หมายเหตุ: หากคุณระบุข้อกำหนดระดับ API โดยตรงในไฟล์ Manifest ของแอป
การตั้งค่าที่เกี่ยวข้องในไฟล์บิลด์จะ
ลบล้างการตั้งค่าในไฟล์ Manifest นอกจากนี้ การกำหนดการตั้งค่าเหล่านี้ในไฟล์บิลด์ Gradle ยังช่วยให้คุณระบุค่าที่แตกต่างกันสำหรับแอปเวอร์ชันต่างๆ ได้ด้วย เพื่อให้มีความยืดหยุ่นมากขึ้นและหลีกเลี่ยงการเขียนทับที่อาจเกิดขึ้นเมื่อผสานรวมไฟล์ Manifest ให้นำแอตทริบิวต์เหล่านี้ออกจากองค์ประกอบ <uses-sdk>
และกำหนดการตั้งค่าระดับ API ในไฟล์บิลด์ Gradle แทน
การตั้งค่าระดับ API มี 2 แบบ ได้แก่
minSdk
— เวอร์ชันต่ำสุด ของแพลตฟอร์ม Android ที่แอปจะทำงาน ซึ่งระบุ โดยตัวระบุระดับ API ของแพลตฟอร์มtargetSdk
— ระดับ API ที่เชื่อมโยงกับค่าคงที่<SDK_INT>
ซึ่งแอปได้รับการออกแบบมาให้ทำงาน ในบางกรณี การดำเนินการนี้จะช่วยให้แอปใช้องค์ประกอบของไฟล์ Manifest หรือลักษณะการทำงานที่กำหนดไว้ในระดับ API เป้าหมายได้ แทนที่จะถูกจำกัดให้ใช้เฉพาะองค์ประกอบที่กำหนดไว้สำหรับระดับ API ขั้นต่ำเท่านั้น
คุณไม่สามารถระบุว่าแอปกำหนดเป้าหมายหรือต้องใช้
SDK เวอร์ชันรอง หากต้องการเรียก API ใหม่ที่ต้องใช้ SDK เวอร์ชันหลัก
หรือเวอร์ชันย่อยที่สูงกว่า minSdkVersion
อย่างปลอดภัย คุณสามารถป้องกัน
บล็อกโค้ดด้วยการตรวจสอบการเผยแพร่เวอร์ชันย่อยหรือเวอร์ชันหลักโดยใช้ค่าคงที่ SDK_INT_FULL
if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) { // Use APIs introduced in a major or minor SDK version }
หากต้องการระบุข้อกำหนดเกี่ยวกับระดับ API เริ่มต้นในไฟล์ build.gradle
หรือ build.gradle.kts
ให้เพิ่มการตั้งค่าระดับ API อย่างน้อย 1 รายการลงในบล็อก defaultConfig{}
ที่ซ้อนอยู่ภายในบล็อก android {}
คุณยังลบล้างค่าเริ่มต้นเหล่านี้สำหรับแอปเวอร์ชันต่างๆ ได้ด้วยการเพิ่มการตั้งค่าลงในประเภทบิลด์หรือรสชาติของผลิตภัณฑ์
ไฟล์ต่อไปนี้ระบุการตั้งค่าเริ่มต้นสำหรับ minSdk
และ targetSdk
ในบล็อก defaultConfig {}
และลบล้าง minSdk
สำหรับผลิตภัณฑ์ 1 รายการ
Groovy
android { ... defaultConfig { ... minSdk 21 targetSdk 33 } productFlavors { main { ... } afterNougat { ... minSdk 24 } } }
Kotlin
android { ... defaultConfig { ... minSdk = 21 targetSdk = 33 } productFlavors { create("main") { ... } create("afterNougat") { ... minSdk = 24 } } }
เมื่อเตรียมติดตั้งแอป ระบบจะตรวจสอบค่าของการตั้งค่าเหล่านี้และเปรียบเทียบกับเวอร์ชันของระบบ หากค่า
minSdk
มากกว่าเวอร์ชันของระบบ ระบบจะไม่อนุญาตให้ติดตั้งแอป
หากคุณไม่ได้ระบุการตั้งค่าเหล่านี้ ระบบจะถือว่าแอปของคุณ
เข้ากันได้กับแพลตฟอร์มทุกเวอร์ชัน ซึ่งเทียบเท่ากับการตั้งค่า minSdk
เป็น
1
ดูข้อมูลเพิ่มเติมได้ที่ระดับ API คืออะไร สำหรับการตั้งค่าบิลด์ Gradle โปรดดูกำหนดค่าตัวแปรของบิลด์