อิมเมจระบบทั่วไป

รูปภาพระบบทั่วไป (GSI) คือรูปภาพระบบที่มีการกําหนดค่าที่ปรับแล้วสําหรับอุปกรณ์ Android โดยจะถือว่าเป็นการใช้งาน Android ที่แท้จริงที่มีโค้ดโครงการโอเพนซอร์ส Android (AOSP) ที่ไม่มีการแก้ไข ซึ่งอุปกรณ์ Android ทั้งหมดที่ใช้ Android 9 ขึ้นไปจะทำงานได้สําเร็จ

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

หากต้องการเริ่มต้นใช้งาน GSI โปรดอ่านส่วนต่อไปนี้เพื่อดูรายละเอียดเกี่ยวกับการกำหนดค่า GSI (และความแปรปรวนที่อนุญาต) และประเภท เมื่อพร้อมที่จะใช้ GSI แล้ว ให้ดาวน์โหลดและสร้าง GSI สำหรับอุปกรณ์เป้าหมาย จากนั้นแฟลช GSI ไปยังอุปกรณ์ Android

การกำหนดค่า GSI และความแปรปรวน

GSI ปัจจุบันของ Android มีการกำหนดค่าดังต่อไปนี้

GSI ของ Android ปัจจุบันมีความแปรปรวนหลักๆ ดังต่อไปนี้

  • สถาปัตยกรรม CPU การรองรับคำสั่ง CPU ที่แตกต่างกัน (ARM, x86 ฯลฯ) และจำนวนบิตของ CPU (32 บิตหรือ 64 บิต)

เป้าหมาย GSI สำหรับการทดสอบการปฏิบัติตามข้อกำหนดของ Treble

GSI ที่ใช้สำหรับการทดสอบการปฏิบัติตามข้อกำหนดจะกำหนดโดยเวอร์ชัน Android ที่อุปกรณ์เปิดตัวด้วย

ประเภทอุปกรณ์ สร้างเป้าหมาย
อุปกรณ์ที่เปิดตัวพร้อม Android 15 gsi_$arch-user (ลงนามแล้ว)
อุปกรณ์ที่เปิดตัวพร้อม Android 14 gsi_$arch-user (ลงนาม)
อุปกรณ์ที่เปิดตัวพร้อม Android 13 gsi_$arch-user (ลงนามแล้ว)
อุปกรณ์ที่เปิดตัวพร้อม Android 12L gsi_$arch-user (ลงนาม)
อุปกรณ์ที่เปิดตัวพร้อม Android 12 gsi_$arch-user (ลงนามแล้ว)
อุปกรณ์ที่กำลังจะเปิดตัวพร้อม Android 11 gsi_$arch-user (ลงนามแล้ว)

GSI ทั้งหมดสร้างขึ้นจากโค้ดเบส Android 12 และสถาปัตยกรรม CPU แต่ละแบบจะมีไฟล์ GSI ที่เป็นไบนารีที่สอดคล้องกัน (ดูรายการเป้าหมายการสร้างในการสร้าง GSI)

การเปลี่ยนแปลง GSI ของ Android 12

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 12 ต้องใช้ GSI ของ Android 12 สำหรับการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงสำคัญจาก GSI รุ่นก่อนดังต่อไปนี้

  • ชื่อเป้าหมาย เปลี่ยนชื่อเป้าหมาย GSI สำหรับการทดสอบการปฏิบัติตามข้อกำหนดเป็น gsi_$arch ระบบจะเก็บ GSI ที่มีชื่อเป้าหมาย aosp_$arch ไว้สำหรับนักพัฒนาแอป Android นอกจากนี้ แผนการทดสอบ CTS-on-GSI ก็ลดลงด้วยสำหรับการทดสอบอินเทอร์เฟซของผู้ให้บริการ
  • GSI รุ่นเดิมถูกยกเลิกแล้ว GSI 12 นำวิธีแก้ปัญหาที่รองรับอุปกรณ์ Android 8.0 หรือ 8.1 ที่ไม่ได้เป็น Treble อย่างเต็มรูปแบบออก
  • Userdebug SEPolicy GSI gsi_$arch มี userdebug_plat_sepolicy.cil เมื่อแฟลช vendor_boot-debug.img หรือ boot-debug.img สำหรับ OEM โดยเฉพาะ /system/bin/init จะโหลด userdebug_plat_sepolicy.cil จาก GSI system.img ดูรายละเอียดได้ในการทดสอบ VTS ด้วย Debug Ramdisk

การเปลี่ยนแปลง GSI ของ Android 11

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 11 ต้องใช้ GSI ของ Android 11 ในการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า

  • เนื้อหา System_ext ได้ Android 11 กำหนดพาร์ติชันใหม่ system_ext GSI จะใส่เนื้อหาส่วนขยายของระบบไว้ในโฟลเดอร์ system/system_ext
  • APEXes GSI มีทั้ง APEX ที่รวมเข้าด้วยกันและบีบอัด ระบบจะกำหนดว่าจะใช้รายการใดโดยดูจากพร็อพเพอร์ตี้ระบบ ro.apex.updatable ในพาร์ติชันของผู้ให้บริการขณะรันไทม์ ดูรายละเอียดได้จาก การกำหนดค่าระบบเพื่อรองรับการอัปเดต APEX

การเปลี่ยนแปลง GSI ของ Android 10

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 10 ต้องใช้ Android 10 GSI ในการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงสำคัญจาก GSI รุ่นก่อนดังต่อไปนี้

  • บิลด์ผู้ใช้ GSI มีบิลด์สำหรับผู้ใช้จาก Android 10 ใน Android 10 คุณสามารถใช้ GSI ของบิลด์ผู้ใช้ในการทดสอบการปฏิบัติตามข้อกำหนด CTS-on-GSI/VTS ได้ ดูรายละเอียดได้ในการทดสอบ VTS ด้วย Debug Ramdisk
  • รูปแบบที่ไม่มีการแยกวิเคราะห์ GSI ที่มีเป้าหมาย aosp_$arch สร้างขึ้นด้วยรูปแบบที่ไม่มีการแยกวิเคราะห์ คุณสามารถใช้ img2simg เพื่อแปลง GSI ที่ไม่ได้แยกวิเคราะห์เป็นรูปแบบเบาบางได้หากจำเป็น
  • System-as-root เป้าหมายบิลด์ GSI เดิมที่ชื่อ aosp_$arch_a ถูกยกเลิกแล้ว สำหรับอุปกรณ์ที่อัปเกรดจาก Android 8 หรือ 8.1 เป็น Android 10 ที่มี ramdisk และไม่ใช่ระบบเป็นรูท ให้ใช้ GSI เดิม aosp_$arch_ab init ที่อัปเกรดใน RAMdisk รองรับ system.img ของ OEM ที่มีเลย์เอาต์ระบบเป็นรูท
  • ยืนยันการบูต เมื่อใช้ GSI คุณแค่ต้องปลดล็อกอุปกรณ์เท่านั้น คุณไม่จำเป็นต้องปิดใช้การเริ่มระบบที่ยืนยัน

การเปลี่ยนแปลง GSI ของ Android 9

อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 9 ต้องใช้ GSI ของ Android 9 สำหรับการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า

  • รวม GSI และโปรแกรมจำลอง GSI สร้างขึ้นจากรูปภาพระบบของผลิตภัณฑ์โปรแกรมจำลอง เช่น aosp_arm64 และ aosp_x86
  • รูทของระบบ ใน Android เวอร์ชันก่อนหน้า อุปกรณ์ที่ไม่รองรับการอัปเดต A/B จะติดตั้งภาพระบบได้ในส่วนไดเรกทอรี /system ใน Android 9 รูทของอิมเมจระบบจะต่อเชื่อมเป็นรูทของอุปกรณ์
  • อินเทอร์เฟซ Binder 64 บิต ใน Android 8.x GSI แบบ 32 บิตใช้อินเทอร์เฟซ Binder แบบ 32 บิต Android 9 ไม่รองรับอินเทอร์เฟซแฟ้ม 32 บิต ดังนั้น GSI แบบ 32 บิตและ GSI แบบ 64 บิตจะใช้อินเทอร์เฟซ Binder 64 บิต
  • การบังคับใช้ VNDK ใน Android 8.1 คุณเลือกใช้ VNDK หรือไม่ก็ได้ ตั้งแต่ Android 9 เป็นต้นไป คุณจะต้องระบุ VNDK ดังนั้น จึงต้องตั้งค่า BOARD_VNDK_VERSION
  • พร็อพเพอร์ตี้ของระบบที่เข้ากันได้ Android 9 เปิดใช้การตรวจสอบสิทธิ์เข้าถึงสำหรับพร็อพเพอร์ตี้ของระบบ (PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true) ที่เข้ากันได้

การเปลี่ยนแปลงใน Android 9 คีย์มาสเตอร์

ใน Android เวอร์ชันเก่า อุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่าจำเป็นต้องยืนยันว่าข้อมูลเวอร์ชัน (ro.build.version.release และ ro.build.version.security_patch) ที่รายงานโดยระบบที่ทำงานอยู่ตรงกับข้อมูลเวอร์ชันที่รายงานโดย Bootloader ข้อมูลดังกล่าวมักได้มาจากส่วนหัวของอิมเมจการเปิดเครื่อง

ใน Android 9 ขึ้นไป ข้อกำหนดนี้เปลี่ยนแปลงไปเพื่อให้ผู้ให้บริการบูต GSI ได้ กล่าวโดยละเอียดคือ Keymaster ไม่ควรดำเนินการตรวจสอบเนื่องจากข้อมูลเวอร์ชันที่ GSI รายงานอาจไม่ตรงกับข้อมูลเวอร์ชันที่รายงานโดยโปรแกรมบูตของผู้ให้บริการ สำหรับอุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่า ผู้ให้บริการต้องแก้ไขการใช้งาน Keymaster เพื่อข้ามการยืนยัน (หรืออัปเกรดเป็น Keymaster 4) ดูรายละเอียดเกี่ยวกับ Keymaster ได้ที่หัวข้อคีย์สโตร์ที่สนับสนุนฮาร์ดแวร์

ดาวน์โหลด GSI

คุณสามารถดาวน์โหลด GSI ที่คอมไพล์ไว้ล่วงหน้าได้จากเว็บไซต์การผสานรวมอย่างต่อเนื่อง (CI) ของ AOSP ที่ ci.android.com หากดาวน์โหลด GSI ประเภทสำหรับแพลตฟอร์มฮาร์ดแวร์ของคุณไม่ได้ โปรดดูรายละเอียดการสร้าง GSI สำหรับเป้าหมายที่เฉพาะเจาะจงในส่วนต่อไปนี้

สร้าง GSI

ตั้งแต่ Android 9 เป็นต้นไป Android แต่ละเวอร์ชันจะมีสาขา GSI ชื่อ DESSERT-gsi ใน AOSP (เช่น android12-gsi คือสาขา GSI ใน Android 12) สาขาของ GSI มีเนื้อหาของ Android ที่ใช้แพตช์ด้านความปลอดภัยและแพตช์ GSI ทั้งหมด

หากต้องการสร้าง GSI ให้ตั้งค่าซอร์สโค้ด Android โดยดาวน์โหลดจากสาขา GSI และเลือกเป้าหมายการสร้าง GSI ใช้ตารางเป้าหมายการสร้างด้านล่างเพื่อระบุเวอร์ชัน GSI ที่ถูกต้องสำหรับอุปกรณ์ของคุณ หลังจากการบิลด์เสร็จสมบูรณ์แล้ว GSI จะเป็นอิมเมจระบบ (นั่นคือ system.img) และปรากฏในโฟลเดอร์เอาต์พุต out/target/product/generic_arm64

ตัวอย่างเช่น หากต้องการสร้างเป้าหมายบิลด์ GSI gsi_arm64-userdebug ในสาขา GSI android12-gsi ให้เรียกใช้คำสั่งต่อไปนี้

$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi
$ repo sync -cq
$ source build/envsetup.sh
$ lunch gsi_arm64-userdebug
$ make -j4

เป้าหมายของบิลด์ GSI สำหรับ Android

เป้าหมายการสร้าง GSI ต่อไปนี้มีไว้สำหรับอุปกรณ์ที่เปิดตัวใน Android 9 ขึ้นไป

ชื่อ GSI CPU Arc จำนวนบิตของอินเทอร์เฟซ Binder ระบบเป็นรูท เป้าหมายของบิลด์
gsi_arm เปิดระบบ 32 Y gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Y gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 Y gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 Y gsi_x86_64-user
gsi_x86_64-userdebug

ข้อกำหนดสำหรับการแฟลช GSI

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

  1. ตรวจสอบว่าอุปกรณ์มีคุณสมบัติต่อไปนี้
    • พิมพ์ลาย
    • วิธีการปลดล็อกอุปกรณ์ (เพื่อให้กะพริบได้โดยใช้ fastboot)
    • สถานะ "ปลดล็อก" เพื่อให้แฟลชได้ผ่าน fastboot (สร้าง fastboot จากซอร์สทรีของ Android เพื่อให้แน่ใจว่าคุณมี fastboot เวอร์ชันล่าสุด)
  2. ลบพาร์ติชันระบบปัจจุบัน แล้วแฟลช GSI ลงในพาร์ติชันระบบ
  3. ล้างข้อมูลผู้ใช้และล้างข้อมูลจากพาร์ติชันที่จำเป็นอื่นๆ (เช่น ข้อมูลผู้ใช้และพาร์ติชันระบบ)
  4. รีบูตอุปกรณ์

เช่น หากต้องการแฟลช GSI ลงในอุปกรณ์ Pixel ให้ทำดังนี้

  1. บูตเข้าสู่โหมดfastboot และปลดล็อก bootloader
  2. อุปกรณ์ที่รองรับ fastbootd ต้องบูตเข้าสู่ fastbootd ด้วย โดยทำดังนี้
    $ fastboot reboot fastboot
  3. ลบและแฟลช GSI ลงในพาร์ติชันระบบโดยทำดังนี้
    $ fastboot erase system
    $ fastboot flash system system.img
  4. ล้างข้อมูลผู้ใช้และล้างข้อมูลออกจากพาร์ติชันอื่นๆ ที่จำเป็น (เช่น พาร์ติชันข้อมูลผู้ใช้และพาร์ติชันระบบ)
    $ fastboot -w
  5. รีบูตกลับไปที่ Bootloader
    $ fastboot reboot-bootloader
  6. ปิดใช้งานการยืนยันการเปิดเครื่องที่ได้รับการยืนยันขณะแฟลช vbmeta ที่ให้มา:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  7. Reboot:
    $ fastboot reboot
ในอุปกรณ์ Android 10 ขึ้นไปที่มีพาร์ติชันระบบขนาดเล็กกว่า ข้อความแสดงข้อผิดพลาดต่อไปนี้อาจปรากฏขึ้นเมื่อแฟลช GSI
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
ใช้คำสั่งต่อไปนี้เพื่อลบพาร์ติชันผลิตภัณฑ์และเพิ่มพื้นที่ว่างสำหรับพาร์ติชันระบบ ซึ่งจะช่วยให้มีพื้นที่ว่างเพิ่มเติมในการแฟลช GSI
$ fastboot delete-logical-partition product_a
การแก้ไขโพสต์ _a ควรตรงกับรหัสช่องโฆษณาของพาร์ติชันระบบ เช่น system_a ในตัวอย่างนี้

มีส่วนร่วมใน GSI

Android ยินดีรับการมีส่วนร่วมของคุณในการพัฒนา GSI คุณสามารถมีส่วนร่วมและช่วยปรับปรุง GSI ได้โดยทำดังนี้

  • การสร้างแพตช์ GSI DESSERT-gsi ไม่ใช่ Branch ของการพัฒนาและยอมรับเฉพาะ cherry-picks จาก Branch หลักของ AOSP ดังนั้นในการส่งแพตช์ GSI คุณต้อง:
    1. ส่งแพตช์ไปยังสาขา AOSP main
    2. เลือกแพตช์ไปยัง DESSERT-gsi
    3. รายงานข้อบกพร่องเพื่อให้เราตรวจสอบรายการที่เลือก
  • การรายงานข้อบกพร่อง GSI หรือให้คำแนะนำอื่นๆ อ่านวิธีการในการรายงานข้อบกพร่อง จากนั้นเรียกดูหรือรายงานข้อบกพร่อง GSI

เคล็ดลับ

เปลี่ยนโหมดแถบนำทางโดยใช้ adb

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

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

โดย mode จะเป็น threebutton, twobutton, gestural และอื่นๆ ได้