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