รูปภาพระบบทั่วไป (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 ต้องใช้ GSI ของ Android 10 ในการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า
- บิลด์ผู้ใช้ GSI มีบิลด์สำหรับผู้ใช้จาก Android 10 ใน Android 10 คุณสามารถใช้ GSI ของบิลด์ผู้ใช้ในการทดสอบการปฏิบัติตามข้อกำหนด CTS-on-GSI/VTS ได้ ดูรายละเอียดได้ในการทดสอบ VTS ด้วย 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
ที่อัปเกรดใน RAM disk รองรับ system.img ของ OEM ที่มีเลย์เอาต์ระบบเป็นรูท - ยืนยันการบูต เมื่อใช้ GSI คุณจะต้องปลดล็อกอุปกรณ์เท่านั้น คุณไม่จำเป็นต้องปิดใช้การเริ่มระบบที่ยืนยัน
การเปลี่ยนแปลง GSI ของ Android 9
อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 9 ต้องใช้ GSI ของ Android 9 สำหรับการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI เวอร์ชันก่อนหน้า
- ผสาน GSI กับโปรแกรมจำลอง GSI สร้างขึ้นจากภาพระบบของผลิตภัณฑ์โปรแกรมจำลอง เช่น
aosp_arm64
และaosp_x86
- System-as-root ใน Android เวอร์ชันเก่า อุปกรณ์ที่ไม่รองรับการอัปเดต A/B จะติดตั้งภาพระบบได้ในส่วนไดเรกทอรี
/system
ใน Android 9 ระบบจะเมานต์รูทของภาพระบบเป็นรูทของอุปกรณ์ - อินเทอร์เฟซ Binder แบบ 64 บิต ใน Android 8.x GSI แบบ 32 บิตใช้อินเทอร์เฟซ Binder แบบ 32 บิต Android 9 ไม่รองรับอินเทอร์เฟซ Binder แบบ 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 การเปลี่ยนแปลง Keymaster
ใน 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 | จำนวนบิตของอินเทอร์เฟซ 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
ไม่ใช่สาขาการพัฒนาและยอมรับเฉพาะการคัดสรรจากสาขาหลักของ 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
และอื่นๆ