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