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

รูปแบบการแสดงแอปของ Google Play ใช้แอป Android แพ็กเกจเพื่อสร้างและให้บริการ 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 มีการรับรองโดยใช้ Signing การกำหนดค่าที่คุณระบุไว้ในโมดูลฐาน
  • พร็อพเพอร์ตี้ 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 และประสบการณ์แบบ Instant จาก App Bundle แก้ไขการเรียกใช้/แก้ไขข้อบกพร่อง การกำหนดค่า

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

รูปที่ 2 ใช้เครื่องมือวิเคราะห์ 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" ระบุเนมสเปซ XML ใหม่ของ dist: ดังที่อธิบายไว้ด้านล่าง
split="split_name" เมื่อ Android Studio สร้าง App Bundle จะมีส่วนนี้รวมอยู่ด้วย ให้คุณ ดังนั้น คุณไม่ควรรวมหรือแก้ไข แอตทริบิวต์นี้ด้วยตัวคุณเอง

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

บล็อกโพสต์

วิดีโอ

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

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

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

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

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

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

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

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

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