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

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

แม้ว่าการสร้าง APK เดียวเพื่อรองรับอุปกรณ์เป้าหมายทั้งหมดจะดีกว่า หากเป็นไปได้ ก็อาจทำให้ APK ขนาดใหญ่มากเนื่องจากไฟล์ สนับสนุน หลายรายการ ความหนาแน่นของหน้าจอหรือไบนารีแอปพลิเคชัน 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 แต่ละรายการ

การตั้งค่านี้ช่วยให้จัดการทั้ง 2 หน้าจอได้อย่างสะดวกสบาย ความหนาแน่นและขนาดหน้าจอในส่วน 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 รายการดังกล่าวจากรายการความหนาแน่นทั้งหมดตามค่าเริ่มต้น

ดึงดูด

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

ดึงดูด

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 แผง Build Variants เพิ่มคอลัมน์ ABI ที่ใช้งานอยู่สำหรับ ที่มีโค้ดเนทีฟ/C++

ค่าตัวแปรบิลด์ที่ใช้งานอยู่สำหรับโมดูล กำหนดตัวแปรของบิลด์ที่ทำให้ใช้งานได้และมองเห็นได้ในตัวแก้ไข สำหรับโมดูลเนทีฟ ค่า 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 สำหรับ ABI x86 ได้รับ versionCode ของปี 2004 และ ABI x86_64 ได้รับ versionCode ของ 3004

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

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

ดึงดูด

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 แต่ละรายการ

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

ดึงดูด

...
  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 สำหรับต่อ ABI APK, Gradle ใช้ universal เป็นส่วน ABI ของ APK สากล ชื่อไฟล์

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

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