ลดขนาดแอป

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