ลดขนาดแอป

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

Kotlin

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 โปรดดูลดขนาด ปรับให้ยากต่อการอ่าน (Obfuscate) และเพิ่มประสิทธิภาพแอป

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

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

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

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

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

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

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

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

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