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

การกำหนดเวอร์ชันเป็นองค์ประกอบสำคัญของกลยุทธ์การอัปเกรดและการบำรุงรักษาแอป การกำหนดเวอร์ชันมีความสำคัญเนื่องจากเหตุผลต่อไปนี้

  • ผู้ใช้ต้องมีข้อมูลเฉพาะเกี่ยวกับเวอร์ชันของแอปที่ ติดตั้งในอุปกรณ์และเวอร์ชันอัปเกรดที่พร้อมให้ ติดตั้ง
  • แอปอื่นๆ ซึ่งรวมถึงแอปอื่นๆ ที่คุณเผยแพร่เป็น ชุดแอป จะต้องค้นหาเวอร์ชันของแอปในระบบเพื่อ พิจารณาความเข้ากันได้และระบุการอ้างอิง
  • บริการที่คุณเผยแพร่แอปอาจต้อง ค้นหาเวอร์ชันของแอปเพื่อให้แสดงเวอร์ชันแก่ผู้ใช้ได้ นอกจากนี้ บริการเผยแพร่อาจต้องตรวจสอบเวอร์ชันของแอปเพื่อ พิจารณาความเข้ากันได้และสร้างความสัมพันธ์ในการอัปเกรด/ดาวน์เกรด

ระบบ 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 โปรดดูกำหนดค่าตัวแปรของบิลด์