ลดขนาดแอป

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

อัปโหลดแอปด้วย Android App Bundle

อัปโหลดแอปเป็น Android App Bundle เพื่อประหยัดขนาดแอปทันทีเมื่อเผยแพร่ไปยัง Google Play Android App Bundle เป็นรูปแบบการอัปโหลดที่มีโค้ดและทรัพยากรที่คอมไพล์แล้วทั้งหมดของแอป แต่เลื่อนการสร้างและการลงนาม APK ไปยัง Google Play

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

Google Play บังคับใช้ข้อจำกัดขนาดการดาวน์โหลดที่บีบอัด 200 MB สำหรับแอปที่เผยแพร่ด้วย App Bundle คุณอาจใช้ขนาดที่ใหญ่ขึ้นได้โดยใช้ Play Feature Delivery และ Play Asset Delivery แต่การเพิ่มขนาดของแอปอาจส่งผลเสียต่อความสำเร็จในการติดตั้งและเพิ่มการถอนการติดตั้ง เราจึงขอแนะนำให้คุณใช้หลักเกณฑ์ที่อธิบายไว้ในหน้านี้เพื่อลดขนาดการดาวน์โหลดของแอปให้มากที่สุด

ทำความเข้าใจโครงสร้าง APK

ก่อนลดขนาดแอป คุณควรทำความเข้าใจโครงสร้างของ APK ของแอป ไฟล์ APK ประกอบด้วยไฟล์เก็บถาวร ZIP ที่มีไฟล์ทั้งหมดที่ประกอบด้วยแอปของคุณ ไฟล์เหล่านี้รวมถึงไฟล์คลาส Java ไฟล์ทรัพยากร และไฟล์ที่มีทรัพยากรที่คอมไพล์แล้ว

APK มีไดเรกทอรีต่อไปนี้

  • META-INF/: มีไฟล์ลายเซ็น CERT.SF และ CERT.RSA รวมถึงไฟล์ Manifest MANIFEST.MF
  • assets/: มีชิ้นงานของแอป ซึ่งแอปจะเรียกข้อมูลได้โดยใช้ออบเจ็กต์ AssetManager
  • res/: มีทรัพยากรที่ไม่ได้คอมไพล์เป็น resources.arsc
  • lib/: มีโค้ดที่คอมไพล์แล้วซึ่งเจาะจงสำหรับเลเยอร์ซอฟต์แวร์ของโปรเซสเซอร์ ไดเรกทอรีนี้มีไดเรกทอรีย่อยสำหรับแพลตฟอร์มแต่ละประเภท เช่น armeabi, armeabi-v7a, arm64-v8a, x86, x86_64 และ mips

APK จะมีไฟล์ต่อไปนี้ด้วย เฉพาะ AndroidManifest.xml เท่านั้นที่ต้องระบุ

  • resources.arsc: มีทรัพยากรที่คอมไพล์แล้ว ไฟล์นี้มีเนื้อหา XML จากการกำหนดค่าทั้งหมดของโฟลเดอร์ res/values/ เครื่องมือแพ็กเกจจะดึงข้อมูลเนื้อหา XML นี้ คอมไพล์เป็นรูปแบบไบนารี และเก็บเนื้อหา เนื้อหานี้ประกอบด้วยสตริงและสไตล์ภาษา รวมถึงเส้นทางไปยังเนื้อหาที่ไม่ได้รวมอยู่ในไฟล์ resources.arsc โดยตรง เช่น ไฟล์เลย์เอาต์และรูปภาพ
  • classes.dex: มีคลาสที่คอมไพล์ในรูปแบบไฟล์ DEX ซึ่งเครื่องเสมือน Dalvik หรือ ART เข้าใจ
  • AndroidManifest.xml: มีไฟล์ Manifest หลักของ Android ไฟล์นี้จะแสดงชื่อ เวอร์ชัน สิทธิ์เข้าถึง และไฟล์ไลบรารีที่อ้างอิงของแอป โดยไฟล์จะใช้รูปแบบ XML แบบไบนารีของ Android

ลดจำนวนและขนาดของทรัพยากร

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

นำทรัพยากรที่ไม่ได้ใช้ออก

เครื่องมือ lint ซึ่งเป็นเครื่องมือวิเคราะห์โค้ดแบบคงที่ที่รวมอยู่ใน Android Studio จะตรวจหาทรัพยากรในโฟลเดอร์ res/ ที่ไม่ได้อ้างอิงโดยโค้ด เมื่อเครื่องมือ lint ค้นพบทรัพยากรที่อาจไม่ได้ใช้งานในโปรเจ็กต์ของคุณ จะพิมพ์ข้อความตามตัวอย่างต่อไปนี้

res/layout/preferences.xml: Warning: The resource R.layout.preferences appears
    to be unused [UnusedResources]

ไลบรารีที่คุณเพิ่มลงในโค้ดอาจมีทรัพยากรที่ไม่ได้ใช้ Gradle นำทรัพยากรในนามของคุณออกโดยอัตโนมัติหากคุณเปิดใช้ shrinkResources ในไฟล์ build.gradle.kts ของแอป

Kotlin

android {
    // Other settings.

    buildTypes {
        getByName("release") {
            minifyEnabled = true
            shrinkResources = true
            proguardFiles(getDefaultProguardFile('proguard-android.txt'), "proguard-rules.pro")
        }
    }
}

Groovy

android {
    // Other settings.

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

หากต้องการใช้ shrinkResources ให้เปิดใช้การย่อโค้ด ในระหว่างกระบวนการสร้าง R8 จะนําโค้ดที่ไม่ได้ใช้ออกก่อน จากนั้นปลั๊กอิน Android Gradle จะนำทรัพยากรที่ไม่ได้ใช้ออก

ดูข้อมูลเพิ่มเติมเกี่ยวกับการย่อโค้ดและทรัพยากร และวิธีอื่นๆ ที่ Android Studio ลดขนาด APK ได้ที่ลดขนาด ปรับให้ยากต่อการอ่าน (Obfuscate) และเพิ่มประสิทธิภาพแอป

ในปลั๊กอิน Android Gradle 7.0 ขึ้นไป คุณสามารถประกาศการกำหนดค่าที่แอปรองรับ Gradle จะส่งข้อมูลนี้ไปยังระบบบิลด์โดยใช้ตัวเลือก resourceConfigurations กับฟีเจอร์defaultConfig จากนั้นระบบป้องกันไม่ให้ทรัพยากรจากการกำหนดค่าอื่นๆ ที่ไม่ได้รับการสนับสนุนปรากฏใน APK ซึ่งจะลดขนาดของ APK ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ได้ที่นำทรัพยากรทางเลือกที่ไม่ได้ใช้ออก

ลดการใช้ทรัพยากรจากคลัง

เมื่อพัฒนาแอป Android โดยปกติแล้วคุณจะใช้ไลบรารีภายนอกเพื่อเพิ่มความสามารถในการใช้งานและความอเนกประสงค์ของแอป ตัวอย่างเช่น คุณอาจอ้างอิง AndroidX เพื่อปรับปรุงประสบการณ์ของผู้ใช้บนอุปกรณ์รุ่นเก่า หรือจะใช้ Google Play Services เพื่อดึงข้อมูลการแปลข้อความภายในแอปโดยอัตโนมัติก็ได้

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

การถอดรหัสภาพเคลื่อนไหวแบบเนทีฟ

ใน Android 12 (API ระดับ 31) ระบบจะขยายการทำงานของ NDK ImageDecoder API เพื่อถอดรหัสเฟรมและข้อมูลการจับเวลาทั้งหมดจากรูปภาพที่ใช้รูปแบบไฟล์ GIF แบบเคลื่อนไหวและ WebP แบบเคลื่อนไหว

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

ดูรายละเอียดเพิ่มเติมเกี่ยวกับ ImageDecoder API ได้ที่ API reference และตัวอย่าง ใน GitHub

รองรับเฉพาะความหนาแน่นที่เจาะจง

Android รองรับความหนาแน่นของหน้าจอที่ต่างกัน เช่น ต่อไปนี้

  • ldpi
  • mdpi
  • tvdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

แม้ว่า Android จะรองรับความหนาแน่นข้างต้น แต่คุณไม่จำเป็นต้องส่งออกชิ้นงานที่แรสเตอร์ไปยังความหนาแน่นแต่ละแบบ

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

หากแอปต้องใช้เฉพาะรูปภาพที่ปรับขนาดแล้ว คุณจะประหยัดพื้นที่ได้มากขึ้นด้วยการใช้รูปภาพรูปแบบเดียวใน drawable-nodpi/ เราขอแนะนำให้คุณใส่รูปภาพอย่างน้อย xxhdpi รูปแบบในแอป

ดูข้อมูลเพิ่มเติมเกี่ยวกับความหนาแน่นของหน้าจอได้ที่หัวข้อขนาดและความหนาแน่นของหน้าจอ

ใช้ออบเจ็กต์ที่วาดได้

บางรูปภาพไม่จำเป็นต้องใช้ทรัพยากรภาพนิ่ง เฟรมเวิร์กสามารถวาดรูปแบบไดนามิก ขณะรันไทม์แทน ออบเจ็กต์ Drawable หรือ <shape> ใน XML อาจใช้พื้นที่ใน APK เพียงเล็กน้อย นอกจากนี้ ออบเจ็กต์ XML Drawable ยังสร้างรูปภาพโมโนโครมซึ่งเป็นไปตามหลักเกณฑ์ของดีไซน์ Material

ใช้ทรัพยากรซ้ำ

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

Android มียูทิลิตีมากมายในการเปลี่ยนสีของเนื้อหา โดยใช้แอตทริบิวต์ android:tint และ tintMode

นอกจากนี้ คุณยังละเว้นทรัพยากรที่เหมือนกับทรัพยากรอื่นเพียงแค่หมุนเท่านั้นได้ด้วย ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการเปลี่ยน "ชอบ" เป็น "ไม่ชอบ" โดยหมุนที่ตรงกลางรูปภาพและบิด 180 องศา

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_thumb_up"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="180" />

แสดงผลจากโค้ด

นอกจากนี้ คุณยังลดขนาด APK ได้ด้วยการแสดงผลรูปภาพแบบเป็นขั้นตอน การแสดงผลแบบเป็นขั้นตอนจะช่วยเพิ่มพื้นที่ว่างเนื่องจากคุณไม่ต้องจัดเก็บไฟล์ภาพใน APK อีกต่อไป

ดำเนินการกับไฟล์ PNG

เครื่องมือ aapt สามารถเพิ่มประสิทธิภาพทรัพยากรรูปภาพที่วางไว้ใน res/drawable/ ด้วยการบีบอัดแบบไม่สูญเสียคุณภาพในระหว่างกระบวนการสร้าง ตัวอย่างเช่น เครื่องมือ aapt สามารถแปลง PNG แบบ True Color ที่ไม่ต้องใช้สีเกิน 256 สีเป็น PNG 8 บิตที่มีจานสี ซึ่งจะทำให้รูปภาพมีคุณภาพเท่าเดิมแต่ใช้พื้นที่หน่วยความจำน้อยลง

aapt มีข้อจํากัดต่อไปนี้

  • เครื่องมือ aapt จะไม่ลดขนาดไฟล์ PNG ที่มีอยู่ในโฟลเดอร์ asset/
  • ไฟล์ภาพต้องใช้สีไม่เกิน 256 สีเพื่อให้เครื่องมือ aapt เพิ่มประสิทธิภาพได้
  • เครื่องมือ aapt อาจทำให้ไฟล์ PNG ที่บีบอัดแล้วมีขนาดใหญ่ขึ้น หากต้องการป้องกันปัญหานี้ คุณสามารถใช้ Flag isCrunchPngs เพื่อปิดใช้กระบวนการนี้สำหรับไฟล์ PNG ได้โดยทำดังนี้
  • Kotlin

        buildTypes.all { isCrunchPngs = false }
        

    ดึงดูด

        buildTypes.all { isCrunchPngs = false }
        

บีบอัดไฟล์ PNG และ JPEG

คุณลดขนาดไฟล์ PNG ได้โดยไม่สูญเสียคุณภาพของรูปภาพโดยใช้เครื่องมืออย่าง pngcrush, pngquant หรือ zopflipng เครื่องมือเหล่านี้ทั้งหมดสามารถลดขนาดไฟล์ PNG ขณะเดียวกันก็คงคุณภาพของรูปภาพให้เหมือนเดิม

เครื่องมือ pngcrush มีประสิทธิภาพเป็นพิเศษ เครื่องมือนี้จะวนผ่านตัวกรอง PNG และพารามิเตอร์ zlib (Deflate) โดยใช้ชุดค่าผสมของตัวกรองและพารามิเตอร์แต่ละชุดเพื่อบีบอัดรูปภาพ จากนั้นระบบจะเลือกการกำหนดค่าที่ให้เอาต์พุตที่บีบอัดแล้วมีขนาดเล็กที่สุด

หากต้องการบีบอัดไฟล์ JPEG คุณสามารถใช้เครื่องมืออย่าง packJPG และ guetzli

ใช้รูปแบบไฟล์ WebP

คุณใช้รูปแบบไฟล์ WebP สำหรับรูปภาพแทนไฟล์ PNG หรือ JPEG ได้ด้วย รูปแบบ WebP มีการบีบอัดแบบสูญเสียบางส่วนและโปร่งใส เช่น JPG และ PNG และสามารถบีบอัดได้ดีกว่า JPEG หรือ PNG

คุณสามารถแปลงรูปภาพ BMP, JPG, PNG หรือ GIF แบบคงที่ที่มีอยู่เป็นรูปแบบ WebP โดยใช้ Android Studio ดูข้อมูลเพิ่มเติมได้ที่สร้างรูปภาพ WebP

ใช้ภาพกราฟิกเวกเตอร์

คุณสามารถใช้กราฟิกเวกเตอร์เพื่อสร้างไอคอนที่ไม่ขึ้นอยู่กับความละเอียดและสื่ออื่นๆ ที่ปรับขนาดได้ คุณสามารถใช้กราฟิกเหล่านี้เพื่อลดขนาด APK ลงได้อย่างมาก รูปภาพเวกเตอร์จะแสดงใน Android เป็นออบเจ็กต์ VectorDrawable เมื่อใช้ออบเจ็กต์ VectorDrawable ไฟล์ขนาด 100 ไบต์จะสร้างรูปภาพที่คมชัดขนาดของหน้าจอได้

อย่างไรก็ตาม ระบบจะใช้เวลานานขึ้นอย่างมากในการเรนเดอร์แต่ละVectorDrawableออบเจ็กต์ และรูปภาพขนาดใหญ่จะใช้เวลานานกว่าที่จะปรากฏบนหน้าจอ ดังนั้น ให้พิจารณาใช้ภาพกราฟิกเวกเตอร์เหล่านี้เมื่อแสดงภาพขนาดเล็กเท่านั้น

ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับออบเจ็กต์ VectorDrawable ได้ที่Drawable

ใช้กราฟิกเวกเตอร์สำหรับภาพเคลื่อนไหว

อย่าใช้ AnimationDrawable ในการสร้างภาพเคลื่อนไหวแบบเฟรมต่อเฟรม เนื่องจากมีการใส่ไฟล์บิตแมปแยกกันสำหรับภาพเคลื่อนไหวแต่ละเฟรม ซึ่งทำให้ขนาดของ APK เพิ่มขึ้นอย่างมาก

แต่ให้ใช้ AnimatedVectorDrawableCompat เพื่อสร้างรูปภาพเวกเตอร์ที่เคลื่อนไหวได้แทน

ลดโค้ดเนทีฟและโค้ด Java

คุณสามารถใช้วิธีการต่อไปนี้เพื่อลดขนาดโค้ดฐาน Java และโค้ดเนทีฟในแอป

นำโค้ดที่สร้างขึ้นที่ไม่จำเป็นออก

โปรดทำความเข้าใจร่องรอยของโค้ดที่สร้างขึ้นโดยอัตโนมัติ ตัวอย่างเช่น เครื่องมือบัฟเฟอร์โปรโตคอลจำนวนมากจะสร้างเมธอดและคลาสจำนวนมาก ซึ่งอาจทำให้แอปมีขนาดใหญ่ขึ้น 2 หรือ 3 เท่า

หลีกเลี่ยงการแจกแจง

enum เดียวจะเพิ่มไฟล์ classes.dex ของแอปได้ประมาณ 1.0 ถึง 1.4 KB การเพิ่มเหล่านี้สามารถสะสมเพิ่มขึ้นสำหรับระบบที่ซับซ้อนหรือไลบรารีที่ใช้ร่วมกันได้อย่างรวดเร็ว หากเป็นไปได้ ให้พิจารณาใช้คำอธิบายประกอบ @IntDef และการย่อโค้ดเพื่อตัดการแจงนับออกและแปลงค่าเป็นจำนวนเต็ม การแปลงประเภทนี้ช่วยรักษาประโยชน์ด้านความปลอดภัย ทั้งหมดของ Enum

ลดขนาดของไบนารีแบบเนทีฟ

หากแอปของคุณใช้โค้ดแบบเนทีฟและ Android NDK คุณสามารถลดขนาดแอปเวอร์ชันที่เผยแพร่ได้โดยการเพิ่มประสิทธิภาพโค้ด เทคนิคที่มีประโยชน์ 2 อย่าง ได้แก่ การนําสัญลักษณ์การแก้ไขข้อบกพร่องออกและไม่แยกไลบรารีที่มาพร้อมเครื่อง

นำสัญลักษณ์การแก้ไขข้อบกพร่องออก

การใช้สัญลักษณ์สำหรับแก้ไขข้อบกพร่องจะเหมาะสมในกรณีที่แอปอยู่ระหว่างการพัฒนาและยังต้องการการแก้ไขข้อบกพร่อง ใช้เครื่องมือ arm-eabi-strip ที่มีให้ใน Android NDK เพื่อนำสัญลักษณ์การแก้ไขข้อบกพร่องที่ไม่จำเป็นออกจากไลบรารีแบบเนทีฟ หลังจากนั้น คุณจะคอมไพล์บิลด์รุ่นได้

หลีกเลี่ยงการแยกไลบรารีที่มาพร้อมเครื่อง

เมื่อสร้างแอปเวอร์ชันที่เผยแพร่ ให้แพ็กเกจไฟล์ .so ที่ไม่ได้บีบอัดไว้ใน APK โดยตั้งค่า useLegacyPackaging เป็น false ในไฟล์ build.gradle.kts ของแอป การปิดใช้ Flag นี้จะป้องกันไม่ให้ PackageManager คัดลอกไฟล์ .so จาก APK ไปยังระบบไฟล์ระหว่างการติดตั้ง วิธีนี้จะทำให้อัปเดตของแอปมีขนาดเล็กลง

ดูแลรักษา APK แบบลีนหลายรายการ

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

หากไม่ได้เผยแพร่แอปใน Google Play คุณสามารถแบ่งกลุ่มแอปออกเป็น APK หลายรายการโดยแยกตามปัจจัยต่างๆ เช่น รองรับขนาดหน้าจอหรือพื้นผิว GPU

เมื่อผู้ใช้ดาวน์โหลดแอป อุปกรณ์ของผู้ใช้จะได้รับ APK ที่ถูกต้องตามฟีเจอร์และการตั้งค่าของอุปกรณ์ วิธีนี้ช่วยให้อุปกรณ์ไม่ได้รับชิ้นงานสำหรับฟีเจอร์ที่อุปกรณ์ไม่มี ตัวอย่างเช่น หากผู้ใช้มีอุปกรณ์ hdpi ผู้ใช้ไม่จำเป็นต้องมีxxxhdpiแหล่งข้อมูลที่คุณอาจรวมไว้สำหรับอุปกรณ์ที่มีจอแสดงผลความหนาแน่นสูงกว่า

ดูข้อมูลเพิ่มเติมได้ที่สร้าง APK หลายรายการและการรองรับ APK หลายรายการ