สร้าง APK หลายรายการ

ข้อควรระวัง: ตั้งแต่เดือนสิงหาคม 2021 เป็นต้นไป แอปใหม่ทั้งหมดต้องเผยแพร่เป็น App Bundle หากคุณเผยแพร่แอปใน Google Play ให้สร้างและอัปโหลด Android App Bundle เมื่อคุณเผยแพร่ APK หลายรายการ Google Play จะสร้างและแสดง APK ที่เพิ่มประสิทธิภาพสำหรับการกำหนดค่าอุปกรณ์ของผู้ใช้แต่ละรายโดยอัตโนมัติ เพื่อให้ผู้ใช้ดาวน์โหลดเฉพาะโค้ดและทรัพยากรที่จําเป็นต่อการใช้งานแอป การเผยแพร่ APK หลายรายการมีประโยชน์ในกรณีที่คุณเผยแพร่ไปยัง Store ที่ไม่รองรับรูปแบบ AAB ในกรณีนี้ คุณต้องสร้าง รับรอง และจัดการ APK แต่ละรายการด้วยตนเอง

แม้ว่าการสร้าง APK รายการเดียวเพื่อรองรับอุปกรณ์เป้าหมายทั้งหมดจะดีกว่าเมื่อเป็นไปได้ แต่อาจส่งผลให้ APK มีขนาดใหญ่มากเนื่องจากไฟล์รองรับ ความหนาแน่นของหน้าจอหรือ Application Binary Interface (ABI) หลายรายการ วิธีหนึ่งในการลดขนาด APK คือการสร้าง APK หลายรายการที่มีไฟล์สำหรับความหนาแน่นของหน้าจอหรือ ABI ที่เฉพาะเจาะจง

Gradle สร้าง APK แยกต่างหากที่มีเฉพาะโค้ดและทรัพยากรสำหรับแต่ละความหนาแน่นหรือ ABI ได้ หน้านี้จะอธิบายวิธีกำหนดค่าบิลด์เพื่อสร้าง APK หลายรายการ หากต้องการสร้างแอปเวอร์ชันต่างๆ ที่ไม่ได้อิงตามความหนาแน่นของหน้าจอหรือ ABI ให้ใช้ตัวแปรของบิลด์แทน

กำหนดค่าบิลด์สำหรับ APK หลายรายการ

หากต้องการกำหนดค่าบิลด์สำหรับ APK หลายรายการ ให้เพิ่มบล็อก splits ลงในไฟล์ build.gradle ระดับโมดูล ภายในบล็อก splits ให้ใส่บล็อก density ที่ระบุวิธีที่ต้องการให้ Gradle สร้าง APK ตามความหนาแน่น หรือบล็อก abi ที่ระบุวิธีที่ต้องการให้ Gradle สร้าง APK ตาม ABI คุณสามารถระบุทั้งบล็อกความหนาแน่นและ ABI แล้วระบบบิลด์จะสร้าง APK สำหรับการรวมความหนาแน่นและ ABI แต่ละรายการ

กำหนดค่า APK หลายรายการสำหรับความหนาแน่นของหน้าจอ

หากต้องการสร้าง APK แยกต่างหากสำหรับความหนาแน่นหน้าจอที่แตกต่างกัน ให้เพิ่มบล็อก density ไว้ในบล็อก splits ในบล็อก density ให้ระบุรายการความหนาแน่นของหน้าจอที่ต้องการและขนาดหน้าจอที่เข้ากันได้ ใช้รายการขนาดหน้าจอที่เข้ากันได้เฉพาะในกรณีที่คุณต้องการองค์ประกอบ <compatible-screens> ที่เฉพาะเจาะจงในไฟล์ Manifest ของ APK แต่ละรายการ

ตัวเลือก Gradle DSL ต่อไปนี้ใช้เพื่อกำหนดค่า APK หลายรายการสำหรับความหนาแน่นของหน้าจอ

enable สำหรับ Groovy, isEnable สำหรับสคริปต์ Kotlin
หากคุณตั้งค่าองค์ประกอบนี้เป็น true ทาง Gradle จะสร้าง APK หลายรายการโดยอิงตามความหนาแน่นของหน้าจอที่คุณกำหนด ค่าเริ่มต้นคือ false
exclude
ระบุรายการความละเอียดที่คั่นด้วยคอมมาซึ่งคุณไม่ต้องการให้ Gradle สร้าง APK แยกต่างหาก ใช้ exclude หากต้องการสร้าง APK สำหรับความละเอียดส่วนใหญ่ แต่ต้องยกเว้นความละเอียดบางรายการที่แอปไม่รองรับ
reset()

ล้างรายการความหนาแน่นของหน้าจอเริ่มต้น ใช้เฉพาะเมื่อรวมกับองค์ประกอบ include เพื่อระบุความหนาแน่นที่ต้องการเพิ่ม

ข้อมูลโค้ดต่อไปนี้จะตั้งค่ารายการความหนาแน่นเป็นแค่ ldpi และ xxhdpi โดยการเรียกใช้ reset() เพื่อล้างรายการ แล้วใช้ include

reset()                  // Clears the default list from all densities
                         // to no densities.
include "ldpi", "xxhdpi" // Specifies the two densities to generate APKs
                         // for.
include
ระบุรายการความหนาแน่นที่คุณต้องการให้ Gradle สร้าง APK โดยคั่นด้วยคอมมา ใช้ร่วมกับ reset() เพื่อระบุรายการความหนาแน่นที่แน่นอนเท่านั้น
compatibleScreens

ระบุรายการขนาดหน้าจอที่เข้ากันได้โดยคั่นด้วยคอมมา ซึ่งจะแทรกโหนด <compatible-screens> ที่ตรงกันในไฟล์ Manifest สําหรับ APK แต่ละรายการ

การตั้งค่านี้ช่วยให้คุณจัดการทั้งความหนาแน่นของหน้าจอและขนาดหน้าจอได้สะดวกในส่วน build.gradle เดียวกัน อย่างไรก็ตาม การใช้ <compatible-screens> อาจจํากัดประเภทอุปกรณ์ที่แอปของคุณใช้ได้ ดูวิธีอื่นๆ ในการรองรับหน้าจอขนาดต่างๆ ได้ที่ภาพรวมความเข้ากันได้ของหน้าจอ

เนื่องจาก APK แต่ละรายการที่อิงตามความหนาแน่นของหน้าจอจะมีแท็ก <compatible-screens> ที่มีข้อจำกัดเฉพาะเกี่ยวกับประเภทหน้าจอที่ APK รองรับ แม้ว่าคุณจะเผยแพร่ APK หลายรายการก็ตาม อุปกรณ์ใหม่บางรุ่นจึงอาจไม่ตรงกับตัวกรอง APK หลายรายการ ดังนั้น Gradle จะสร้าง APK สากลเพิ่มเติมที่มีชิ้นงานสำหรับความหนาแน่นของหน้าจอทั้งหมดและไม่รวมแท็ก <compatible-screens> ไว้เสมอ เผยแพร่ APK สากลนี้พร้อมกับ APK ตามความหนาแน่นเพื่อใช้เป็นทางเลือกสําหรับอุปกรณ์ที่ไม่ตรงกับ APK ที่มีแท็ก <compatible-screens>

ตัวอย่างต่อไปนี้จะสร้าง APK แยกต่างหากสำหรับความหนาแน่นของหน้าจอแต่ละแบบ ยกเว้น ldpi, xxhdpi และ xxxhdpi ซึ่งทำได้โดยใช้ exclude เพื่อนำความหนาแน่น 3 รายการดังกล่าวออกจากรายการความหนาแน่นทั้งหมดที่เป็นค่าเริ่มต้น

Groovy

android {
  ...
  splits {

    // Configures multiple APKs based on screen density.
    density {

      // Configures multiple APKs based on screen density.
      enable true

      // Specifies a list of screen densities you don't want Gradle to create multiple APKs for.
      exclude "ldpi", "xxhdpi", "xxxhdpi"

      // Specifies a list of compatible screen size settings for the manifest.
      compatibleScreens 'small', 'normal', 'large', 'xlarge'
    }
  }
}

Kotlin

android {
    ...
    splits {

        // Configures multiple APKs based on screen density.
        density {

            // Configures multiple APKs based on screen density.
            isEnable = true

            // Specifies a list of screen densities you don't want Gradle to create multiple APKs for.
            exclude("ldpi", "xxhdpi", "xxxhdpi")

            // Specifies a list of compatible screen size settings for the manifest.
            compatibleScreens("small", "normal", "large", "xlarge")
        }
    }
}

ดูรายละเอียดเพิ่มเติมเกี่ยวกับการปรับแต่งตัวแปรต่างๆ ของบิลด์แอปให้เหมาะกับประเภทหน้าจอและอุปกรณ์ที่เฉพาะเจาะจงได้ที่ประกาศการรองรับหน้าจอแบบจำกัด

กำหนดค่า APK หลายรายการสำหรับ ABI

หากต้องการสร้าง APK แยกต่างหากสำหรับ ABI ที่แตกต่างกัน ให้เพิ่มบล็อก abi เข้าไปในบล็อก splits ในบล็อก abi ให้ระบุรายการ ABI ที่ต้องการ

ตัวเลือก Gradle DSL ต่อไปนี้ใช้เพื่อกำหนดค่า APK หลายรายการต่อ ABI

enable สำหรับ Groovy หรือ isEnable สำหรับสคริปต์ Kotlin
หากคุณตั้งค่าองค์ประกอบนี้เป็น true ทาง Gradle จะสร้าง APK หลายรายการตาม ABI ที่คุณกำหนด ค่าเริ่มต้นคือ false
exclude
ระบุรายการ ABI ที่คั่นด้วยคอมมาซึ่งคุณไม่ต้องการให้ Gradle สร้าง APK แยกต่างหาก ใช้ exclude หากต้องการสร้าง APK สำหรับ ABI ส่วนใหญ่ แต่ต้องยกเว้น ABI บางรายการที่แอปของคุณไม่รองรับ
reset()

ล้างรายการ ABI เริ่มต้น ใช้เฉพาะเมื่อรวมกับองค์ประกอบ include เพื่อระบุ ABI ที่ต้องการเพิ่ม

ข้อมูลโค้ดต่อไปนี้จะตั้งค่ารายการ ABI เป็น x86 และ x86_64 เท่านั้นโดยการเรียกใช้ reset() เพื่อล้างรายการ แล้วใช้ include

reset()                 // Clears the default list from all ABIs to no ABIs.
include "x86", "x86_64" // Specifies the two ABIs we want to generate APKs for.
include
ระบุรายการ ABI ที่คั่นด้วยคอมมาซึ่งคุณต้องการให้ Gradle สร้าง APK ขึ้นสำหรับ ใช้ร่วมกับ reset() เพื่อระบุรายการ ABI ที่แน่นอนเท่านั้น
universalApk สำหรับ Groovy หรือ isUniversalApk สำหรับสคริปต์ Kotlin

หากเป็น true แสดงว่า Gradle จะสร้าง APK สากลนอกเหนือจาก APK สำหรับแต่ละ ABI APK สากลมีโค้ดและทรัพยากรสําหรับ ABI ทั้งหมดใน APK เดียว ค่าเริ่มต้นคือ false

โปรดทราบว่าตัวเลือกนี้จะใช้ได้ในบล็อก splits.abi เท่านั้น เมื่อสร้าง APK หลายรายการตามความหนาแน่นของหน้าจอ Gradle จะสร้าง APK สากลที่มีโค้ดและทรัพยากรสำหรับความหนาแน่นของหน้าจอทั้งหมดเสมอ

ตัวอย่างต่อไปนี้จะสร้าง APK แยกกันสำหรับ ABI แต่ละรายการ ได้แก่ x86 และ x86_64 ซึ่งทำได้โดยใช้ reset() เพื่อเริ่มต้นด้วยรายการ ABI ว่างเปล่า ตามด้วย include ที่มีรายการ ABI แต่ละรายการที่มี APK

Groovy

android {
  ...
  splits {

    // Configures multiple APKs based on ABI.
    abi {

      // Enables building multiple APKs per ABI.
      enable true

      // By default all ABIs are included, so use reset() and include to specify that you only
      // want APKs for x86 and x86_64.

      // Resets the list of ABIs for Gradle to create APKs for to none.
      reset()

      // Specifies a list of ABIs for Gradle to create APKs for.
      include "x86", "x86_64"

      // Specifies that you don't want to also generate a universal APK that includes all ABIs.
      universalApk false
    }
  }
}

Kotlin

android {
  ...
  splits {

    // Configures multiple APKs based on ABI.
    abi {

      // Enables building multiple APKs per ABI.
      isEnable = true

      // By default all ABIs are included, so use reset() and include to specify that you only
      // want APKs for x86 and x86_64.

      // Resets the list of ABIs for Gradle to create APKs for to none.
      reset()

      // Specifies a list of ABIs for Gradle to create APKs for.
      include("x86", "x86_64")

      // Specifies that you don't want to also generate a universal APK that includes all ABIs.
      isUniversalApk = false
    }
  }
}

โปรดดูรายการ ABI ที่รองรับที่หัวข้อABI ที่รองรับ

โปรเจ็กต์ที่ไม่มีโค้ดเนทีฟ/C++

สำหรับโปรเจ็กต์ที่ไม่มีโค้ดเนทีฟ/C++ แผงตัวแปรการสร้างจะมี 2 คอลัมน์ ได้แก่ โมดูลและตัวแปรการสร้างที่ใช้งานอยู่ ดังที่แสดงในรูปที่ 1

แผงตัวแปรของบิวด์
รูปที่ 1 แผงสร้างตัวแปรมีคอลัมน์ 2 คอลัมน์สําหรับโปรเจ็กต์ที่ไม่มีโค้ดเนทีฟ/C++

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

โปรเจ็กต์ที่มีโค้ดเนทีฟ/C++

สำหรับโปรเจ็กต์ที่มีโค้ดเนทีฟ/C++ แผงตัวแปรของบิลด์จะมี 3 คอลัมน์ ได้แก่ โมดูล ตัวแปรของบิลด์ที่ใช้งานอยู่ และ ABI ที่ใช้งานอยู่ ดังที่แสดงในรูปที่ 2

รูปที่ 2 แผงตัวแปรการสร้างจะเพิ่มคอลัมน์ Active ABI สำหรับโปรเจ็กต์ที่มีโค้ดเนทีฟ/C++

ค่าตัวแปรบิลด์ที่ใช้งานอยู่ของโมดูลจะกำหนดตัวแปรบิลด์ที่ติดตั้งใช้งานและปรากฏในเครื่องมือแก้ไข สําหรับโมดูลเนทีฟ ค่า Active ABI จะกําหนด ABI ที่เครื่องมือแก้ไขใช้ แต่ไม่ส่งผลต่อสิ่งที่จะติดตั้งใช้งาน

วิธีเปลี่ยนประเภทบิลด์หรือ ABI

  1. คลิกเซลล์ของคอลัมน์ตัวแปรรุ่นที่ใช้งานอยู่หรือABI ที่ใช้งานอยู่
  2. เลือกตัวแปรหรือ ABI ที่ต้องการจากช่องรายการ การซิงค์ใหม่จะทำงานโดยอัตโนมัติ

การเปลี่ยนแปลงคอลัมน์ใดคอลัมน์หนึ่งสำหรับโมดูลแอปหรือไลบรารีจะมีผลกับแถวที่เกี่ยวข้องทั้งหมด

กำหนดค่าการระบุเวอร์ชัน

โดยค่าเริ่มต้น เมื่อ Gradle สร้าง APK หลายรายการ APK แต่ละรายการจะมีข้อมูลเวอร์ชันเดียวกันตามที่ระบุไว้ในไฟล์ build.gradle หรือ build.gradle.kts ระดับโมดูล เนื่องจาก Google Play Store ไม่อนุญาตให้แอปเดียวกันมี APK หลายรายการที่มีข้อมูลเวอร์ชันเดียวกัน คุณจึงต้องตรวจสอบว่า APK แต่ละรายการมี versionCode ที่ไม่ซ้ำกันก่อนอัปโหลดไปยัง Play Store

คุณสามารถกําหนดค่าไฟล์ build.gradle ระดับโมดูลเพื่อลบล้าง versionCode สําหรับแต่ละ APK ได้ การสร้างการแมปซึ่งกําหนดค่าตัวเลขที่ไม่ซ้ำกันสําหรับ ABI และความละเอียดแต่ละรายการที่คุณกําหนดค่า APK หลายรายการไว้จะช่วยให้คุณลบล้างรหัสเวอร์ชันเอาต์พุตด้วยค่าที่รวมรหัสเวอร์ชันที่กําหนดภายในบล็อก defaultConfig หรือ productFlavors เข้ากับค่าตัวเลขที่กําหนดให้กับความละเอียดหรือ ABI ได้

ในตัวอย่างต่อไปนี้ APK สําหรับ x86 ABI ได้ versionCode เป็น 2004 และ x86_64 ABI ได้ versionCode เป็น 3004

การกำหนดรหัสเวอร์ชันแบบเพิ่มทีละมากๆ เช่น 1,000 จะช่วยให้คุณกำหนดรหัสเวอร์ชันที่ไม่ซ้ำกันในภายหลังได้หากต้องการอัปเดตแอป เช่น หาก defaultConfig.versionCode ซ้ำเป็น 5 ในการอัปเดตครั้งถัดไป Gradle จะกำหนด versionCode เป็น 2005 ให้กับ APK x86 และ 3005 ให้กับ APK x86_64

เคล็ดลับ: หากบิลด์มี APK สากล ให้กําหนด versionCode ของ APK นั้นให้ต่ำกว่า APK อื่นๆ เนื่องจาก Google Play Store จะติดตั้งแอปเวอร์ชันที่เข้ากันได้กับอุปกรณ์เป้าหมายและมี versionCode สูงสุด การกำหนด versionCode ที่ต่ำกว่าให้กับ APK สากลจะช่วยให้มั่นใจได้ว่า Google Play Store จะพยายามติดตั้ง APK รายการใดรายการหนึ่งของคุณก่อนที่จะเปลี่ยนไปใช้ APK สากล โค้ดตัวอย่างต่อไปนี้จะจัดการเรื่องนี้โดยไม่ลบล้าง versionCode เริ่มต้นของ APK แบบ Universal

Groovy

android {
  ...
  defaultConfig {
    ...
    versionCode 4
  }
  splits {
    ...
  }
}

// Map for the version code that gives each ABI a value.
ext.abiCodes = ['armeabi-v7a':1, x86:2, x86_64:3]

// For per-density APKs, create a similar map:
// ext.densityCodes = ['mdpi': 1, 'hdpi': 2, 'xhdpi': 3]

import com.android.build.OutputFile

// For each APK output variant, override versionCode with a combination of
// ext.abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
// is equal to defaultConfig.versionCode. If you configure product flavors that
// define their own versionCode, variant.versionCode uses that value instead.
android.applicationVariants.all { variant ->

  // Assigns a different version code for each output APK
  // other than the universal APK.
  variant.outputs.each { output ->

    // Stores the value of ext.abiCodes that is associated with the ABI for this variant.
    def baseAbiVersionCode =
            // Determines the ABI for this variant and returns the mapped value.
            project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))

    // Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
    // the following code doesn't override the version code for universal APKs.
    // However, because you want universal APKs to have the lowest version code,
    // this outcome is desirable.
    if (baseAbiVersionCode != null) {

      // Assigns the new version code to versionCodeOverride, which changes the
      // version code for only the output APK, not for the variant itself. Skipping
      // this step causes Gradle to use the value of variant.versionCode for the APK.
      output.versionCodeOverride =
              baseAbiVersionCode * 1000 + variant.versionCode
    }
  }
}

Kotlin

android {
  ...
  defaultConfig {
    ...
    versionCode = 4
  }
  splits {
    ...
  }
}

// Map for the version code that gives each ABI a value.
val abiCodes = mapOf("armeabi-v7a" to 1, "x86" to 2, "x86_64" to 3)

// For per-density APKs, create a similar map:
// val densityCodes = mapOf("mdpi" to 1, "hdpi" to 2, "xhdpi" to 3)

import com.android.build.api.variant.FilterConfiguration.FilterType.*

// For each APK output variant, override versionCode with a combination of
// abiCodes * 1000 + variant.versionCode. In this example, variant.versionCode
// is equal to defaultConfig.versionCode. If you configure product flavors that
// define their own versionCode, variant.versionCode uses that value instead.
androidComponents {
    onVariants { variant ->

        // Assigns a different version code for each output APK
        // other than the universal APK.
        variant.outputs.forEach { output ->
            val name = output.filters.find { it.filterType == ABI }?.identifier

            // Stores the value of abiCodes that is associated with the ABI for this variant.
            val baseAbiCode = abiCodes[name]
            // Because abiCodes.get() returns null for ABIs that are not mapped by ext.abiCodes,
            // the following code doesn't override the version code for universal APKs.
            // However, because you want universal APKs to have the lowest version code,
            // this outcome is desirable.
            if (baseAbiCode != null) {
                // Assigns the new version code to output.versionCode, which changes the version code
                // for only the output APK, not for the variant itself.
                output.versionCode.set(baseAbiCode * 1000 + (output.versionCode.get() ?: 0))
            }
        }
    }
}

ดูตัวอย่างเพิ่มเติมของรูปแบบรหัสเวอร์ชันอื่นได้ที่ การกำหนดรหัสเวอร์ชัน

สร้าง APK หลายรายการ

เมื่อกำหนดค่าไฟล์ build.gradle หรือ build.gradle.kts ระดับโมดูลเพื่อสร้าง APK หลายรายการแล้ว ให้คลิกสร้าง > สร้าง APK เพื่อสร้าง APK ทั้งหมดสำหรับโมดูลที่เลือกอยู่ในแผงโปรเจ็กต์ Gradle จะสร้าง APK สำหรับความหนาแน่นหรือ ABI แต่ละรายการในไดเรกทอรี build/outputs/apk/ ของโปรเจ็กต์

Gradle จะสร้าง APK สำหรับความหนาแน่นหรือ ABI แต่ละรายการที่คุณกำหนดค่า APK หลายรายการไว้ หากคุณเปิดใช้ APK หลายรายการสำหรับทั้งความหนาแน่นและ ABI นั้น Gradle จะสร้าง APK สำหรับการรวมความหนาแน่นและ ABI แต่ละรายการ

ตัวอย่างเช่น ข้อมูลโค้ด build.gradle ต่อไปนี้ช่วยให้คุณสร้าง APK หลายรายการสำหรับความหนาแน่น mdpi และ hdpi รวมถึง ABI x86 และ x86_64 ได้

Groovy

...
  splits {
    density {
      enable true
      reset()
      include "mdpi", "hdpi"
    }
    abi {
      enable true
      reset()
      include "x86", "x86_64"
    }
  }

Kotlin

...
  splits {
    density {
      isEnable = true
      reset()
      include("mdpi", "hdpi")
    }
    abi {
      isEnable = true
      reset()
      include("x86", "x86_64")
    }
  }

เอาต์พุตจากการกําหนดค่าตัวอย่างมี APK 4 รายการต่อไปนี้

  • app-hdpiX86-release.apk: มีโค้ดและทรัพยากรสำหรับความหนาแน่น hdpi และ ABI x86
  • app-hdpiX86_64-release.apk: มีโค้ดและทรัพยากรสำหรับความหนาแน่น hdpi และ ABI x86_64
  • app-mdpiX86-release.apk: มีโค้ดและทรัพยากรสำหรับความหนาแน่น mdpi และ ABI x86
  • app-mdpiX86_64-release.apk: มีโค้ดและทรัพยากรสำหรับความหนาแน่น mdpi และ ABI x86_64

เมื่อสร้าง APK หลายรายการตามความหนาแน่นของหน้าจอ Gradle จะสร้าง APK สากลที่มีโค้ดและทรัพยากรสำหรับความหนาแน่นทั้งหมดเสมอ นอกเหนือจาก APK ตามความหนาแน่น

เมื่อสร้าง APK หลายรายการตาม ABI นั้น Gradle จะสร้างเฉพาะ APK ที่มีโค้ดและทรัพยากรสำหรับ ABI ทั้งหมดหากคุณระบุ universalApk true ในบล็อก splits.abi ในไฟล์ build.gradle (สำหรับ Groovy) หรือ isUniversalApk = true ในบล็อก splits.abi ในไฟล์ build.gradle.kts (สำหรับสคริปต์ Kotlin)

รูปแบบชื่อไฟล์ APK

เมื่อสร้าง APK หลายรายการ Gradle จะสร้างชื่อไฟล์ APK โดยใช้รูปแบบต่อไปนี้

modulename-screendensityABI-buildvariant.apk

คอมโพเนนต์รูปแบบมีดังนี้

modulename
ระบุชื่อโมดูลที่สร้าง
screendensity
หากเปิดใช้ APK หลายรายการสำหรับความหนาแน่นของหน้าจอ ให้ระบุความหนาแน่นของหน้าจอสำหรับ APK เช่น mdpi
ABI

หากเปิดใช้ APK หลายรายการสำหรับ ABI ให้ระบุ ABI สำหรับ APK เช่น x86

หากเปิดใช้ APK หลายรายการสำหรับทั้งความหนาแน่นของหน้าจอและ ABI Gradle จะต่อชื่อความหนาแน่นเข้ากับชื่อ ABI เช่น mdpiX86 หากเปิดใช้ universalApk สำหรับ APK ตาม ABI Gradle จะใช้ universal เป็นส่วนที่เกี่ยวกับ ABI ของชื่อไฟล์ APK แบบสากล

buildvariant
ระบุตัวแปรของบิวด์ที่สร้าง เช่น debug

ตัวอย่างเช่น เมื่อสร้าง APK ความหนาแน่นของหน้าจอ mdpi สำหรับเวอร์ชันแก้ไขข้อบกพร่องของ myApp ชื่อไฟล์ APK จะเป็น myApp-mdpi-debug.apk เวอร์ชันรุ่นของ myApp ที่กําหนดค่าให้สร้าง APK หลายรายการสําหรับทั้งความหนาแน่นของหน้าจอ mdpi และ ABI x86 มีชื่อไฟล์ APK ว่า myApp-mdpiX86-release.apk