ลดขนาดแอป

ผู้ใช้มักหลีกเลี่ยงการดาวน์โหลดแอปที่มีขนาดใหญ่เกินไป โดยเฉพาะในตลาดเกิดใหม่ที่ อุปกรณ์เชื่อมต่อกับเครือข่าย 2G และ 3G ที่ไม่เสถียร หรือใช้แพ็กเกจที่มีการจำกัดปริมาณข้อมูล หน้านี้อธิบาย วิธีลดขนาดการดาวน์โหลดของแอป ซึ่งจะช่วยให้ผู้ใช้จำนวนมากขึ้นดาวน์โหลดแอปของคุณได้

อัปโหลดแอปด้วย Android App Bundle

อัปโหลดแอปเป็น Android App Bundle เพื่อประหยัด ขนาดแอปได้ทันทีเมื่อเผยแพร่ไปยัง Google Play Android App Bundle เป็นรูปแบบการอัปโหลดที่มี โค้ดและทรัพยากรที่คอมไพล์แล้วทั้งหมดของแอป แต่จะเลื่อนการสร้างและการลงนาม APK ไปยัง Google Play

จากนั้นรูปแบบการนำส่งแอปของ Google Play จะใช้ App Bundle เพื่อสร้างและนำส่ง APK ที่เพิ่มประสิทธิภาพ สำหรับการกำหนดค่าอุปกรณ์ของผู้ใช้แต่ละราย เพื่อให้ผู้ใช้ดาวน์โหลดเฉพาะโค้ดและทรัพยากรที่จำเป็นต่อการ เรียกใช้แอปของคุณ คุณจึงไม่ต้องสร้าง ทำ Signing และจัดการ 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ออบเจ็กต์ที่ปรับขนาดได้ 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 flavor และ defaultConfig จากนั้นระบบบิลด์จะป้องกันไม่ให้ทรัพยากรจาก การกำหนดค่าอื่นๆ ที่ไม่รองรับปรากฏใน APK ซึ่งจะช่วยลดขนาดของ APK ดูข้อมูลเพิ่มเติม เกี่ยวกับฟีเจอร์นี้ได้ที่ นำทรัพยากรสำรองที่ไม่ได้ใช้ ออก

ลดการใช้ทรัพยากรจากไลบรารี

เมื่อพัฒนาแอป Android คุณมักจะใช้ไลบรารีภายนอกเพื่อปรับปรุง ความสามารถในการใช้งานและความอเนกประสงค์ของแอป เช่น คุณอาจอ้างอิง AndroidX เพื่อปรับปรุงประสบการณ์ของผู้ใช้ในอุปกรณ์รุ่นก่อนหน้า หรือใช้ Google Play Services เพื่อดึงข้อมูล การแปลข้อความในแอปโดยอัตโนมัติ

หากไลบรารีออกแบบมาสำหรับเซิร์ฟเวอร์หรือเดสก์ท็อป ไลบรารีนั้นอาจมีออบเจ็กต์และเมธอดจำนวนมากที่แอปของคุณไม่จำเป็นต้องใช้ หากต้องการรวมเฉพาะส่วนของไลบรารีที่แอปของคุณต้องการ คุณสามารถแก้ไขไฟล์ของไลบรารีได้หากใบอนุญาตอนุญาตให้คุณแก้ไขไลบรารี นอกจากนี้ คุณยังใช้ไลบรารีทางเลือกที่เหมาะกับอุปกรณ์เคลื่อนที่เพื่อเพิ่มฟังก์ชันการทำงานที่เฉพาะเจาะจงลงในแอปได้ด้วย

การถอดรหัสรูปภาพเคลื่อนไหวเนทีฟ

ใน Android 12 (API ระดับ 31) มีการขยาย API ของ NDK ImageDecoder เพื่อถอดรหัส เฟรมทั้งหมดและข้อมูลเวลาจากรูปภาพที่ใช้รูปแบบไฟล์ GIF แบบเคลื่อนไหวและ WebP แบบเคลื่อนไหว

ใช้ ImageDecoder แทนไลบรารีของบุคคลที่สามเพื่อลดขนาด APK เพิ่มเติม และรับประโยชน์จากการอัปเดตในอนาคตที่เกี่ยวข้องกับความปลอดภัยและประสิทธิภาพ

ดูรายละเอียดเพิ่มเติมเกี่ยวกับ ImageDecoder API ได้ที่ API reference และตัวอย่าง ใน GitHub

รองรับเฉพาะความหนาแน่นที่เฉพาะเจาะจง

Android รองรับความหนาแน่นของหน้าจอที่แตกต่างกัน เช่น

  • ldpi
  • mdpi
  • tvdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

แม้ว่า Android จะรองรับความหนาแน่นดังกล่าว แต่คุณไม่จำเป็นต้องส่งออกชิ้นงานที่แรสเตอร์ ไปยังความหนาแน่นแต่ละรายการ

หากทราบว่ามีผู้ใช้เพียงไม่กี่เปอร์เซ็นต์เท่านั้นที่มีอุปกรณ์ที่มีความหนาแน่นเฉพาะ ให้พิจารณาว่าคุณจำเป็นต้องรวมความหนาแน่นเหล่านั้นไว้ในแอปหรือไม่ หากไม่รวมทรัพยากร สำหรับความหนาแน่นของหน้าจอที่เฉพาะเจาะจง Android จะปรับขนาดทรัพยากรที่มีอยู่โดยอัตโนมัติซึ่งออกแบบมาสำหรับความหนาแน่นของหน้าจออื่นๆ

หากแอปต้องการเฉพาะรูปภาพที่ปรับขนาดแล้ว คุณจะประหยัดพื้นที่ได้มากขึ้นโดยมีรูปภาพเพียงรูปแบบเดียวใน drawable-nodpi/ เราขอแนะนำให้คุณใส่ตัวแปรxxhdpi รูปภาพอย่างน้อย 1 รายการในแอป

ดูข้อมูลเพิ่มเติมเกี่ยวกับความหนาแน่นของหน้าจอได้ที่ ขนาดและความหนาแน่นของหน้าจอ

ใช้ออบเจ็กต์ที่วาดได้

รูปภาพบางรายการไม่จำเป็นต้องมีแหล่งข้อมูลรูปภาพแบบคงที่ เฟรมเวิร์กจะวาดรูปภาพแบบไดนามิก ในรันไทม์แทน ออบเจ็กต์ 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 ที่บีบอัดไว้แล้ว หากไม่ต้องการให้เกิดเหตุการณ์นี้ คุณสามารถใช้แฟล็ก 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 และโค้ดเบสเนทีฟในแอปได้

นำโค้ดที่สร้างขึ้นซึ่งไม่จำเป็นออก

โปรดทำความเข้าใจร่องรอยของโค้ดที่สร้างขึ้นโดยอัตโนมัติ ตัวอย่างเช่น เครื่องมือ Protocol Buffer หลายอย่างสร้างเมธอดและคลาสจำนวนมากเกินไป ซึ่งอาจเพิ่มขนาดแอปเป็น 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 ของแอป การปิดใช้ฟีเจอร์นี้จะป้องกันไม่ให้ 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 หลายรายการ