bundletool

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

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

ดาวน์โหลดภาษา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 ซึ่งใช้ส่วนขยายไฟล์ .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 หากไม่รวมแฟล็กนี้ 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 ออกจากชุด 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 App แทน APK ที่ติดตั้งได้ โดยค่าเริ่มต้น bundletool จะวัด ขนาดการดาวน์โหลด APK ที่ติดตั้งได้
--modules=modules ระบุรายการโมดูลที่คั่นด้วยคอมมาในชุด APK ที่จะพิจารณา ในการวัดผล คำสั่ง bundletool จะรวมโมดูลที่ขึ้นต่อกันสำหรับชุดที่ระบุโดยอัตโนมัติ โดยค่าเริ่มต้น คำสั่ง จะวัดขนาดการดาวน์โหลดของโมดูลทั้งหมดที่ติดตั้งในระหว่างการดาวน์โหลดครั้งแรก

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

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