รูปภาพระบบทั่วไป (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 รองรับการเปลี่ยนแปลงสถาปัตยกรรมที่อิงตาม AIDL/HIDL (หรือที่เรียกว่า Treble) อย่างเต็มรูปแบบ รวมถึงรองรับอินเทอร์เฟซ AIDL และอินเทอร์เฟซ HIDL คุณสามารถใช้ GSI ในอุปกรณ์ Android เครื่องใดก็ได้ที่ใช้อินเทอร์เฟซผู้ให้บริการ AIDL/HIDL (โปรดดูรายละเอียดเพิ่มเติมที่หัวข้อทรัพยากรด้านสถาปัตยกรรม)
- ระบบไฟล์ GSI ใช้ระบบไฟล์ ext4
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
จาก GSIsystem.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 ใช้ขั้นตอนต่อไปนี้เป็นแนวทางทั่วไป
- ตรวจสอบว่าอุปกรณ์มีคุณสมบัติต่อไปนี้
- พิมพ์ลาย
- วิธีการปลดล็อกอุปกรณ์ (เพื่อให้กะพริบได้โดยใช้
fastboot
) - สถานะ "ปลดล็อก" เพื่อให้แฟลชได้ผ่าน
fastboot
(สร้างfastboot
จากซอร์สทรีของ Android เพื่อให้แน่ใจว่าคุณมีfastboot
เวอร์ชันล่าสุด)
- ลบพาร์ติชันระบบปัจจุบัน แล้วแฟลช GSI ลงในพาร์ติชันระบบ
- ล้างข้อมูลผู้ใช้และล้างข้อมูลจากพาร์ติชันที่จำเป็นอื่นๆ (เช่น ข้อมูลผู้ใช้และพาร์ติชันระบบ)
- รีบูตอุปกรณ์
เช่น หากต้องการแฟลช GSI ลงในอุปกรณ์ Pixel ให้ทำดังนี้
- บูตเข้าสู่โหมด
fastboot
และปลดล็อก bootloader - อุปกรณ์ที่รองรับ
fastbootd
ต้องบูตเข้าสู่fastbootd
ด้วย โดยทำดังนี้$ fastboot reboot fastboot
- ลบและแฟลช GSI ลงในพาร์ติชันระบบโดยทำดังนี้
$ fastboot erase system $ fastboot flash system system.img
- ล้างข้อมูลผู้ใช้และล้างข้อมูลออกจากพาร์ติชันอื่นๆ ที่จำเป็น (เช่น พาร์ติชันข้อมูลผู้ใช้และพาร์ติชันระบบ)
$ fastboot -w
- รีบูตกลับไปที่ Bootloader
$ fastboot reboot-bootloader
- ปิดใช้งานการยืนยันการเปิดเครื่องที่ได้รับการยืนยันขณะแฟลช vbmeta ที่ให้มา:
$ fastboot --disable-verification flash vbmeta vbmeta.img
- Reboot:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failed
$ fastboot delete-logical-partition product_a
_a
ควรตรงกับรหัสช่องโฆษณาของพาร์ติชันระบบ
เช่น system_a
ในตัวอย่างนี้
มีส่วนร่วมใน GSI
Android ยินดีรับการมีส่วนร่วมของคุณในการพัฒนา GSI คุณสามารถมีส่วนร่วมและช่วยปรับปรุง GSI ได้โดยทำดังนี้
- การสร้างแพตช์ GSI
DESSERT-gsi
ไม่ใช่ Branch ของการพัฒนาและยอมรับเฉพาะ cherry-picks จาก Branch หลักของ AOSP ดังนั้นในการส่งแพตช์ GSI คุณต้อง:- ส่งแพตช์ไปยังสาขา AOSP
main
- เลือกแพตช์ไปยัง
DESSERT-gsi
- รายงานข้อบกพร่องเพื่อให้เราตรวจสอบรายการที่เลือก
- ส่งแพตช์ไปยังสาขา AOSP
- การรายงานข้อบกพร่อง GSI หรือให้คำแนะนำอื่นๆ อ่านวิธีการในการรายงานข้อบกพร่อง จากนั้นเรียกดูหรือรายงานข้อบกพร่อง GSI
เคล็ดลับ
เปลี่ยนโหมดแถบนำทางโดยใช้ adb
เมื่อบูตด้วย GSI ระบบจะกำหนดค่าโหมดแถบนําทางโดยการลบล้างของผู้ให้บริการ คุณเปลี่ยนโหมดแถบนําทางได้โดยเรียกใช้คําสั่ง adb ต่อไปนี้ในรันไทม์
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
โดย mode จะเป็น threebutton
, twobutton
, gestural
และอื่นๆ ได้