bundletool

bundletool คือเครื่องมือพื้นฐานที่ Android Studio หรือ Android Gradle และ Google Play ก็ใช้เพื่อสร้าง Android App Bundle bundletool แปลง App Bundle เป็น APK ต่างๆ สำหรับการทำให้ใช้งานได้ในอุปกรณ์

Android SDK Bundle (ASB) และ APK สร้างขึ้นด้วย bundletool ใช่เลย เป็นเครื่องมือบรรทัดคำสั่ง เพื่อให้คุณสร้าง App Bundle และ SDK รวมกลุ่มตัวคุณเองและสร้างบิลด์ฝั่งเซิร์ฟเวอร์ของ Google Play ของแอปอีกครั้ง APK หรือ APK ของ SDK ที่เปิดใช้รันไทม์

ดาวน์โหลดภาษาbundletool

หากยังไม่ได้ดาวน์โหลด ให้ดาวน์โหลด bundletool จาก ที่เก็บของ GitHub

สร้างและทดสอบ App Bundle

คุณสามารถใช้ Android Studio หรือเครื่องมือบรรทัดคำสั่ง bundletool เพื่อสร้าง Android App Bundle แล้วทดสอบการสร้าง APK จาก App Bundle นี้

สร้าง App Bundle

ใช้ Android Studio และปลั๊กอิน Android Gradle สร้างและรับรอง Android App Bundle อย่างไรก็ตาม หากใช้ IDE ไม่ใช่ตัวเลือก ตัวอย่างเช่น เนื่องจากคุณใช้ เซิร์ฟเวอร์สร้างอย่างต่อเนื่อง คุณยัง สร้าง App Bundle จากบรรทัดคำสั่ง และลงนามโดยใช้ jarsigner

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้าง App Bundle ด้วย bundletool ดู สร้าง App Bundle โดยใช้ Bundletool

สร้างชุด APK จาก App Bundle

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

คุณทดสอบ App Bundle ได้ 2 วิธีดังนี้

ส่วนนี้จะอธิบายวิธีใช้ bundletool เพื่อทดสอบ App Bundle ในเครื่อง

เมื่อ bundletool สร้าง APK จาก App Bundle ของคุณจะมี APK ที่สร้างขึ้น APK ในคอนเทนเนอร์ที่เรียกว่าที่เก็บถาวรชุด APK ซึ่งใช้ไฟล์ .apks ส่วนขยาย วิธีสร้างชุด APK สำหรับการกำหนดค่าอุปกรณ์ทั้งหมดของแอป รองรับจาก App Bundle ของคุณ ให้ใช้คำสั่ง bundletool build-apks เป็น แสดง:

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

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

bundletool build-apks --bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks
--ks=/MyApp/keystore.jks
--ks-pass=file:/MyApp/keystore.pwd
--ks-key-alias=MyKeyAlias
--key-pass=file:/MyApp/key.pwd

ตารางต่อไปนี้จะอธิบายการตั้งค่าสถานะและตัวเลือกต่างๆ ที่คุณตั้งค่าได้เมื่อ โดยใช้คำสั่ง bundletool build-apks โดยละเอียด

ตาราง 1 ตัวเลือกสำหรับ คำสั่ง bundletool build-apks

ตั้งค่าสถานะ คำอธิบาย
--bundle=path (ต้องระบุ) ระบุเส้นทางไปยัง App Bundle ที่คุณสร้างด้วย Android Studio หากต้องการดูข้อมูลเพิ่มเติม โปรดอ่าน สร้างโปรเจ็กต์
--output=path (ต้องระบุ) ระบุชื่อของเอาต์พุต .apks ซึ่งมีอาร์ติแฟกต์ APK ทั้งหมดสำหรับ แอป หากต้องการทดสอบอาร์ติแฟกต์ในไฟล์นี้บนอุปกรณ์ ให้ทำตามขั้นตอนใน ส่วนเกี่ยวกับวิธีทำให้ APK ใช้งานได้ กับอุปกรณ์ที่เชื่อมต่อ
--overwrite เขียนทับไฟล์เอาต์พุตที่มีอยู่ด้วย เส้นทางที่คุณระบุโดยใช้ตัวเลือก --output หากคุณ ไม่มีแฟล็กนี้ และไฟล์เอาต์พุตมีอยู่แล้ว คุณจะได้รับ ข้อผิดพลาดของรุ่น
--aapt2=path ระบุเส้นทางที่กำหนดเองไปยัง AAPT2 โดยค่าเริ่มต้น bundletool จะมีเวอร์ชัน AAPT2 ของตัวเอง
--ks=path (ไม่บังคับ) ระบุเส้นทางไปยังคีย์สโตร์ของการทำให้ใช้งานได้ที่ใช้เพื่อ APK หากคุณไม่ใส่ Flag นี้ bundletool พยายามลงนาม APK ของคุณด้วยการลงชื่อแก้ไขข้อบกพร่อง
--ks-pass=pass:password
หรือ
--ks-pass=file:/path/to/file
ระบุรหัสผ่านคีย์สโตร์ หากคุณ ระบุรหัสผ่านเป็นข้อความธรรมดา ให้กำหนดรหัสผ่านด้วย pass: หากคุณส่งเส้นทางไปยังไฟล์ที่มีรหัสผ่าน ให้เข้าเกณฑ์ ด้วย file: หากคุณระบุคีย์สโตร์โดยใช้ แฟล็ก --ks โดยไม่ระบุ --ks-pass bundletool จะแจ้งให้ป้อนรหัสผ่านจากบรรทัดคำสั่ง
--ks-key-alias=alias ระบุชื่อแทนของคีย์การลงนามที่คุณต้องการ
--key-pass=pass:password
หรือ
--key-pass=file:/path/to/file
ระบุรหัสผ่านสำหรับคีย์การลงชื่อ หากคุณ ระบุรหัสผ่านเป็นข้อความธรรมดา ให้กำหนดรหัสผ่านด้วย pass: หากคุณส่งเส้นทางไปยังไฟล์ที่มีรหัสผ่าน ให้เข้าเกณฑ์ ด้วย file:

ถ้ารหัสผ่านนี้เหมือนกับรหัสผ่าน สำหรับคีย์สโตร์ คุณข้ามแฟล็กนี้ได้

--connected-device สั่งให้ bundletool สร้าง APK ที่กำหนดเป้าหมาย การกำหนดค่าอุปกรณ์ที่เชื่อมต่อ หากคุณไม่ใส่ Flag นี้ bundletool สร้าง APK สำหรับการกำหนดค่าอุปกรณ์ทั้งหมด ที่รองรับ
--device-id=serial-number หากคุณมีอุปกรณ์ที่เชื่อมต่อมากกว่า 1 เครื่อง ให้ใช้แฟล็กนี้เพื่อระบุ หมายเลขซีเรียลของอุปกรณ์ที่คุณต้องการทำให้แอปใช้งานได้
--device-spec=spec_json ระบุเส้นทางไปยัง .json ที่ระบุการกำหนดค่าอุปกรณ์ที่คุณต้องการ เพื่อกำหนดเป้าหมาย ดูข้อมูลเพิ่มเติมได้ที่ส่วน "วิธี" สร้างและใช้ JSON ของข้อกำหนดอุปกรณ์ ไฟล์
--mode=universal ตั้งค่าโหมดเป็น universal ใช้ตัวเลือกนี้หากต้องการ bundletool เพื่อสร้าง APK เดียวที่มี โค้ดและทรัพยากรของแอปของคุณ เพื่อให้ APK สามารถทำงานร่วมกับ การกำหนดค่าอุปกรณ์ที่แอปของคุณรองรับ

หมายเหตุ: bundletool มีเฉพาะโมดูลฟีเจอร์ ที่ระบุ <dist:fusing dist:include="true"/> ใน ไฟล์ Manifest ใน APK สากล หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านเกี่ยวกับ ไฟล์ Manifest ของโมดูลฟีเจอร์

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

--local-testing เปิดใช้ App Bundle สำหรับการทดสอบในเครื่อง การทดสอบในเครื่องช่วยให้ทำการทดสอบซ้ำได้อย่างรวดเร็วโดยไม่จำเป็นต้องมีการดำเนินการ เพื่ออัปโหลดไปยังเซิร์ฟเวอร์ Google Play

สำหรับตัวอย่างของวิธีทดสอบการติดตั้งโมดูลโดยใช้ --local-testing ธง โปรดดู ทดสอบการติดตั้งโมดูลในเครื่อง

ทำให้ APK ใช้งานได้ในอุปกรณ์ที่เชื่อมต่อ

หลังจากที่คุณสร้างชุด APK แล้ว bundletool จะสามารถทำให้ APK จากชุดนั้นเป็นอุปกรณ์ที่เชื่อมต่อ

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

หากต้องการทำให้แอปใช้งานได้จากชุด APK ให้ใช้คำสั่ง install-apks และระบุ เส้นทางของ APK ที่ตั้งค่าโดยใช้ --apks=/path/to/apks แจ้งว่าไม่เหมาะสม ที่แสดงในคำสั่งต่อไปนี้ หากมีอุปกรณ์เชื่อมต่ออยู่หลายเครื่อง ระบุอุปกรณ์เป้าหมายโดยเพิ่ม แฟล็ก --device-id=serial-id

bundletool install-apks --apks=/MyApp/my_app.apks

สร้างชุด APK เฉพาะอุปกรณ์

หากไม่ต้องการสร้างชุด APK สำหรับการกำหนดค่าอุปกรณ์ทั้งหมดที่แอปของคุณ คุณสามารถสร้าง APK ที่กำหนดเป้าหมายเฉพาะการกำหนดค่าของ โดยใช้ตัวเลือก --connected-device ตามที่แสดงในคำสั่งต่อไปนี้ หากคุณมีอุปกรณ์ที่เชื่อมต่อไว้หลายเครื่อง ให้ระบุอุปกรณ์เป้าหมายโดยใส่ แฟล็ก --device-id=serial-id

bundletool build-apks --connected-device
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

สร้างและใช้ไฟล์ JSON ของข้อกำหนดอุปกรณ์

bundletool สามารถสร้างชุด APK ที่กำหนดเป้าหมายอุปกรณ์ การกำหนดค่าที่ระบุโดยไฟล์ JSON หากต้องการสร้างไฟล์ JSON สำหรับ อุปกรณ์ที่เชื่อมต่ออยู่ ให้เรียกใช้คำสั่งต่อไปนี้

bundletool get-device-spec --output=/tmp/device-spec.json

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

bundletool build-apks --device-spec=/MyApp/pixel2.json
--bundle=/MyApp/my_app.aab --output=/MyApp/my_app.apks

สร้าง JSON สำหรับข้อมูลจำเพาะของอุปกรณ์ด้วยตนเอง

หากคุณไม่มีสิทธิ์เข้าถึงอุปกรณ์ที่ต้องการสร้าง ตั้งค่า APK แล้ว เช่น หากต้องการลองใช้แอปกับอุปกรณ์ที่ไม่ได้ใช้ คุณสามารถสร้างไฟล์ JSON ด้วยตนเองโดยใช้รูปแบบต่อไปนี้

{
  "supportedAbis": ["arm64-v8a", "armeabi-v7a"],
  "supportedLocales": ["en", "fr"],
  "screenDensity": 640,
  "sdkVersion": 27
}

จากนั้น คุณสามารถส่ง JSON นี้ไปยังคำสั่ง bundle extract-apks ได้ตามที่อธิบายไว้ ในส่วนก่อนหน้า

ดึงข้อมูล APK เฉพาะอุปกรณ์จากชุด APK ที่มีอยู่

หากคุณมีชุด APK เดิมอยู่และต้องการแยก APK ชุดย่อยออก ที่กำหนดเป้าหมายไปยังการกำหนดค่าอุปกรณ์ที่เฉพาะเจาะจง คุณสามารถใช้ extract-apks และระบุ JSON สำหรับข้อมูลจำเพาะของอุปกรณ์ ดังนี้

bundletool extract-apks
--apks=/MyApp/my_existing_APK_set.apks
--output-dir=/MyApp/my_pixel2_APK_set.apks
--device-spec=/MyApp/bundletool/pixel2.json

วัดขนาดการดาวน์โหลดโดยประมาณของ APK ในชุด APK

เพื่อวัดขนาดการดาวน์โหลดโดยประมาณของ APK ในชุด APK ดังต่อไปนี้ เพื่อแสดงที่บีบอัดผ่านสายไฟ ให้ใช้คำสั่ง get-size total:

bundletool get-size total --apks=/MyApp/my_app.apks

คุณจะแก้ไขลักษณะการทำงานของคำสั่ง get-size total ได้โดยใช้ แฟล็กต่อไปนี้

ตาราง 2 ตัวเลือกสำหรับ คำสั่ง get-size total

ตั้งค่าสถานะ คำอธิบาย
--apks=path (ต้องระบุ) ระบุเส้นทางไปยังไฟล์ชุด APK ที่มีอยู่ ซึ่งมีขนาดการดาวน์โหลด
--device-spec=path ระบุเส้นทางไปยังไฟล์ข้อมูลจำเพาะของอุปกรณ์ (จาก get-device-spec หรือสร้างด้วยตนเอง) เพื่อใช้ในการจับคู่ คุณจะระบุเส้นทางบางส่วนเพื่อประเมินชุดการกำหนดค่าได้
--dimensions=dimensions ระบุขนาดที่ใช้ในการคำนวณค่าประมาณขนาด ยอมรับ รายการที่คั่นด้วยจุลภาคของ: SDK, ABI SCREEN_DENSITY และ LANGUAGE หากต้องการวัดข้าม สำหรับมิติข้อมูลทั้งหมด ให้ระบุ ALL
--instant วัดขนาดการดาวน์โหลดของ APK ที่เปิดใช้ Instant แทน APK ที่ติดตั้งได้ โดยค่าเริ่มต้น bundletool จะวัดค่า ขนาดการดาวน์โหลด APK ที่ติดตั้งได้
--modules=modules ระบุรายการโมดูลที่คั่นด้วยคอมมาในชุด APK ที่จะพิจารณา ในการวัดค่า คำสั่ง bundletool โดยอัตโนมัติ รวมโมดูลที่อ้างอิงสำหรับชุดที่ระบุ โดยค่าเริ่มต้น แอตทริบิวต์ จะวัดขนาดการดาวน์โหลดของโมดูลทั้งหมดที่ติดตั้งในระหว่าง การดาวน์โหลดครั้งแรก

สร้าง App Bundle ที่มีทรัพยากร Dependency ของ SDK Bundle (ทดลอง)

คุณสร้าง Android App Bundle ด้วยทรัพยากร Dependency ของ Android SDK Bundle (ASB) ได้ จากบรรทัดคำสั่งและลงนามโดยใช้ jarsigner

โมดูล App Bundle แต่ละรายการจะมีไฟล์ Module Protocol Buffer (.pb) ดังนี้ runtime_enabled_sdk_config.pb ไฟล์นี้มีรายการ SDK ที่โมดูล App Bundle ใช้อยู่ หากต้องการดูคำจำกัดความที่สมบูรณ์ของไฟล์นี้ โปรดดู runtime_enabled_sdk_config.proto

หากต้องการสร้าง App Bundle ที่มีทรัพยากร Dependency ของ SDK Bundle ให้ทำตามขั้นตอนในส่วนเกี่ยวกับ การสร้าง App Bundle โดยใช้ Bundletool และเพิ่ม runtime_enabled_sdk_config.pb ลงใน ZIP ของแต่ละโมดูลแอป ที่มีโค้ดและทรัพยากรซึ่งคอมไพล์แล้ว

ฟิลด์ที่โดดเด่นในไฟล์ runtime_enabled_sdk_config.pb มีดังนี้

  • สรุปใบรับรอง: ไดเจสต์ SHA-256 ของใบรับรองสำหรับคีย์ ใช้เพื่อรับรอง APK ของ SDK ซึ่งสอดคล้องกับใบรับรองใน SdkMetadata.pb ในรูปแบบ Android SDK Archive

  • รหัสแพ็กเกจทรัพยากร: รหัสแพ็กเกจที่ทรัพยากรทั้งหมดใน SDK นี้ ถูกแมปใหม่เมื่อสร้าง APK สำหรับฝัง SDK ลงในแอป ซึ่งจะช่วยเปิดใช้ความเข้ากันได้แบบย้อนหลัง

SDK หนึ่งๆ จะปรากฏในโมดูลเดียวเท่านั้น หากหลายโมดูลจำเป็นต้องใช้กัน SDK ทรัพยากร Dependency นี้ควรกรองข้อมูลที่ซ้ำกันออกแล้วและย้ายไปยังโมดูลฐาน โมดูลต่างๆ ต้องไม่ใช้ SDK เวอร์ชันที่แตกต่างกัน

สร้าง APK จาก App Bundle ที่มีทรัพยากร Dependency ของ SDK Bundle (ทดลอง)

หากต้องการสร้าง APK จาก App Bundle ให้ทำตามขั้นตอนในส่วนเกี่ยวกับ การสร้างชุด APK จาก App Bundle หรือส่วนที่เกี่ยวกับ การสร้างชุด APK เฉพาะอุปกรณ์ และระบุคำสั่ง bundletool build-apks พร้อม SDK ที่ ขึ้นอยู่กับแอปนั้นๆ SDK เหล่านี้มีให้ในรูปแบบ SDK หรือ SDK รูปแบบที่เก็บถาวร

คุณระบุ SDK เป็นชุด SDK ได้โดยการเพิ่ม Flag --sdk-bundles เป็น ดังต่อไปนี้:

bundletool build-apks --bundle=app.aab --sdk-bundles=sdk1.asb,sdk2.asb \
    --output=app.apks

คุณระบุ SDK เป็น SDK ที่เก็บถาวรได้โดยการเพิ่ม Flag --sdk-archives ดังนี้

bundletool build-apks --bundle=app.aab --sdk-archives=sdk1.asar,sdk2.asar \
    --output=app.apks
สร้าง APK จาก App Bundle ที่มีทรัพยากร Dependency ของ SDK Bundle สำหรับอุปกรณ์ที่ไม่รองรับไลบรารี SDK

อุปกรณ์ก่อน Android 13 ไม่รองรับการติดตั้งหรือเรียกใช้ไลบรารี SDK ในรันไทม์ของ SDK Bundletool ซ่อนความซับซ้อนของความเข้ากันได้แบบย้อนหลังและ จะสร้าง APK เวอร์ชันต่างๆ ที่ตั้งค่าจาก App Bundle เดียวกันเมื่อคุณ เรียกใช้ bundletool build-apks ด้วยตัวเลือก --sdk-bundles หรือ --sdk-archives รูปแบบที่หลากหลายจะกำหนดเป้าหมายอุปกรณ์ที่มีความสามารถแตกต่างกัน ดังนี้

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

เช่นเดียวกับวิธีสร้าง APK สำหรับ App Bundle ที่ไม่มีทรัพยากร Dependency ของ SDK bundletool extract-apks และ bundletool install-apks แสดงผลชุดที่กรองแล้ว APK จากตัวแปรที่ดีที่สุดสำหรับอุปกรณ์ที่เชื่อมต่อหรืออุปกรณ์ที่ให้มา การกำหนดค่า

สำหรับ Use Case ขั้นสูงที่คุณสนใจสร้างการแยก APK เท่านั้น จากที่เก็บถาวร SDK ของแอปที่เจาะจงสำหรับอุปกรณ์รุ่นเก่า ให้ใช้ bundletool build-sdk-apks-for-app ดังนี้

bundletool build-sdk-apks-for-app --app-properties=app-properties.json \
    --sdk-archive=sdk.asar --output=sdk.apks

ไฟล์ app-properties ควรมีช่องที่อธิบายไว้ใน runtime_enabled_sdk_config.proto นี่คือสิ่งที่ app-properties มีลักษณะดังนี้

{
  "package_name": "com.my.app",
  "version_code": 1234,
  "min_sdk_version": 21,
  "resources_package_id": 0x7e
}

คำสั่ง bundletool build-sdk-apks-for-app จะสร้างชุดย่อยของแอป APK ที่สอดคล้องกับเนื้อหา SDK ในชื่อแพ็กเกจของแอป คุณสามารถ รวม APK เหล่านี้กับ APK อื่นๆ ที่มีเนื้อหาของแอปนั้น ตัวอย่างเช่น หาก คุณสร้างอุปกรณ์แยกกันอย่างค่อยเป็นค่อยไป และติดตั้งด้วยกันในอุปกรณ์ ที่ไม่รองรับรันไทม์ของ SDK

สร้างและทดสอบแพ็กเกจ SDK (ทดลอง)

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

สร้างแพ็กเกจ SDK

คุณสามารถสร้าง ASB จากบรรทัดคำสั่งและลงนาม โดยใช้ jarsigner

หากต้องการสร้างแพ็กเกจ SDK ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไฟล์ Manifest และทรัพยากรของแพ็กเกจ SDK ในรูปแบบ Proto โดยทำตามขั้นตอนเดียวกันสำหรับ App Bundle

  2. สร้างแพ็กเกจโค้ดและทรัพยากรของ SDK ที่คอมไพล์แล้วเป็นไฟล์ ZIP พื้นฐาน เช่นเดียวกับที่คุณทำในโมดูลแอป

  3. สร้างไฟล์ SdkModulesConfig.pb.json และ SdkBundleConfig.pb.json ซึ่งตรงกับรูปแบบที่อธิบายไว้ใน ข้อกำหนดเฉพาะของ Android SDK Bundle

  4. สร้าง ASB ของคุณโดยใช้คำสั่ง bundletool build-sdk-bundle ในฐานะ ดังต่อไปนี้:

bundletool build-sdk-bundle --sdk-bundle-config=SdkBundleConfig.pb.json \
    --sdk-modules-config=SdkModulesConfig.pb.json \
    --modules=base.zip --output=sdk.asb

ตารางต่อไปนี้จะอธิบายการตั้งค่าสถานะและตัวเลือกต่างๆ ที่คุณตั้งค่าได้เมื่อ โดยใช้คำสั่ง bundletool build-sdk-bundle อย่างละเอียด

ตารางที่ 3 ตัวเลือกสำหรับ คำสั่ง bundletool build-sdk-bundle

ตั้งค่าสถานะ คำอธิบาย
--modules (ต้องระบุ) ไฟล์โมดูลที่คุณต้องการสร้างขั้นสุดท้าย ASB จาก
--output (ต้องระบุ) เส้นทางไปยังตำแหน่งที่คุณต้องการสร้าง ASB
--sdk-modules-config (ต้องระบุ) เส้นทางไปยังไฟล์ JSON ที่อธิบายการกำหนดค่า ของโมดูล SDK หากต้องการดูวิธีจัดรูปแบบไฟล์ JSON โปรดดู ข้อมูลจำเพาะของ Android SDK Bundle
--sdk-bundle-config เส้นทางไปยังไฟล์ JSON ที่อธิบายการกำหนดค่า ของแพ็กเกจ SDK หากต้องการดูวิธีจัดรูปแบบไฟล์ JSON โปรดดู ข้อมูลจำเพาะของ Android SDK Bundle
--metadata-file ไฟล์ที่จะรวมข้อมูลเมตาสำหรับ ASB รูปแบบของค่าแฟล็กคือ <bundle-path>:<physical-file>, โดยที่ <bundle-path> หมายถึงตำแหน่งไฟล์ภายใน ไดเรกทอรีข้อมูลเมตาของแพ็กเกจ SDK และ <physical-file> คือ ไฟล์ที่มีอยู่ซึ่งมีข้อมูลดิบที่ควรจัดเก็บ การตั้งค่าสถานะอาจเป็น ซ้ำกัน
--overwrite หากมีการตั้งค่า ตัวเลือกนี้จะเขียนทับเอาต์พุตที่มีอยู่ก่อนหน้า

สร้าง APK จากแพ็กเกจ SDK

หลังจากที่คุณสร้าง ASB แล้ว คุณสามารถทดสอบ Bundle SDK ในเครื่องได้โดย การสร้าง APK โดยใช้คำสั่ง bundletool build-sdk-apks ตามที่แสดงใน โค้ดต่อไปนี้

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks

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

หากต้องการทำให้ ASB ใช้งานได้ในอุปกรณ์ คุณต้องระบุข้อมูล ข้อมูลการลงชื่อ ดังที่ปรากฏในคำสั่งต่อไปนี้

bundletool build-sdk-apks --sdk-bundle=sdk.asb --output=sdk.apks \
    --ks=keystore.jks \
    --ks-pass=file:/keystore.pwd \
    --ks-key-alias=KeyAlias \
    --key-pass=file:/key.pwd

ตารางต่อไปนี้จะอธิบายการตั้งค่าสถานะและตัวเลือกต่างๆ ที่คุณตั้งค่าได้เมื่อ โดยใช้คำสั่ง bundletool build-sdk-apks อย่างละเอียด

ตาราง 4 ตัวเลือกสำหรับ คำสั่ง bundletool build-sdk-apks

ตั้งค่าสถานะ คำอธิบาย
--sdk-bundle (ต้องระบุ) เส้นทางไปยังแพ็กเกจ SDK ต้องมีส่วนขยาย .asb
--output (จำเป็น) โดยค่าเริ่มต้น เส้นทางที่คุณต้องการเก็บชุดไฟล์ APK ให้สร้างขึ้น อีกทางเลือกหนึ่งคือ หากคุณใช้ --output-format=DIRECTORY, นี่คือเส้นทางไปยังไดเรกทอรีที่คุณต้องการจัดเก็บ APK ที่สร้างขึ้น
--ks เส้นทางไปยังคีย์สโตร์ที่คุณต้องการใช้เพื่อลงชื่อ APK ที่สร้างขึ้น
--ks-key-alias ชื่อแทนของคีย์ที่จะใช้ในคีย์สโตร์เพื่อลงนาม APK ที่สร้างขึ้น
--key-pass

รหัสผ่านของคีย์ในคีย์สโตร์ที่จะใช้ลงชื่อ APK

หากส่งรหัสผ่านเป็นข้อความธรรมดา คุณต้องใส่คำนำหน้าค่า ด้วย pass: เช่น pass:qwerty หากรหัสผ่านคือบรรทัดแรกของไฟล์ คุณต้องนำหน้าค่า ด้วย file: ตัวอย่างเช่น file:/tmp/myPassword.txt

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

--ks-pass

รหัสผ่านของคีย์สโตร์ที่จะใช้รับรอง APK ที่สร้างขึ้น

หากส่งรหัสผ่านเป็นข้อความธรรมดา คุณต้องใส่คำนำหน้าค่า ด้วย pass: เช่น pass:qwerty หาก รหัสผ่าน คือบรรทัดแรกของไฟล์ คุณต้องนำหน้าค่าด้วย file: ตัวอย่างเช่น file:/tmp/myPassword.txt

หากไม่ได้ตั้งค่าแฟล็กนี้ เทอร์มินัลบรรทัดคำสั่งจะแจ้งให้ป้อนรหัสผ่าน

--aapt2 เส้นทางไปยังไบนารี AAPT2 ที่จะใช้
--output-format รูปแบบเอาต์พุตสำหรับ APK ที่สร้างขึ้น โดยค่าเริ่มต้น ตัวเลือกนี้จะมีการตั้งค่าเป็น APK_SET ซึ่งเอาต์พุต APK ไปยังที่เก็บถาวรของชุด APK ที่ สร้าง แล้ว หากตั้งค่าเป็น DIRECTORY ก็จะเอาต์พุต APK ไปยัง ไดเรกทอรีที่ระบุโดย --output
--verbose หากตั้งค่าไว้ ตัวเลือกนี้จะพิมพ์ข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการตามคำสั่งใน เอาต์พุตมาตรฐาน
--version-code รหัสเวอร์ชันของ SDK นี่คือรหัสเวอร์ชันที่แพลตฟอร์ม Android ใช้ ให้ติดตั้ง APK ไม่ใช่เวอร์ชัน SDK สามารถตั้งค่าตัวเลือกนี้เป็น มูลค่าที่กำหนดเอง หากไม่ได้ตั้งค่าไว้ ค่าเริ่มต้นจะเป็น 0
--overwrite หากมีการตั้งค่า ตัวเลือกนี้จะเขียนทับเอาต์พุตที่มีอยู่ก่อนหน้า

ติดตั้งใช้งาน แยกข้อมูล และวัดขนาดของ SDK APK

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

สร้างที่เก็บถาวร SDK จากแพ็กเกจ SDK

หลังจากที่คุณอัปโหลด ASB ไปยัง ช่องทางการเผยแพร่สำหรับ ใน Google Play นั่นคือ ASB ถูกเปลี่ยนให้เป็น Android SDK เก็บ (.asar) เพื่อเผยแพร่ไปยังนักพัฒนาแอปผ่าน Maven สำหรับข้อมูลเพิ่มเติม รายละเอียดเกี่ยวกับรูปแบบ ดูที่ส่วน เกี่ยวกับ ข้อกําหนดเกี่ยวกับรูปแบบที่เก็บถาวรของ SDK

หลังจากที่คุณสร้าง ASB แล้ว คุณสามารถทดสอบการสร้าง Android SDK Archive ภายในเครื่องโดยใช้คำสั่ง bundletool build-sdk-asar ในฐานะ ที่แสดงในรหัสต่อไปนี้

bundletool build-sdk-asar --sdk-bundle=sdk.asb --output=sdk.asar \
    --apk-signing-key-certificate=keycert.txt

ตารางต่อไปนี้จะอธิบายการตั้งค่าสถานะและตัวเลือกต่างๆ ที่คุณตั้งค่าได้เมื่อ โดยใช้คำสั่ง bundletool build-sdk-asar อย่างละเอียด

ตาราง 5 ตัวเลือกสำหรับ คำสั่ง bundletool build-sdk-asar

ตั้งค่าสถานะ คำอธิบาย
--apk-signing-key-certificate (ต้องระบุ) เส้นทางไปยังใบรับรองการลงนาม SDK APK นี่คือ ใบรับรองที่สอดคล้องกับคีย์ที่คุณใช้รับรอง APK ใน คำสั่ง build-sdk-apks
--output (ต้องระบุ) เส้นทางที่คุณต้องการใช้ไฟล์ .asar สร้าง แล้ว
--sdk-bundle (ต้องระบุ) เส้นทางไปยังแพ็กเกจ SDK ต้องมีส่วนขยาย .asb
--overwrite หากมีการตั้งค่า ตัวเลือกนี้จะเขียนทับเอาต์พุตที่มีอยู่ก่อนหน้า

รูปแบบ SDK ที่เปิดใช้รันไทม์ (ทดลอง)

SDK ที่เปิดใช้รันไทม์มีรูปแบบไฟล์ Android 2 รูปแบบดังนี้

  • Android SDK Bundle (.asb) ที่ใช้เผยแพร่ SDK ที่เปิดใช้รันไทม์ไปยัง App Store
  • Android SDK Archive (.asar) ใช้เพื่อแจกจ่าย SDK ที่เปิดใช้รันไทม์ใน Maven

รูปแบบ Android SDK Bundle

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

Android SDK Bundle (ASB) คือไฟล์ ZIP ที่มีการรับรองพร้อมส่วนขยาย .asb โค้ดและทรัพยากรของ SDK ได้รับการจัดระเบียบให้คล้ายกับสิ่งที่คุณต้องทำ ค้นหาใน APK นอกจากนี้ ASB ยังมีไฟล์การกำหนดค่าอีกจำนวนมากที่ช่วยให้ สร้าง APK ที่ติดตั้งได้

วันที่
รูปที่ 1 เนื้อหาของ Android SDK Bundle

รายการต่อไปนี้คือรายละเอียดของไฟล์ ASB บางส่วนใน รายละเอียด:

  • SdkBundleConfig.pb: ไฟล์การกำหนดค่าในรูปแบบ Proto ที่มีองค์ประกอบ รายการ SDK ที่เปิดใช้รันไทม์ซึ่ง SDK ของคุณต้องใช้ แบบเต็ม โปรดดูคำจำกัดความ sdk_bundle_config.proto

  • modules.resm: ไฟล์ ZIP ที่มีข้อมูลทั้งหมดที่จำเป็นในการสร้าง APK จาก SDK

  • SdkModulesConfig.pb: ไฟล์การกำหนดค่าในรูปแบบ Proto ไฟล์นี้ มีชื่อ SDK, เวอร์ชัน และชื่อคลาสของจุดแรกเข้า SDK สำหรับ เฟรมเวิร์ก (SandboxedSdkProvider) ดูคำจำกัดความทั้งหมดได้ที่ sdk_modules_config.proto

  • base/: โมดูลเดียวที่มีโค้ด SDK และทรัพยากร

    • manifest/: ไฟล์ Manifest ของ SDK ในรูปแบบ Proto
    • dex/: โค้ดที่คอมไพล์ในรูปแบบ DEX คุณสามารถส่งไฟล์ DEX ได้หลายไฟล์
    • res/, lib/, assets/: ไดเรกทอรีเหล่านี้เหมือนกับไดเรกทอรีใน APK ทั่วไป เส้นทางในไดเรกทอรีเหล่านี้จะยังคงอยู่เมื่อสร้าง APK ของ SDK
    • root/: ไดเรกทอรีนี้จะเก็บไฟล์ที่ย้ายไปยังรูทในภายหลัง SDK APK ตัวอย่างเช่น อาจรวมทรัพยากรแบบ Java ที่ SDK ของคุณโหลดโดยใช้ Class.getResource() เส้นทางภายในไดเรกทอรีนี้ก็ยังคงอยู่ด้วย
  • BUNDLE-METADATA: ไดเรกทอรีนี้มีไฟล์ข้อมูลเมตาที่มี ซึ่งเป็นประโยชน์ต่อเครื่องมือหรือ App Store ไฟล์ข้อมูลเมตาดังกล่าวอาจ มีการแมป ProGuard และรายการไฟล์ DEX ของ SDK ทั้งหมด ไฟล์ในไดเรกทอรีนี้ไม่ได้รวมอยู่ใน APK ของ SDK

รูปแบบ Android SDK Archive

Android SDK Archive คือรูปแบบการจัดจำหน่ายของ SDK ที่เปิดใช้รันไทม์ใน มาเวน เป็นไฟล์ ZIP ที่มีนามสกุลไฟล์ .asar ไฟล์ มีข้อมูลทั้งหมดที่เครื่องมือสร้างแอปจำเป็นต้องใช้ในการสร้าง Android App Bundle ที่ต้องใช้ SDK ที่เปิดใช้รันไทม์

วันที่
รูปที่ 2 เนื้อหาของ Android SDK Archive Bundle

รายการต่อไปนี้จะอธิบายถึงไฟล์ Android SDK Archive บางส่วนในส่วนอื่นๆ รายละเอียด:

  • SdkMetadata.pb: ไฟล์การกำหนดค่าในรูปแบบ Proto ที่มีองค์ประกอบ ชื่อ เวอร์ชัน และไดเจสต์ของใบรับรองสำหรับคีย์ที่ใช้ในการลงนาม APK ที่สร้างขึ้นสำหรับ SDK นี้ ดูคำจำกัดความทั้งหมดได้ที่ sdk_metadata.proto

  • modules.resm: ไฟล์ ZIP ที่มีข้อมูลทั้งหมดที่จำเป็นในการสร้าง APK จาก SDK ซึ่งเหมือนกับไฟล์ .resm ใน Android SDK Bundle

  • AndroidManifest.xml: ไฟล์ Manifest ของ SDK ในรูปแบบ XML ข้อความ

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

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ bundletool โปรดดู App Bundle: การทดสอบ Bundle ด้วย Bundletool และ Play Console