ภาพรวมของการนำส่งฟีเจอร์ Play

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

การนำส่งฟีเจอร์ Play ใช้ความสามารถขั้นสูงของ App Bundle ซึ่งช่วยให้ นำส่งฟีเจอร์บางอย่างของแอปแบบมีเงื่อนไขหรือดาวน์โหลดตามคำขอได้ โดยคุณต้องแยกฟีเจอร์เหล่านี้ออกจากแอปฐานเป็น โมดูลฟีเจอร์ก่อน

การกำหนดค่าบิลด์ของโมดูลฟีเจอร์

เมื่อสร้างโมดูลฟีเจอร์ใหม่โดยใช้ Android Studio ทาง IDE จะใช้ปลั๊กอิน Gradle ต่อไปนี้กับไฟล์ build.gradle ของโมดูล

// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.

plugins {
  id 'com.android.dynamic-feature'
}

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

สิ่งที่ไม่ควรระบุในการกำหนดค่าบิลด์ของโมดูลฟีเจอร์

เนื่องจากโมดูลฟีเจอร์แต่ละโมดูลขึ้นอยู่กับโมดูลฐาน โมดูลฟีเจอร์จึง รับค่าการกำหนดค่าบางอย่างด้วย ดังนั้นคุณควรละเว้นรายการต่อไปนี้ในไฟล์ build.gradle ของฟีเจอร์โมดูล

  • การกำหนดค่าการลงนาม: ระบบจะลงนาม App Bundle โดยใช้การกำหนดค่าการลงนาม ที่คุณระบุในโมดูลฐาน
  • พร็อพเพอร์ตี้ minifyEnabled: คุณสามารถ เปิดใช้การลดขนาดโค้ด สำหรับทั้งโปรเจ็กต์แอปได้จากการกำหนดค่าบิลด์ของโมดูลฐานเท่านั้น ดังนั้น คุณจึงควรละเว้นพร็อพเพอร์ตี้นี้จาก ฟีเจอร์โมดูล อย่างไรก็ตาม คุณสามารถ ระบุกฎ ProGuard เพิ่มเติม สำหรับแต่ละโมดูลฟีเจอร์ได้
  • versionCode และ versionName: เมื่อสร้าง App Bundle Gradle จะใช้ข้อมูลเวอร์ชันแอปที่โมดูลพื้นฐานระบุ คุณควรละเว้นพร็อพเพอร์ตี้เหล่านี้จากไฟล์ build.gradle ของโมดูลฟีเจอร์

สร้างความสัมพันธ์กับโมดูลฐาน

เมื่อ Android Studio สร้างโมดูลฟีเจอร์ ระบบจะทำให้โมดูลดังกล่าวมองเห็นได้ ในโมดูลฐานโดยการเพิ่มพร็อพเพอร์ตี้ android.dynamicFeatures ลงในไฟล์ build.gradle ของโมดูลฐาน ดังที่แสดงด้านล่าง

// In the base module’s build.gradle file.
android {
    ...
    // Specifies feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

นอกจากนี้ Android Studio ยังรวมโมดูลฐานเป็นทรัพยากร Dependency ของโมดูลฟีเจอร์ด้วย ดังที่แสดงด้านล่าง

// In the feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}

ระบุกฎ ProGuard เพิ่มเติม

แม้ว่าการกำหนดค่าบิลด์ของโมดูลฐานเท่านั้นที่อาจเปิดใช้การลดขนาดโค้ด สำหรับโปรเจ็กต์แอป แต่คุณก็สามารถระบุกฎ ProGuard ที่กำหนดเองกับโมดูลฟีเจอร์แต่ละโมดูลได้โดยใช้พร็อพเพอร์ตี้ proguardFiles ดังที่แสดงด้านล่าง

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}

โปรดทราบว่ากฎ ProGuard เหล่านี้จะผสานรวมกับกฎจากโมดูลอื่นๆ (รวมถึงโมดูลฐาน) ในเวลาที่สร้าง ดังนั้นแม้ว่าโมดูลฟีเจอร์แต่ละโมดูลจะระบุกฎชุดใหม่ แต่กฎเหล่านั้นจะมีผลกับโมดูลทั้งหมดในโปรเจ็กต์แอป

ทําให้แอปใช้งานได้

ขณะพัฒนาแอปที่รองรับโมดูลฟีเจอร์ คุณสามารถ ติดตั้งใช้งานแอปกับอุปกรณ์ที่เชื่อมต่อได้ตามปกติโดยเลือก เรียกใช้ > เรียกใช้จากแถบเมนู (หรือโดยคลิกเรียกใช้ ใน แถบเครื่องมือ)

หากโปรเจ็กต์แอปมีโมดูลฟีเจอร์อย่างน้อย 1 โมดูล คุณจะเลือกฟีเจอร์ที่จะรวมเมื่อติดตั้งใช้งานแอปได้โดยการแก้ไขการกำหนดค่าการเรียกใช้/การแก้ไขข้อบกพร่องที่มีอยู่ดังนี้

  1. เลือกเรียกใช้ > แก้ไขการกำหนดค่าจากแถบเมนู
  2. จากแผงด้านซ้ายของกล่องโต้ตอบการกำหนดค่าการเรียกใช้/การแก้ไขข้อบกพร่อง ให้เลือกการกำหนดค่าแอป Android ที่ต้องการ
  3. ในส่วนฟีเจอร์แบบไดนามิกที่จะติดตั้งใช้งานในแท็บทั่วไป ให้เลือกช่อง ข้างโมดูลฟีเจอร์แต่ละรายการที่คุณต้องการรวมไว้เมื่อ ติดตั้งใช้งานแอป
  4. คลิกตกลง

โดยค่าเริ่มต้น Android Studio จะไม่ใช้ App Bundle ในการติดตั้งใช้งานแอป แต่ IDE จะสร้างและติดตั้ง APK ในอุปกรณ์ที่เพิ่มประสิทธิภาพเพื่อความเร็วในการติดตั้งใช้งานแทนที่จะเป็นขนาด APK หากต้องการกำหนดค่า Android Studio ให้สร้างและติดตั้งใช้งาน APK และประสบการณ์แบบใช้งานได้ทันทีจาก App Bundle แทน ให้แก้ไขการกำหนดค่าการเรียกใช้/การแก้ไขข้อบกพร่อง

ใช้โมดูลฟีเจอร์สำหรับการนำส่งแบบกำหนดเอง

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

แม้ว่าคุณจะได้รับการดาวน์โหลดที่มีการเพิ่มประสิทธิภาพสูงโดยค่าเริ่มต้นเมื่ออัปโหลดแอปเป็น App Bundle แต่ตัวเลือกการนำส่งฟีเจอร์ขั้นสูงและปรับแต่งได้มากขึ้น ต้องมีการกำหนดค่าเพิ่มเติมและการแยกฟีเจอร์ของแอปเป็นโมดูลโดยใช้โมดูลฟีเจอร์ กล่าวคือ โมดูลฟีเจอร์เป็นองค์ประกอบพื้นฐานสำหรับการสร้างฟีเจอร์แบบแยกส่วนที่คุณกำหนดค่าให้ดาวน์โหลดแต่ละฟีเจอร์ได้ตามต้องการ

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

  • การเข้าสู่ระบบและการสร้างบัญชี
  • การเรียกดู Marketplace
  • การวางสินค้าเพื่อขาย
  • การประมวลผลการชำระเงิน

ตารางด้านล่างอธิบายตัวเลือกการนำส่งต่างๆ ที่โมดูลฟีเจอร์รองรับ และวิธีใช้ตัวเลือกเหล่านั้นเพื่อเพิ่มประสิทธิภาพขนาดการดาวน์โหลดเริ่มต้นของแอปมาร์เก็ตเพลสตัวอย่าง

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

นอกจากนี้ แอปของคุณยังขอถอนการติดตั้งฟีเจอร์ในภายหลังได้ด้วย ดังนั้น หากคุณต้องการฟีเจอร์บางอย่างเมื่อติดตั้งแอป แต่ไม่ต้องการหลังจากนั้น คุณสามารถลดขนาดการติดตั้งได้โดยขอให้นำฟีเจอร์ออกจากอุปกรณ์

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

อย่างไรก็ตาม เพื่อลดขนาดการติดตั้งของแอป แอปสามารถขอ ลบฟีเจอร์หลังจากที่ผู้ใช้ฝึกอบรมเสร็จแล้วได้

แยกแอปเป็นโมดูลโดยใช้โมดูลฟีเจอร์ ที่ไม่ได้กำหนดค่าตัวเลือกการนำส่งขั้นสูง

หากต้องการดูวิธีลดขนาดการติดตั้งแอปโดยการนำโมดูลฟีเจอร์บางอย่างที่ผู้ใช้อาจไม่ต้องการอีกต่อไปออก โปรดอ่านจัดการ โมดูลที่ติดตั้ง

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

นอกจากนี้ หากผู้ใช้ไม่ได้ขายสินค้าอีกต่อไปหลังจากระยะเวลาหนึ่ง แอปจะลดขนาดที่ติดตั้งได้โดยขอถอนการติดตั้งฟีเจอร์

สร้างโมดูลฟีเจอร์และ กำหนดค่าการแสดง ตามคำขอ จากนั้นแอปจะใช้ ไลบรารีการนำส่งฟีเจอร์ Play เพื่อขอ ดาวน์โหลดโมดูลตามต้องการได้
การแสดงโฆษณาตามเงื่อนไข ช่วยให้คุณระบุข้อกำหนดบางอย่างของอุปกรณ์ผู้ใช้ได้ เช่น ฟีเจอร์ฮาร์ดแวร์ ภาษา และระดับ API ขั้นต่ำ เพื่อพิจารณาว่าจะดาวน์โหลดฟีเจอร์แบบแยกส่วน เมื่อติดตั้งแอปหรือไม่ หากแอปมาร์เก็ตเพลสมีการเข้าถึงทั่วโลก คุณอาจต้องรองรับ วิธีการชำระเงินที่ได้รับความนิยมในบางภูมิภาคหรือในพื้นที่เท่านั้น หากต้องการลดขนาดการดาวน์โหลดแอปครั้งแรก คุณสามารถสร้าง โมดูลฟีเจอร์แยกต่างหากเพื่อประมวลผลวิธีการชำระเงินบางประเภท และ ติดตั้งโมดูลเหล่านั้นแบบมีเงื่อนไขในอุปกรณ์ของผู้ใช้ตาม ภาษาที่ลงทะเบียนไว้ สร้างโมดูลฟีเจอร์และ กำหนดค่าการนำส่งตามเงื่อนไข
การนำส่งทันที Google Play Instant ช่วยให้ผู้ใช้โต้ตอบกับแอปได้โดยไม่ต้องติดตั้งแอป ในอุปกรณ์ แต่ผู้ใช้จะทดลองใช้แอปของคุณได้ผ่านปุ่ม "ลองเลย" ใน Google Play Store หรือ URL ที่คุณสร้างขึ้น รูปแบบการนำส่งเนื้อหานี้ช่วยให้คุณเพิ่มการมีส่วนร่วมกับแอปได้ง่ายขึ้น

การนำส่งทันทีช่วยให้คุณใช้ Google Play Instant เพื่อให้ผู้ใช้ได้สัมผัสฟีเจอร์บางอย่างของแอปได้ทันทีโดยไม่ต้องติดตั้ง

พิจารณาเกมที่มีเลเวลแรกๆ ของเกมใน ฟีเจอร์โมดูลแบบเบา คุณสามารถเปิดใช้ Instant สำหรับโมดูลนั้นเพื่อให้ผู้ใช้ได้สัมผัสประสบการณ์การเล่นเกมทันทีผ่านลิงก์ URL หรือปุ่ม "ลองเลย" โดยไม่ต้องติดตั้งแอป สร้างโมดูลฟีเจอร์และ กำหนดค่า การนำส่งทันที จากนั้นแอปจะใช้ ไลบรารีการนำส่งฟีเจอร์ Play เพื่อขอ ดาวน์โหลดโมดูลตามต้องการได้

โปรดทราบว่าการแยกฟีเจอร์ของแอปเป็นโมดูลโดยใช้โมดูลฟีเจอร์ เป็นเพียงขั้นตอนแรกเท่านั้น หากต้องการรองรับ Google Play Instant ขนาดดาวน์โหลดของโมดูลพื้นฐานของแอปและฟีเจอร์ที่เปิดใช้ Instant ที่ระบุต้องเป็นไปตามข้อจำกัดด้านขนาดที่เข้มงวด ดูข้อมูลเพิ่มเติมได้ที่ อ่านเปิดใช้ ประสบการณ์การใช้งานทันทีโดยลดขนาดแอปหรือเกม

การสร้าง URI สำหรับทรัพยากร

หากต้องการเข้าถึงทรัพยากรที่จัดเก็บไว้ในฟีเจอร์โมดูลโดยใช้ URI ให้ทำดังนี้เพื่อสร้าง URI ทรัพยากรของฟีเจอร์โมดูลโดยใช้ Uri.Builder()

Kotlin

val uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build()

Java

String uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build().toString();

ระบบจะสร้างแต่ละส่วนของเส้นทางไปยังทรัพยากรในขณะรันไทม์ เพื่อให้มั่นใจว่าระบบจะสร้างเนมสเปซที่ถูกต้องหลังจากโหลด APK ที่แยกแล้ว

ตัวอย่างวิธีสร้าง URI สมมติว่าคุณมีแอปและ โมดูลฟีเจอร์ที่มีชื่อต่อไปนี้

  • ชื่อแพ็กเกจแอป: com.example.my_app_package
  • ชื่อแพ็กเกจทรัพยากรของฟีเจอร์: com.example.my_app_package.my_dynamic_feature

หาก resId ในข้อมูลโค้ดด้านบนอ้างอิงถึงทรัพยากรไฟล์ดิบชื่อ "my_video" ในโมดูลฟีเจอร์ โค้ด Uri.Builder() ด้านบนจะแสดงผลดังนี้

android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video

จากนั้นแอปจะใช้ URI นี้เพื่อเข้าถึงทรัพยากรของโมดูลฟีเจอร์ได้

หากต้องการตรวจสอบเส้นทางใน URI คุณสามารถใช้ APK Analyzer เพื่อตรวจสอบ APK ของโมดูลฟีเจอร์และกำหนดชื่อแพ็กเกจได้โดยทำดังนี้

ภาพหน้าจอของเครื่องมือวิเคราะห์ APK ที่ตรวจสอบเนื้อหาของไฟล์ทรัพยากรที่คอมไพล์แล้ว
รูปที่ 1 ใช้เครื่องมือวิเคราะห์ APK เพื่อตรวจสอบชื่อแพ็กเกจในไฟล์ทรัพยากรที่คอมไพล์แล้ว

ข้อควรพิจารณาสําหรับโมดูลฟีเจอร์

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

  • การติดตั้งโมดูลฟีเจอร์ 50 รายการขึ้นไปในอุปกรณ์เครื่องเดียวผ่านการนำส่งแบบมีเงื่อนไขหรือแบบออนดีมานด์อาจทำให้เกิดปัญหาด้านประสิทธิภาพ โมดูลที่นำส่งเมื่อติดตั้งซึ่งไม่ได้กำหนดค่าเป็นโมดูลที่นำออกได้จะรวมอยู่ในโมดูลฐานโดยอัตโนมัติ และจะนับเป็นโมดูลฟีเจอร์เพียง 1 โมดูลในแต่ละอุปกรณ์
  • จำกัดจำนวนโมดูลที่คุณกำหนดค่าเป็นแบบถอดออกได้สำหรับการนำส่งในเวลาติดตั้งไม่เกิน 10 โมดูล ไม่เช่นนั้น เวลาในการดาวน์โหลดและติดตั้งแอปอาจเพิ่มขึ้น
  • เฉพาะอุปกรณ์ที่ใช้ Android 5.0 (API ระดับ 21) ขึ้นไปเท่านั้นที่รองรับ การดาวน์โหลดและติดตั้งฟีเจอร์ตามต้องการ หากต้องการให้ฟีเจอร์พร้อมใช้งานใน Android เวอร์ชันก่อนหน้า ให้เปิดใช้การผสานเมื่อสร้างโมดูลฟีเจอร์
  • เปิดใช้ SplitCompat เพื่อให้แอปมีสิทธิ์เข้าถึงโมดูลฟีเจอร์ที่ดาวน์โหลดมาซึ่งนำส่งตาม ความต้องการ
  • โมดูลฟีเจอร์ไม่ควรกำหนดกิจกรรมในไฟล์ Manifest โดยตั้งค่า android:exported เป็น true เนื่องจากไม่มีการรับประกันว่าอุปกรณ์ ได้ดาวน์โหลดโมดูลฟีเจอร์แล้วเมื่อแอปอื่นพยายามเปิดใช้ กิจกรรม นอกจากนี้ แอปควรยืนยันว่าได้ ดาวน์โหลดฟีเจอร์แล้วก่อนที่จะพยายามเข้าถึงโค้ดและทรัพยากรของฟีเจอร์ ดูข้อมูลเพิ่มเติมได้ที่จัดการโมดูลที่ติดตั้ง
  • เนื่องจากการนำส่งฟีเจอร์ Play กำหนดให้คุณต้องเผยแพร่แอปโดยใช้ App Bundle โปรดตรวจสอบว่าคุณทราบปัญหาที่ทราบเกี่ยวกับ App Bundle

ข้อมูลอ้างอิงของไฟล์ Manifest ของโมดูลฟีเจอร์

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

แอตทริบิวต์ คำอธิบาย
<manifest นี่คือบล็อก <manifest> ทั่วไป
xmlns:dist="http://schemas.android.com/apk/distribution" ระบุdist:เนมสเปซ XML ใหม่ซึ่งมี คำอธิบายเพิ่มเติมด้านล่าง
split="split_name" เมื่อ Android Studio สร้าง App Bundle ของคุณ ระบบจะรวมแอตทริบิวต์นี้ ไว้ให้ ดังนั้นคุณไม่ควรระบุหรือแก้ไข แอตทริบิวต์นี้ด้วยตนเอง

กำหนดชื่อของโมดูลที่แอปของคุณระบุ เมื่อขอโมดูลตามคำขอโดยใช้ไลบรารีการนำส่งฟีเจอร์ Play

วิธีที่ Gradle กำหนดค่าสำหรับแอตทริบิวต์นี้

โดยค่าเริ่มต้น เมื่อสร้างโมดูลฟีเจอร์โดยใช้ Android Studio ทาง IDE จะใช้สิ่งที่คุณระบุเป็นชื่อโมดูล เพื่อระบุโมดูลเป็นโปรเจ็กต์ย่อยของ Gradle ใน ไฟล์การตั้งค่า Gradle

เมื่อสร้าง App Bundle, Gradle จะใช้องค์ประกอบสุดท้ายของ เส้นทางโปรเจ็กต์ย่อยเพื่อแทรกแอตทริบิวต์ไฟล์ Manifest นี้ในไฟล์ Manifest ของโมดูล ตัวอย่างเช่น หากคุณสร้างฟีเจอร์โมดูลใหม่ใน ไดเรกทอรี MyAppProject/features/ และระบุ "dynamic_feature1" เป็นชื่อโมดูล IDE จะเพิ่ม ':features:dynamic_feature1' เป็นโปรเจ็กต์ย่อยในไฟล์ settings.gradle เมื่อสร้าง App Bundle Gradle จะแทรก <manifest split="dynamic_feature1"> ในไฟล์ Manifest ของโมดูล

android:isFeatureSplit="true | false"> เมื่อ Android Studio สร้าง App Bundle ของคุณ ระบบจะรวมแอตทริบิวต์นี้ไว้ให้ ดังนั้นคุณไม่ควรใส่ หรือแก้ไขแอตทริบิวต์นี้ด้วยตนเอง

ระบุว่าโมดูลนี้เป็นโมดูลฟีเจอร์ ไฟล์ Manifest ในโมดูลฐานและ APK การกำหนดค่าจะ ละเว้นแอตทริบิวต์นี้หรือตั้งค่าเป็น false

<dist:module กำหนดแอตทริบิวต์ที่กำหนดวิธีแพ็กเกจโมดูลและ กระจายเป็น APK
dist:instant="true | false" ระบุว่าโมดูลควรพร้อมใช้งานผ่าน Google Play Instant เป็น ประสบการณ์การใช้งานแบบ Instant หรือไม่

หากแอปมีโมดูลฟีเจอร์ที่เปิดใช้ Instant App อย่างน้อย 1 โมดูล คุณต้องเปิดใช้ Instant App ในโมดูลฐานด้วย เมื่อใช้ Android Studio 3.5 ขึ้นไป IDE จะดำเนินการนี้ให้คุณเมื่อคุณ สร้างฟีเจอร์โมดูลที่เปิดใช้ แอปด่วน

คุณตั้งค่าองค์ประกอบ XML นี้เป็น true ขณะตั้งค่า <dist:on-demand/> ไม่ได้ อย่างไรก็ตาม คุณยังคงขอ ดาวน์โหลดโมดูลฟีเจอร์ที่เปิดใช้ Instant ตามคำขอได้ เป็นประสบการณ์แบบใช้งานได้ทันที โดยใช้ไลบรารีการนำส่งฟีเจอร์ Play เมื่อผู้ใช้ดาวน์โหลดและติดตั้งแอปของคุณ อุปกรณ์จะ ดาวน์โหลดและติดตั้งโมดูลฟีเจอร์ที่เปิดใช้ทันทีของแอป พร้อมกับ APK ฐานโดยค่าเริ่มต้น

dist:title="@string/feature_name"> ระบุชื่อที่ผู้ใช้มองเห็นสำหรับโมดูล เช่น อุปกรณ์อาจแสดงชื่อนี้เมื่อขอการยืนยันการดาวน์โหลด

คุณต้องรวมทรัพยากรสตริงสำหรับชื่อนี้ ในไฟล์ module_root/src/source_set/res/values/strings.xml ของโมดูลพื้นฐาน

<dist:fusing dist:include="true | false" /> ระบุว่าจะรวมโมดูลไว้ใน APK หลายรายการที่กำหนดเป้าหมายเป็นอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 20) หรือต่ำกว่าหรือไม่

นอกจากนี้ เมื่อคุณ ใช้ bundletool เพื่อสร้าง APK จาก App Bundle เฉพาะโมดูลฟีเจอร์ที่ตั้งค่าพร็อพเพอร์ตี้นี้เป็น true เท่านั้นที่จะรวมอยู่ใน APK สากล ซึ่งเป็น APK แบบ Monolithic ที่มี โค้ดและทรัพยากรสำหรับการกำหนดค่าอุปกรณ์ทั้งหมดที่แอปของคุณรองรับ

<dist:delivery> ห่อหุ้มตัวเลือกที่ปรับแต่งการนำส่งโมดูล ดังที่แสดงด้านล่าง โปรดทราบว่าโมดูลฟีเจอร์แต่ละโมดูลต้องกำหนดค่าตัวเลือกการนำส่งที่กำหนดเองเหล่านี้เพียงประเภทเดียว
<dist:install-time> ระบุว่าโมดูลควรพร้อมใช้งานเมื่อติดตั้ง ลักษณะการทำงานนี้เป็นลักษณะเริ่มต้นสำหรับโมดูลฟีเจอร์ที่ไม่ได้ระบุตัวเลือกการนำส่งที่กำหนดเองประเภทอื่น

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการดาวน์โหลดระหว่างการติดตั้ง โปรดอ่าน กำหนดค่าการนำส่งระหว่างการติดตั้ง

โหนดนี้ยังระบุเงื่อนไขที่จำกัดโมดูลให้ใช้ได้กับ อุปกรณ์ที่ตรงตามข้อกำหนดบางอย่าง เช่น ฟีเจอร์ของอุปกรณ์ ประเทศของผู้ใช้ หรือระดับ API ขั้นต่ำ ดูข้อมูลเพิ่มเติมได้ที่ กำหนดค่าการนำส่งแบบมีเงื่อนไข

<dist:removable dist:value="true | false" />

เมื่อไม่ได้ตั้งค่าหรือตั้งค่าเป็น false, bundletool จะรวมโมดูลเวลาติดตั้ง เข้ากับโมดูลฐานเมื่อสร้าง APK ที่แยกจาก Bundle เนื่องจากจะมี APK ที่แยกน้อยลงอันเป็นผลมาจากการผสาน การตั้งค่านี้จึงอาจปรับปรุงประสิทธิภาพของแอปได้

เมื่อตั้งค่า removable เป็น true ระบบจะไม่ผสานรวมโมดูลที่ติดตั้งเข้ากับโมดูลฐาน ตั้งค่าเป็น true หากต้องการถอนการติดตั้งโมดูลในอนาคต อย่างไรก็ตาม การกำหนดค่าโมดูลจำนวนมากเกินไปให้ถอดออกได้อาจเพิ่ม เวลาในการติดตั้งแอป

ค่าเริ่มต้นคือ false คุณต้องตั้งค่านี้ในไฟล์ Manifest ก็ต่อเมื่อต้องการปิดใช้การผสานรวมสำหรับโมดูลฟีเจอร์

หมายเหตุ: ฟีเจอร์นี้จะใช้ได้เมื่อใช้ปลั๊กอิน Android Gradle เวอร์ชัน 4.2 หรือเมื่อใช้ bundletool v1.0 จากบรรทัดคำสั่งเท่านั้น

</dist:install-time>  
<dist:on-demand /> ระบุว่าโมดูลควรพร้อมให้ดาวน์โหลดแบบออนดีมานด์ กล่าวคือ โมดูลจะไม่พร้อมใช้งานในเวลาที่ติดตั้ง แต่แอปของคุณอาจขอให้ดาวน์โหลดในภายหลังได้

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการดาวน์โหลดตามต้องการ โปรดอ่าน กำหนดค่าการนำส่งตามต้องการ

</dist:delivery>
</dist:module>
<application
android:hasCode="true | false">
...
</application>
หากโมดูลฟีเจอร์ไม่ได้สร้างไฟล์ DEX (กล่าวคือ ไม่มีโค้ดที่คอมไพล์เป็นรูปแบบไฟล์ DEX ในภายหลัง) คุณต้องทำดังนี้ (มิฉะนั้น คุณอาจได้รับข้อผิดพลาดขณะรันไทม์)
  1. ตั้งค่า android:hasCode เป็น "false" ในไฟล์ Manifest ของโมดูลฟีเจอร์
  2. เพิ่มโค้ดต่อไปนี้ลงในไฟล์ Manifest ของโมดูลฐาน
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
...
</manifest>

แหล่งข้อมูลเพิ่มเติม

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้โมดูลฟีเจอร์ โปรดดูแหล่งข้อมูลต่อไปนี้

บล็อกโพสต์

วิดีโอ

ข้อกำหนดในการให้บริการและความปลอดภัยของข้อมูล

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

ความปลอดภัยของข้อมูล

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

API ภาษาเพิ่มเติม

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

การนำส่งฟีเจอร์ Play

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

แม้ว่าเราจะมุ่งมั่นที่จะสร้างความโปร่งใสมากที่สุดเท่าที่จะทำได้ แต่คุณมีหน้าที่รับผิดชอบแต่เพียงผู้เดียว ในการตัดสินใจว่าจะตอบกลับแบบฟอร์มส่วนความปลอดภัยของข้อมูลของ Google Play ที่เกี่ยวกับการเก็บรวบรวม การแชร์ และแนวทางปฏิบัติด้านการรักษาความปลอดภัยของข้อมูลผู้ใช้ในแอปอย่างไร