Android App Bundle คือไฟล์ (ที่มีนามสกุลไฟล์ .aab
) ที่คุณอัปโหลดไปยัง Google Play
App Bundle คือไฟล์ไบนารีที่ลงนามแล้วซึ่งจัดระเบียบโค้ดและทรัพยากรของแอปเป็นโมดูล ดังที่แสดงในรูปที่ 1 โค้ดและทรัพยากรสำหรับแต่ละโมดูลจะจัดระเบียบคล้ายกับที่คุณเห็นใน APK ซึ่งก็สมเหตุสมผลเนื่องจากแต่ละโมดูลเหล่านี้อาจสร้างขึ้นเป็น APK แยกต่างหาก จากนั้น Google Play จะใช้ App Bundle เพื่อสร้าง APK ต่างๆ ที่แสดงต่อผู้ใช้ เช่น APK พื้นฐาน, APK ฟีเจอร์, APK การกำหนดค่า และ APK หลายรายการ (สำหรับอุปกรณ์ที่ไม่รองรับ APK แบบแยก) ไดเรกทอรีสีน้ำเงิน เช่น ไดเรกทอรี drawable/
, values/
และ lib/
แสดงถึงโค้ดและทรัพยากรที่ Google Play ใช้สร้าง APK การกําหนดค่าสําหรับแต่ละโมดูล
รูปที่ 1 เนื้อหาของ App Bundle ของ Android ที่มีโมดูลฐาน 1 รายการ โมดูลฟีเจอร์ 2 รายการ และ Asset Pack 2 รายการ
รายการต่อไปนี้อธิบายไฟล์และไดเรกทอรีบางส่วนของ App Bundle โดยละเอียด
- base/, feature1/ และ feature2/: ไดเรกทอรีระดับบนสุดแต่ละไดเรกทอรีแสดงถึงโมดูลที่แตกต่างกันของแอป โดยโมดูลฐานของแอปจะอยู่ในไดเรกทอรี
base
ของ App Bundle เสมอ อย่างไรก็ตาม ไดเรกทอรีของโมดูลฟีเจอร์แต่ละรายการจะมีชื่อตามที่ระบุโดยแอตทริบิวต์split
ในไฟล์ Manifest ของโมดูล ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ Manifest ของโมดูลฟีเจอร์ - asset_pack_1/ และ asset_pack_2/: สำหรับแอปหรือเกมขนาดใหญ่ที่ต้องใช้กราฟิกมาก คุณสามารถแยกชิ้นงานออกเป็นกลุ่มๆ ใน Asset Pack ได้ Asset Pack เหมาะสําหรับเกมเนื่องจากมีขีดจํากัดขนาดที่ใหญ่ คุณสามารถปรับแต่งวิธีและเวลาที่ระบบจะดาวน์โหลด Asset Pack แต่ละรายการลงในอุปกรณ์ตามโหมดการนำส่ง 3 แบบ ได้แก่ เมื่อติดตั้ง ตามอย่างรวดเร็ว และตามคำขอ ชุดชิ้นงานทั้งหมดจะโฮสต์และแสดงจาก Google Play ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเพิ่มแพ็กชิ้นงานลงใน App Bundle ได้ที่ภาพรวมของ Play Asset Delivery
- BUNDLE-METADATA/: ไดเรกทอรีนี้มีไฟล์ข้อมูลเมตาที่มีข้อมูลที่เป็นประโยชน์สำหรับเครื่องมือหรือ App Store ไฟล์ข้อมูลเมตาดังกล่าวอาจรวมถึงการแมป ProGuard และรายการไฟล์ DEX ทั้งหมดของแอป ระบบจะไม่รวมไฟล์ในไดเรกทอรีนี้ไว้ใน APK ของแอป
- ไฟล์ Module Protocol Buffer (
*.pb
): ไฟล์เหล่านี้มีข้อมูลเมตาที่ช่วยอธิบายเนื้อหาของโมดูลแอปแต่ละรายการให้กับ App Store เช่น Google Play ตัวอย่างเช่นBundleConfig.pb
ให้ข้อมูลเกี่ยวกับ App Bundle เอง เช่น เครื่องมือบิลด์เวอร์ชันใดที่ใช้สร้าง App Bundle และnative.pb
และresources.pb
จะอธิบายโค้ดและทรัพยากรในแต่ละโมดูล ซึ่งมีประโยชน์เมื่อ Google Play เพิ่มประสิทธิภาพ APK สำหรับการกําหนดค่าอุปกรณ์ต่างๆ - manifest/: App Bundle จะจัดเก็บ
AndroidManifest.xml
ไฟล์ของโมดูลแต่ละรายการในไดเรกทอรีแยกต่างหากนี้ ซึ่งแตกต่างจาก APK - dex/: App Bundle จะจัดเก็บไฟล์ DEX ของโมดูลแต่ละรายการในไดเรกทอรีแยกต่างหากนี้ ซึ่งแตกต่างจาก APK
- res/, lib/ และ assets/: ไดเรกทอรีเหล่านี้เหมือนกับไดเรกทอรีใน APK ทั่วไป เมื่อคุณอัปโหลด App Bundle แล้ว Google Play จะตรวจสอบไดเรกทอรีเหล่านี้และแพ็กเกจเฉพาะไฟล์ที่ตรงกับการกำหนดค่าอุปกรณ์เป้าหมาย ขณะเดียวกันก็จะเก็บเส้นทางไฟล์ไว้ด้วย
root/: ไดเรกทอรีนี้จะจัดเก็บไฟล์ที่จะย้ายไปยังรูทของ APK ที่มีโมดูลที่ไดเรกทอรีนี้อยู่ ตัวอย่างเช่น ไดเรกทอรี
base/root/
ของ App Bundle อาจรวมทรัพยากรที่ใช้ Java ที่แอปโหลดโดยใช้Class.getResource()
ระบบจะย้ายไฟล์เหล่านั้นไปยังไดเรกทอรีรูทของ APK หลักของแอปและ APK หลายรายการที่ Google Play สร้างขึ้น ระบบจะเก็บเส้นทางภายในไดเรกทอรีนี้ไว้ด้วย กล่าวคือ ระบบจะย้ายไดเรกทอรี (และไดเรกทอรีย่อย) ไปยังรูทของ APK ด้วย
ภาพรวมของ APK แยก
องค์ประกอบพื้นฐานของการแสดงแอปพลิเคชันที่เพิ่มประสิทธิภาพคือกลไก Split APK ที่พร้อมใช้งานใน Android 5.0 (API ระดับ 21) ขึ้นไป APK แบบแยกส่วนมีความคล้ายคลึงกับ APK ปกติมาก โดยมี Bytecode DEX ที่คอมไพล์แล้ว ทรัพยากร และไฟล์ Manifest ของ Android อย่างไรก็ตาม แพลตฟอร์ม Android สามารถจัดการ APK แบบแยกส่วนหลายรายการที่ติดตั้งไว้เป็นแอปเดียวได้ กล่าวคือ คุณสามารถติดตั้ง APK แบบแยกส่วนหลายรายการที่มีสิทธิ์เข้าถึงโค้ดและทรัพยากรทั่วไป และปรากฏเป็นแอปที่ติดตั้งไว้รายการเดียวในอุปกรณ์
ข้อดีของ APK แบบแยกคือความสามารถในการแยก APK แบบโมโนลิธิก (หรือ APK ที่มีโค้ดและทรัพยากรสำหรับฟีเจอร์และการกำหนดค่าอุปกรณ์ทั้งหมดที่แอปรองรับ) ออกเป็นแพ็กเกจขนาดเล็กๆ แยกกันที่จะติดตั้งในอุปกรณ์ของผู้ใช้ตามที่จำเป็น
ตัวอย่างเช่น APK ที่แยกส่วน 1 รายการอาจมีโค้ดและทรัพยากรสําหรับฟีเจอร์เพิ่มเติมที่ผู้ใช้เพียงไม่กี่คนต้องการ ขณะที่ APK ที่แยกส่วนอีกรายการหนึ่งอาจมีทรัพยากรสําหรับภาษาหรือความหนาแน่นของหน้าจอที่เฉพาะเจาะจงเท่านั้น ระบบจะดาวน์โหลดและติดตั้ง APK ที่แยกแต่ละรายการเมื่อผู้ใช้ขอหรืออุปกรณ์จําเป็นต้องใช้
ต่อไปนี้อธิบาย APK ประเภทต่างๆ ที่อาจติดตั้งร่วมกันในอุปกรณ์เพื่อสร้างประสบการณ์การใช้งานแอปที่สมบูรณ์ คุณจะได้ดูวิธีกำหนดค่าโปรเจ็กต์แอปให้รองรับ APK เหล่านี้ในส่วนถัดไปของหน้านี้
- APK พื้นฐาน: APK นี้มีโค้ดและทรัพยากรที่ APK ที่แยกส่วนอื่นๆ ทั้งหมดเข้าถึงได้ รวมถึงมีฟังก์ชันการทำงานพื้นฐานสําหรับแอปของคุณ เมื่อผู้ใช้ขอดาวน์โหลดแอป ระบบจะดาวน์โหลดและติดตั้ง APK นี้ก่อน เนื่องจากมีเพียงไฟล์ Manifest ของ APK หลักเท่านั้นที่ประกาศบริการ ผู้ให้บริการเนื้อหา สิทธิ์ ข้อกำหนดเวอร์ชันแพลตฟอร์ม และการพึ่งพาฟีเจอร์ของระบบอย่างครบถ้วน Google Play จะสร้าง APK พื้นฐานสําหรับแอปของคุณจากโมดูลแอป (หรือพื้นฐาน) ของโปรเจ็กต์ หากคุณกังวลเกี่ยวกับการลดขนาดการดาวน์โหลดครั้งแรกของแอป โปรดทราบว่าโค้ดและทรัพยากรทั้งหมดที่รวมอยู่ในโมดูลนี้จะรวมอยู่ใน APK พื้นฐานของแอป
- APK การกำหนดค่า: APK แต่ละรายการมีไลบรารีและทรัพยากรแบบเนทีฟสำหรับความหนาแน่นของหน้าจอ สถาปัตยกรรม CPU หรือภาษาที่เฉพาะเจาะจง เมื่อผู้ใช้ดาวน์โหลดแอป อุปกรณ์ของผู้ใช้จะดาวน์โหลดและติดตั้งเฉพาะ APK การกำหนดค่าที่กำหนดเป้าหมายเป็นอุปกรณ์ของผู้ใช้ APK การกำหนดค่าแต่ละรายการจะขึ้นอยู่กับ APK พื้นฐานหรือ APK โมดูลฟีเจอร์ กล่าวคือ ระบบจะดาวน์โหลดและติดตั้งไฟล์เหล่านี้พร้อมกับ APK ที่ระบุโค้ดและทรัพยากร คุณไม่จำเป็นต้องสร้างโมดูลแยกต่างหากสำหรับ APK การกำหนดค่า ต่างจากโมดูลพื้นฐานและโมดูลฟีเจอร์ หากคุณใช้แนวทางปฏิบัติมาตรฐานเพื่อจัดระเบียบทรัพยากรทางเลือกสำหรับการกำหนดค่าโดยเฉพาะสำหรับโมดูลพื้นฐานและโมดูลฟีเจอร์ Google Play จะสร้าง APK การกำหนดค่าให้คุณโดยอัตโนมัติ
- APK ของโมดูลฟีเจอร์: APK แต่ละรายการจะมีโค้ดและทรัพยากรสำหรับฟีเจอร์ของแอปที่คุณแยกเป็นโมดูลโดยใช้โมดูลฟีเจอร์ จากนั้นคุณสามารถปรับแต่งวิธีและเวลาในการดาวน์โหลดฟีเจอร์นั้นลงในอุปกรณ์ ตัวอย่างเช่น การใช้ไลบรารี Play Core อาจทำให้ติดตั้งฟีเจอร์ตามคําขอได้หลังจากติดตั้ง APK พื้นฐานในอุปกรณ์แล้ว เพื่อมอบฟังก์ชันการทํางานเพิ่มเติมให้แก่ผู้ใช้ ลองพิจารณาแอปแชทที่ดาวน์โหลดและติดตั้งความสามารถในการจับภาพและส่งรูปภาพเมื่อผู้ใช้ขอใช้ฟังก์ชันดังกล่าวเท่านั้น เนื่องจากโมดูลฟีเจอร์อาจไม่พร้อมใช้งาน ณ เวลาติดตั้ง คุณจึงควรรวมโค้ดและทรัพยากรทั่วไปไว้ใน APK ฐาน กล่าวคือ โมดูลฟีเจอร์ควรถือว่ามีเฉพาะโค้ดและทรัพยากรของ APK ฐานเท่านั้นที่พร้อมใช้งาน ณ เวลาที่ติดตั้ง Google Play จะสร้าง APK ของโมดูลฟีเจอร์สําหรับแอปของคุณจากโมดูลฟีเจอร์ของโปรเจ็กต์
ลองพิจารณาแอปที่มีโมดูลฟีเจอร์ 3 รายการและรองรับการกำหนดค่าอุปกรณ์หลายแบบ รูปที่ 1 ด้านล่างแสดงลักษณะของต้นไม้ความเกี่ยวข้องสำหรับ APK ต่างๆ ของแอป โปรดทราบว่า APK พื้นฐานจะถือเป็นส่วนหัวของต้นไม้ และ APK อื่นๆ ทั้งหมดจะขึ้นอยู่กับ APK พื้นฐาน (หากต้องการทราบวิธีแสดงโมดูลของ APK เหล่านี้ใน Android App Bundle โปรดดูรูปแบบ Android App Bundle)
รูปที่ 1 ต้นไม้ความเกี่ยวข้องสําหรับแอปที่ให้บริการโดยใช้ APK แยก
โปรดทราบว่าคุณไม่จำเป็นต้องสร้าง APK เหล่านี้ด้วยตนเอง Google Play จะสร้างให้คุณโดยใช้ App Bundle ที่ลงนามแล้วรายการเดียวที่คุณสร้างด้วย Android Studio ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบ App Bundle และวิธีสร้างได้ที่สร้าง ติดตั้งใช้งาน และอัปโหลด Android App Bundle
อุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) หรือต่ำกว่า
เนื่องจากอุปกรณ์ที่ใช้ Android 4.4 (API ระดับ 19) และต่ำกว่าไม่รองรับการดาวน์โหลดและการติดตั้ง APK แบบแยก Google Play จึงให้บริการ APK รายการเดียวที่เรียกว่า APK หลายรายการให้กับอุปกรณ์เหล่านั้นแทน ซึ่งเพิ่มประสิทธิภาพให้เหมาะกับการกำหนดค่าของอุปกรณ์ กล่าวคือ APK หลายรายการแสดงถึงประสบการณ์การใช้งานแอปที่สมบูรณ์ แต่ไม่มีโค้ดและทรัพยากรที่ไม่จำเป็น เช่น โค้ดและทรัพยากรสำหรับความหนาแน่นของหน้าจอและสถาปัตยกรรม CPU อื่นๆ
แต่จะมีทรัพยากรสำหรับทุกภาษาที่แอปรองรับ ตัวอย่างเช่น การดำเนินการนี้ช่วยให้ผู้ใช้เปลี่ยนการตั้งค่าภาษาที่ต้องการของแอปได้โดยไม่ต้องดาวน์โหลด APK หลายรายการที่แตกต่างกัน
APK หลายรายการจะไม่สามารถดาวน์โหลดโมดูลฟีเจอร์ตามคําขอในภายหลัง หากต้องการรวมโมดูลฟีเจอร์ไว้ใน APK นี้ คุณต้องปิดใช้แบบออนดีมานด์หรือเปิดใช้การรวมเข้าด้วยกันเมื่อสร้างโมดูลฟีเจอร์
โปรดทราบว่าเมื่อใช้ App Bundle คุณไม่จําเป็นต้องสร้าง ลงนาม อัปโหลด และจัดการ APK สําหรับการกําหนดค่าอุปกรณ์แต่ละรายการที่แอปรองรับ คุณยังคงสร้างและอัปโหลด App Bundle เพียงรายการเดียวสำหรับทั้งแอป และ Google Play จะจัดการส่วนที่เหลือให้คุณ ดังนั้น ไม่ว่าคุณจะวางแผนที่จะรองรับอุปกรณ์ที่ใช้ Android 4.4 หรือต่ำกว่าหรือไม่ Google Play ก็มีกลไกการแสดงผลที่ยืดหยุ่นสำหรับคุณและผู้ใช้
การเปลี่ยนแปลงภาษาของผู้ใช้
เมื่อใช้ App Bundle อุปกรณ์จะดาวน์โหลดเฉพาะโค้ดและทรัพยากรที่จําเป็นต่อการเรียกใช้แอป ดังนั้นสําหรับทรัพยากรภาษา อุปกรณ์ของผู้ใช้จะดาวน์โหลดเฉพาะทรัพยากรภาษาของแอปที่ตรงกับภาษาอย่างน้อย 1 ภาษาที่เลือกไว้ในการตั้งค่าของอุปกรณ์
เมื่อผู้ใช้เปลี่ยนภาษาในการตั้งค่าอุปกรณ์ Google Play อาจต้องดาวน์โหลดและติดตั้ง APK ที่แยกเพิ่มเติมบางรายการก่อนที่แอปจะแสดงในภาษาใหม่ได้
Google Play จะพยายามดาวน์โหลดภาษาเพิ่มเติมทันทีหลังจากสลับ หากอุปกรณ์ของผู้ใช้ออฟไลน์ การดาวน์โหลดไม่สำเร็จ หรือทรัพยากรมีขนาดใหญ่เกินไป Google Play จะพยายามดาวน์โหลดอีกครั้งในเบื้องหลังเมื่ออุปกรณ์อยู่ในสถานะที่ดีขึ้น เมื่อทำงานในอุปกรณ์ที่ใช้ Android 9.0 (API ระดับ 28) หรือต่ำกว่า หากแอปของคุณทำงานอยู่เบื้องหน้าระหว่างการติดตั้ง APK ที่แยกภาษาใหม่ ระบบจะปิดแอป
หากแอปกำหนดให้อุปกรณ์มีทุกภาษาพร้อมใช้งานตลอดเวลา คุณสามารถปิดใช้การแยกภาษาในการกำหนดค่าบิลด์
หากแอปของคุณกำหนดให้ต้องดาวน์โหลดภาษาเพิ่มเติมแยกต่างหากจากภาษาของผู้ใช้ที่เลือกไว้ในการตั้งค่าอุปกรณ์ เช่น เพื่อใช้เครื่องมือเลือกภาษาในแอป คุณสามารถใช้ไลบรารี Play Core เพื่อดาวน์โหลดภาษาเหล่านั้นตามต้องการ