ผู้ใช้มักหลีกเลี่ยงการดาวน์โหลดแอปที่ดูเหมือนจะมีขนาดใหญ่เกินไป โดยเฉพาะในตลาดเกิดใหม่ที่อุปกรณ์เชื่อมต่อกับเครือข่าย 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 ไฟล์นี้จะแสดงชื่อ เวอร์ชัน สิทธิ์เข้าถึง และไฟล์ไลบรารีที่อ้างอิงของแอป โดยไฟล์จะใช้รูปแบบ 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 ได้ที่หัวข้อบีบอัด สร้างความสับสน และเพิ่มประสิทธิภาพแอป
ในปลั๊กอิน Android Gradle 7.0 ขึ้นไป คุณสามารถประกาศการกำหนดค่าที่แอปรองรับ Gradle จะส่งข้อมูลนี้ไปยังระบบบิลด์โดยใช้ตัวเลือก resourceConfigurations
กับฟีเจอร์defaultConfig
จากนั้นระบบบิลด์จะป้องกันไม่ให้ทรัพยากรจากการกําหนดค่าอื่นๆ ที่ไม่รองรับปรากฏใน APK ซึ่งจะช่วยลดขนาดของ APK ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์นี้ได้ที่นำทรัพยากรทางเลือกที่ไม่ได้ใช้ออก
ลดการใช้ทรัพยากรจากคลัง
เมื่อพัฒนาแอป Android คุณมักจะใช้ไลบรารีภายนอกเพื่อปรับปรุงความสามารถในการใช้งานและความอเนกประสงค์ของแอป ตัวอย่างเช่น คุณอาจอ้างอิง AndroidX เพื่อปรับปรุงประสบการณ์ของผู้ใช้บนอุปกรณ์รุ่นเก่า หรือจะใช้ Google Play Services เพื่อดึงข้อมูลการแปลข้อความภายในแอปโดยอัตโนมัติก็ได้
หากไลบรารีออกแบบมาสำหรับเซิร์ฟเวอร์หรือเดสก์ท็อป ไลบรารีอาจมีออบเจ็กต์และเมธอดจำนวนมากที่แอปไม่จำเป็นต้องใช้ หากต้องการรวมเฉพาะส่วนของไลบรารีที่แอปของคุณต้องใช้ คุณสามารถแก้ไขไฟล์ของไลบรารีได้หากใบอนุญาตอนุญาตให้คุณแก้ไขไลบรารี นอกจากนี้ คุณยังใช้ไลบรารีอื่นที่เหมาะกับอุปกรณ์เคลื่อนที่เพื่อเพิ่มฟังก์ชันการทำงานบางอย่างลงในแอปได้ด้วย
การถอดรหัสรูปภาพเคลื่อนไหวเนทีฟ
ใน Android 12 (API ระดับ 31) ระบบจะขยายImageDecoder
API ของ NDK เพื่อถอดรหัสเฟรมและข้อมูลการจับเวลาทั้งหมดจากรูปภาพที่ใช้รูปแบบไฟล์ 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 Design
ใช้ทรัพยากรซ้ำ
คุณสามารถใส่ทรัพยากรแยกต่างหากสำหรับรูปภาพเวอร์ชันต่างๆ เช่น รูปภาพเดียวกันที่มีการปรับสี แรเงา หรือหมุน อย่างไรก็ตาม เราขอแนะนำให้คุณใช้ชุดทรัพยากรชุดเดิมซ้ำและปรับแต่งตามต้องการเมื่อรันไทม์
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 ที่บีบอัดแล้วมีขนาดใหญ่ขึ้น หากต้องการป้องกันปัญหานี้ คุณสามารถใช้ FlagisCrunchPngs
เพื่อปิดใช้กระบวนการนี้สำหรับไฟล์ PNG ได้โดยทำดังนี้
Kotlin
buildTypes.all { isCrunchPngs = false }
Groovy
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 หลายรายการ