ลดขนาดแอป

ผู้ใช้มักหลีกเลี่ยงการดาวน์โหลดแอปที่มีขนาดใหญ่เกินไป โดยเฉพาะในตลาดเกิดใหม่ซึ่ง อุปกรณ์เชื่อมต่อกับเครือข่าย 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 ไฟล์นี้จะแสดงรายการ ชื่อ เวอร์ชัน สิทธิ์การเข้าถึง และไฟล์ไลบรารีอ้างอิงของแอป ไฟล์ใช้ของ Android รูปแบบ XML ไบนารี

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

ขนาดของ 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 ของแอป

KotlinGroovy
android {
    // Other settings.

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

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

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

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

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

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

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

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

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

ใน Android 12 (API ระดับ 31) NDK ขยาย API ของ ImageDecoder เพื่อถอดรหัสแล้ว เฟรมและข้อมูลเวลาทั้งหมดจากรูปภาพที่ใช้รูปแบบไฟล์ 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 ที่บีบอัดอยู่แล้วมีจำนวนสูงเกินจริง วิธีป้องกัน คุณสามารถใช้แฟล็ก isCrunchPngs เพื่อปิดใช้ขั้นตอนนี้สำหรับไฟล์ PNG ได้
  • Kotlinดึงดูด
        buildTypes.all { isCrunchPngs = false }
        
        buildTypes.all { isCrunchPngs = false }
        

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

คุณสามารถลดขนาดไฟล์ PNG โดยไม่สูญเสียคุณภาพของภาพได้โดยใช้เครื่องมือ เช่น pngcrush pngquantity หรือ 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 และโค้ดเบสของระบบใน แอป

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

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

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

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

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

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