รูปแบบการแสดงแอปของ 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 โมดูล คุณสามารถเลือกฟีเจอร์ที่จะรวมไว้เมื่อทำให้แอปใช้งานได้โดยแก้ไขการกำหนดค่าการแก้ไขข้อบกพร่อง/เรียกใช้ที่มีอยู่ ดังนี้
- เลือกเรียกใช้ > แก้ไขการกำหนดค่าจากแถบเมนู
- จากแผงด้านซ้ายของกล่องโต้ตอบการกำหนดค่าการแก้ไขข้อบกพร่อง/เรียกใช้ ให้เลือกการกำหนดค่าแอป Android ที่ต้องการ
- ในส่วนฟีเจอร์แบบไดนามิกที่จะทำให้ใช้งานได้ในแท็บทั่วไป ให้เลือกช่องข้างโมดูลฟีเจอร์แต่ละรายการที่ต้องการรวมไว้เมื่อทำให้แอปใช้งานได้
- คลิกตกลง
โดยค่าเริ่มต้น Android Studio จะไม่ทำให้แอปใช้งานได้โดยใช้ App Bundle แต่ IDE จะสร้างและติดตั้ง APK ในอุปกรณ์ซึ่งเพิ่มประสิทธิภาพเพื่อความเร็วในการทำให้ใช้งานได้ ไม่ใช่ขนาด APK หากต้องการกำหนดค่า Android Studio ให้สร้างและติดตั้งใช้งาน APK และประสบการณ์แบบใช้งานได้ทันทีจาก App Bundle แทน ให้แก้ไขการกำหนดค่าการแก้ไขข้อบกพร่อง/เรียกใช้
ใช้โมดูลฟีเจอร์สำหรับการนำส่งที่กำหนดเอง
ประโยชน์ที่โดดเด่นของโมดูลฟีเจอร์คือความสามารถในการปรับแต่งวิธีและเวลาที่ระบบจะดาวน์โหลดฟีเจอร์ต่างๆ ของแอปลงในอุปกรณ์ที่ใช้ Android 5.0 (ระดับ API 21) ขึ้นไป ตัวอย่างเช่น หากต้องการลดขนาดการดาวน์โหลดครั้งแรกของแอป คุณสามารถกำหนดค่าฟีเจอร์บางอย่างให้ดาวน์โหลดตามต้องการหรือดาวน์โหลดเฉพาะในอุปกรณ์ที่รองรับความสามารถบางอย่าง เช่น ความสามารถในการถ่ายภาพหรือรองรับฟีเจอร์เทคโนโลยีความจริงเสริม (AR)
แม้ว่าคุณจะได้รับการดาวน์โหลดที่เพิ่มประสิทธิภาพอย่างมากโดยค่าเริ่มต้นเมื่ออัปโหลดแอปเป็น App Bundle แต่ตัวเลือกการนำส่งฟีเจอร์ที่ปรับแต่งได้และขั้นสูงกว่านั้นต้องมีการกำหนดค่าเพิ่มเติมและการแยกฟีเจอร์ของแอปออกเป็นโมดูลโดยใช้โมดูลฟีเจอร์ กล่าวคือ โมดูลฟีเจอร์เป็นองค์ประกอบพื้นฐานสำหรับการสร้างฟีเจอร์แบบโมดูลาร์ที่คุณกำหนดค่าให้ดาวน์โหลดแต่ละรายการได้ตามต้องการ
ลองนึกถึงแอปที่อนุญาตให้ผู้ใช้ซื้อและขายสินค้าในมาร์เก็ตเพลสออนไลน์ คุณสามารถแยกฟังก์ชันการทำงานแต่ละอย่างต่อไปนี้ของแอปออกเป็นโมดูลฟีเจอร์แยกกันได้อย่างสมเหตุสมผล
- การเข้าสู่ระบบและการสร้างบัญชี
- กำลังเรียกดูมาร์เก็ตเพลส
- การวางขายสินค้า
- กำลังประมวลผลการชำระเงิน
ตารางด้านล่างอธิบายตัวเลือกการนำส่งต่างๆ ที่โมดูลฟีเจอร์รองรับ และวิธีใช้ตัวเลือกเหล่านั้นเพื่อเพิ่มประสิทธิภาพขนาดการดาวน์โหลดครั้งแรกของแอปมาร์เก็ตเพลสตัวอย่าง
| ตัวเลือกการจัดส่ง | ลักษณะการทำงาน | ตัวอย่างกรณีการใช้งาน | เริ่มต้นใช้งาน |
|---|---|---|---|
| การนำส่งขณะติดตั้ง | โดยค่าเริ่มต้น ระบบจะดาวน์โหลดโมดูลฟีเจอร์ที่ไม่ได้กำหนดค่าตัวเลือกการนำส่งใดๆ ที่อธิบายไว้ข้างต้นเมื่อติดตั้งแอป ลักษณะการทำงานนี้เป็นสิ่งสำคัญเนื่องจากหมายความว่าคุณสามารถใช้ตัวเลือกการนำส่งขั้นสูงได้ทีละน้อย ตัวอย่างเช่น คุณจะได้รับประโยชน์จากการแยกฟีเจอร์ของแอปเป็นโมดูลและเปิดใช้การนำส่งแบบออนดีมานด์หลังจากที่ใช้การดาวน์โหลดแบบออนดีมานด์อย่างเต็มรูปแบบโดยใช้ไลบรารีการนำส่งฟีเจอร์ Play แล้วเท่านั้น
นอกจากนี้ แอปของคุณยังขอถอนการติดตั้งฟีเจอร์ในภายหลังได้ด้วย ดังนั้น หากคุณต้องการฟีเจอร์บางอย่างเมื่อติดตั้งแอป แต่ไม่ต้องการหลังจากนั้น คุณสามารถลดขนาดการติดตั้งได้โดยขอให้นำฟีเจอร์ดังกล่าวออกจากอุปกรณ์ |
หากแอปมีกิจกรรมการฝึกอบรมบางอย่าง เช่น คู่มือแบบอินเทอร์แอกทีฟเกี่ยวกับวิธีซื้อและขายสินค้าในมาร์เก็ตเพลส คุณสามารถรวมฟีเจอร์นั้นไว้ในการติดตั้งแอปโดยค่าเริ่มต้นได้
อย่างไรก็ตาม เพื่อลดขนาดที่ติดตั้งของแอป แอปสามารถขอให้ลบฟีเจอร์ดังกล่าวหลังจากที่ผู้ใช้ฝึกอบรมเสร็จแล้ว |
แยกแอปออกเป็นโมดูลโดยใช้โมดูลฟีเจอร์ที่ไม่ได้กำหนดค่าตัวเลือกการนำส่งขั้นสูง
หากต้องการดูวิธีลดขนาดที่ติดตั้งของแอปโดยการนำโมดูลฟีเจอร์บางอย่างที่ผู้ใช้อาจไม่จำเป็นต้องใช้อีกต่อไปออก โปรดอ่านจัดการโมดูลที่ติดตั้ง |
| การจัดส่งแบบออนดีมานด์ | อนุญาตให้แอปขอและดาวน์โหลดโมดูลฟีเจอร์ตามต้องการ | หากมีผู้ใช้แอปมาร์เก็ตเพลสเพียง 20% ที่โพสต์สินค้าเพื่อขาย กลยุทธ์ที่ดีในการลดขนาดการดาวน์โหลดครั้งแรกสำหรับผู้ใช้ส่วนใหญ่คือการทำให้ฟังก์ชันการถ่ายภาพ การใส่คำอธิบายสินค้า และการวางสินค้าเพื่อขายพร้อมให้ดาวน์โหลดแบบออนดีมานด์ กล่าวคือ คุณสามารถกำหนดค่าโมดูลฟีเจอร์สำหรับฟังก์ชันการขายของแอปให้ดาวน์โหลดเฉพาะเมื่อผู้ใช้แสดงความสนใจที่จะวางขายสินค้าในมาร์เก็ตเพลส
นอกจากนี้ หากผู้ใช้ไม่ได้ขายสินค้าอีกต่อไปหลังจากผ่านไประยะเวลาหนึ่ง แอปจะลดขนาดที่ติดตั้งได้โดยขอให้ถอนการติดตั้งฟีเจอร์ดังกล่าว |
สร้างโมดูลฟีเจอร์และกำหนดค่าการนำส่งแบบออนดีมานด์ จากนั้นแอปจะใช้ไลบรารีการนำส่งฟีเจอร์ Play เพื่อขอให้ดาวน์โหลดโมดูลตามต้องการได้ |
| การนำส่งแบบมีเงื่อนไข | ช่วยให้คุณระบุข้อกำหนดบางอย่างเกี่ยวกับอุปกรณ์ของผู้ใช้ เช่น ฟีเจอร์ฮาร์ดแวร์ ภาษา และระดับ API ขั้นต่ำ เพื่อพิจารณาว่าจะดาวน์โหลดฟีเจอร์ที่แยกเป็นโมดูลเมื่อติดตั้งแอปหรือไม่ | หากแอปมาร์เก็ตเพลสเข้าถึงได้ทั่วโลก คุณอาจต้องรองรับวิธีการชำระเงินที่ได้รับความนิยมในบางภูมิภาคหรือบางท้องถิ่นเท่านั้น หากต้องการลดขนาดการดาวน์โหลดแอปครั้งแรก คุณสามารถสร้างโมดูลฟีเจอร์แยกต่างหากสำหรับการประมวลผลวิธีการชำระเงินบางประเภท และติดตั้งโมดูลเหล่านั้นแบบมีเงื่อนไขในอุปกรณ์ของผู้ใช้ตามภาษาที่ลงทะเบียนไว้ | สร้างโมดูลฟีเจอร์และกำหนดค่าการนำส่งแบบมีเงื่อนไข |
| การนำส่งทันที | Google Play Instant ช่วยให้ผู้ใช้โต้ตอบกับแอปได้โดยไม่ต้องติดตั้งแอปในอุปกรณ์ แต่จะลองใช้แอปของคุณผ่านปุ่ม "ลองเลย" ใน Google Play Store หรือ URL ที่คุณสร้างขึ้นแทน การนำเสนอเนื้อหาในรูปแบบนี้ช่วยให้คุณเพิ่มการมีส่วนร่วมกับแอปได้ง่ายขึ้น
การนำส่งแบบทันทีช่วยให้คุณใช้ Google Play Instant เพื่อให้ผู้ใช้ได้สัมผัสประสบการณ์การใช้งานฟีเจอร์บางอย่างของแอปได้ทันทีโดยไม่ต้องติดตั้ง |
ลองพิจารณาเกมที่มี 2-3 ด่านแรกของเกมในโมดูลฟีเจอร์ขนาดเล็ก คุณสามารถเปิดใช้ 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 เพื่อตรวจสอบ 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 ของโมดูล เช่น หากคุณสร้างโมดูลฟีเจอร์ใหม่ในไดเรกทอรี |
| android:isFeatureSplit="true | false"> |
เมื่อ Android Studio สร้าง App Bundle ระบบจะรวมแอตทริบิวต์นี้ไว้ให้คุณ ดังนั้น คุณไม่ควรระบุหรือแก้ไขแอตทริบิวต์นี้ด้วยตนเอง
ระบุว่าโมดูลนี้เป็นโมดูลฟีเจอร์
ไฟล์ Manifest ในโมดูลพื้นฐานและ APK การกำหนดค่าจะละเว้นแอตทริบิวต์นี้หรือตั้งค่าเป็น |
| <dist:module | กำหนดแอตทริบิวต์ที่ระบุวิธีจัดแพ็กเกจและเผยแพร่โมดูลเป็น APK |
| dist:instant="true | false" |
ระบุว่าโมดูลควรพร้อมใช้งานผ่าน Google Play Instant เป็นประสบการณ์แบบใช้งานได้ทันทีหรือไม่
หากแอปมีโมดูลฟีเจอร์ที่เปิดใช้ Instant อย่างน้อย 1 โมดูล คุณต้องเปิดใช้ Instant ในโมดูลพื้นฐานด้วย เมื่อใช้ Android Studio 3.5 ขึ้นไป IDE จะดำเนินการนี้ให้คุณเมื่อคุณสร้างโมดูลฟีเจอร์ที่เปิดใช้ Instant คุณไม่สามารถตั้งค่าองค์ประกอบ XML นี้เป็น |
| dist:title="@string/feature_name"> |
ระบุชื่อที่แสดงต่อผู้ใช้สำหรับโมดูล เช่น อุปกรณ์อาจแสดงชื่อนี้เมื่อขอการยืนยันการดาวน์โหลด
คุณต้องใส่ทรัพยากรสตริงสำหรับชื่อนี้ในไฟล์ |
| <dist:fusing dist:include="true | false" /> |
ระบุว่าจะรวมโมดูลใน Multi-APK ที่กำหนดเป้าหมายเป็นอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 20) และต่ำกว่าหรือไม่
นอกจากนี้ เมื่อคุณ
ใช้ |
| <dist:delivery> | รวมตัวเลือกที่ปรับแต่งการนำส่งโมดูล ดังที่แสดงด้านล่าง โปรดทราบว่าโมดูลฟีเจอร์แต่ละโมดูลต้องกำหนดค่าตัวเลือกการนำส่งที่กำหนดเองเหล่านี้เพียงประเภทเดียวเท่านั้น |
| <dist:install-time> |
ระบุว่าโมดูลควรพร้อมใช้งาน ณ เวลาติดตั้ง ลักษณะการทำงานนี้เป็นลักษณะการทำงานเริ่มต้นสำหรับโมดูลฟีเจอร์ที่ไม่ได้ระบุตัวเลือกการนำส่งที่กำหนดเองประเภทอื่น
ดูข้อมูลเพิ่มเติมเกี่ยวกับการดาวน์โหลดขณะติดตั้งได้ที่ กำหนดค่าการนำส่งขณะติดตั้ง โหนดนี้ยังระบุเงื่อนไขที่จำกัดโมดูลไว้เฉพาะอุปกรณ์ที่ตรงตามข้อกำหนดบางอย่างได้ด้วย เช่น ฟีเจอร์ของอุปกรณ์ ประเทศของผู้ใช้ หรือระดับ API ขั้นต่ำ ดูข้อมูลเพิ่มเติมได้ที่หัวข้อ กำหนดค่าการส่งแบบมีเงื่อนไข |
| <dist:removable dist:value="true | false" /> |
เมื่อไม่ได้ตั้งค่าหรือตั้งค่าเป็น เมื่อตั้งค่า ค่าเริ่มต้นคือ หมายเหตุ: ฟีเจอร์นี้จะใช้ได้เมื่อใช้ปลั๊กอิน 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 ในภายหลัง คุณต้องทำดังต่อไปนี้ (ไม่เช่นนั้น คุณอาจได้รับข้อผิดพลาดขณะรันไทม์)
|
| ... </manifest> |
แหล่งข้อมูลเพิ่มเติม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้โมดูลฟีเจอร์ โปรดลองดูแหล่งข้อมูลต่อไปนี้
บล็อกโพสต์
- ฟีเจอร์ใหม่ๆ ที่จะช่วยคุณพัฒนา เผยแพร่ และขยายธุรกิจใน Google Play
- การอัปเดต Android App Bundle ล่าสุด รวมถึง API ภาษาเพิ่มเติม
- Patchwork Plaid — เรื่องราวของการแยกส่วน
วิดีโอ
- การนำส่งที่ปรับแต่งได้ด้วย App Bundle และการแชร์บิลด์ทดสอบที่ง่ายดาย
- เครื่องมือใหม่เพื่อเพิ่มประสิทธิภาพขนาดของแอปและเพิ่มยอดการติดตั้งใน Google Play
ข้อกำหนดในการให้บริการและความปลอดภัยของข้อมูล
การเข้าถึงหรือใช้ไลบรารีการนำส่งฟีเจอร์ Play หมายความว่าคุณยอมรับข้อกำหนดในการให้บริการของชุดพัฒนาซอฟต์แวร์ Play Core โปรดอ่านและทำความเข้าใจข้อกำหนดและนโยบายที่เกี่ยวข้องทั้งหมดก่อนเข้าถึงคลัง
ความปลอดภัยของข้อมูล
ไลบรารี Play Core เป็นอินเทอร์เฟซรันไทม์ของแอปกับ Google Play Store ดังนั้นเมื่อคุณใช้ Play Core ในแอป Play Store จะเรียกใช้กระบวนการของตนเอง ซึ่งรวมถึงการจัดการข้อมูลตามที่ข้อกำหนดในการให้บริการของ Google Play กำหนดไว้ ข้อมูลด้านล่างอธิบายวิธีที่ไลบรารี Play Core จัดการข้อมูลเพื่อประมวลผลคำขอที่เฉพาะเจาะจงจากแอปของคุณ
API ภาษาเพิ่มเติม
| ข้อมูลที่รวบรวมเกี่ยวกับการใช้งาน | รายการภาษาที่ติดตั้ง |
| วัตถุประสงค์ของการเก็บรวบรวมข้อมูล | ระบบจะใช้ข้อมูลที่รวบรวมเพื่อนำส่งแอปเวอร์ชันภาษาต่างๆ และเพื่อคงภาษาที่ติดตั้งไว้หลังจากอัปเดตแอป |
| การเข้ารหัสข้อมูล | ข้อมูลได้รับการเข้ารหัส |
| การแชร์ข้อมูล | จะไม่มีการโอนข้อมูลให้บุคคลที่สาม |
| การลบข้อมูล | ระบบจะลบข้อมูลตามระยะเวลาเก็บรักษาที่กำหนดไว้ |
การนำส่งฟีเจอร์ Play
| ข้อมูลที่รวบรวมเกี่ยวกับการใช้งาน |
ข้อมูลเมตาของอุปกรณ์ เวอร์ชันของแอปพลิเคชัน |
| วัตถุประสงค์ของการเก็บรวบรวมข้อมูล | ระบบจะใช้ข้อมูลที่รวบรวมเพื่อแสดงโมดูลที่เหมาะสมในอุปกรณ์ และเพื่อเก็บรักษาโมดูลที่ติดตั้งไว้หลังจากการอัปเดต รวมถึงการสำรองและกู้คืนข้อมูล |
| การเข้ารหัสข้อมูล | ข้อมูลได้รับการเข้ารหัส |
| การแชร์ข้อมูล | จะไม่มีการโอนข้อมูลให้บุคคลที่สาม |
| การลบข้อมูล | ระบบจะลบข้อมูลตามระยะเวลาเก็บรักษาที่กำหนดไว้ |
แม้ว่าเราจะมุ่งมั่นที่จะสร้างความโปร่งใสมากที่สุดเท่าที่จะทําได้ แต่คุณมีหน้าที่รับผิดชอบแต่เพียงผู้เดียวในการตัดสินใจว่าจะตอบกลับแบบฟอร์มส่วนความปลอดภัยของข้อมูล Google Play ที่เกี่ยวกับการเก็บรวบรวมข้อมูล การแชร์ และแนวทางปฏิบัติด้านการรักษาความปลอดภัยของข้อมูลผู้ใช้ในแอปอย่างไร