อิมเมจระบบทั่วไป (GSI) คืออิมเมจระบบที่มีการกำหนดค่าที่ปรับแล้วสำหรับอุปกรณ์ Android ถือว่าเป็นการใช้งาน Android อย่างแท้จริงด้วยโค้ด Android Open Source Project (AOSP) ที่ไม่ได้แก้ไข ซึ่งอุปกรณ์ Android ที่ใช้ Android 9 ขึ้นไปสามารถทำงานได้สำเร็จ
GSI ใช้สำหรับการทดสอบ VTS และ CTS-on-GSI อิมเมจระบบของอุปกรณ์ Android จะถูกแทนที่ด้วย GSI จากนั้นทดสอบด้วย Vendor Test Suite (VTS) และ Compatibility Test Suite (CTS) เพื่อให้แน่ใจว่าอุปกรณ์ใช้อินเทอร์เฟซของผู้จำหน่ายอย่างถูกต้องกับ Android เวอร์ชันล่าสุด
หากต้องการเริ่มต้นใช้งาน GSI ให้อ่านส่วนต่อไปนี้เพื่อดูรายละเอียดเกี่ยวกับ การกำหนดค่า GSI (และความแปรปรวนที่อนุญาต) และ ประเภท เมื่อคุณพร้อมที่จะใช้ GSI ให้ ดาวน์โหลดและสร้าง GSI สำหรับอุปกรณ์เป้าหมาย จากนั้น แฟลช GSI ไปยังอุปกรณ์ Android
การกำหนดค่าและความแปรปรวนของ GSI
Android GSI ปัจจุบันมีการกำหนดค่าดังต่อไปนี้:
- เสียงแหลม GSI รวมถึงการสนับสนุนอย่างเต็มที่สำหรับการ เปลี่ยนแปลงสถาปัตยกรรมที่ใช้ AIDL/HIDL (หรือที่เรียกว่า Treble ) รวมถึงการสนับสนุน อินเทอร์เฟซ AIDL และ อินเทอร์เฟซ HIDL คุณสามารถใช้ GSI บนอุปกรณ์ Android ที่ใช้อินเทอร์เฟซผู้ขาย AIDL/HIDL (สำหรับรายละเอียดเพิ่มเติม ดู ทรัพยากรสถาปัตยกรรม )
- ระบบไฟล์ GSI ใช้ระบบไฟล์ ext4
Android GSI ปัจจุบันมีความแปรปรวนที่สำคัญดังต่อไปนี้:
- สถาปัตยกรรมซีพียู รองรับคำสั่ง CPU ที่แตกต่างกัน (ARM, x86 ฯลฯ) และบิตของ CPU (32 บิตหรือ 64 บิต)
เป้าหมาย GSI สำหรับการทดสอบความสอดคล้องของ Treble
GSI ที่ใช้สำหรับการทดสอบการปฏิบัติตามข้อกำหนดจะพิจารณาจากเวอร์ชัน Android ที่เปิดตัวอุปกรณ์
ประเภทอุปกรณ์ | สร้างเป้าหมาย |
---|---|
อุปกรณ์ที่เปิดตัวด้วย Android 12 | gsi_$arch-user (ลงชื่อ) |
อุปกรณ์ที่เปิดตัวด้วย Android 11 | gsi_$arch-user (ลงชื่อ) |
อุปกรณ์ที่เปิดตัวด้วย Android 10 | gsi_$arch-user (ลงชื่อ) |
อุปกรณ์ที่เปิดตัวด้วย Android 9 | gsi_$arch-userdebug |
GSI ทั้งหมดสร้างขึ้นจากโค้ดเบสของ Android 12 และสถาปัตยกรรม CPU แต่ละตัวมีไบนารี GSI ที่สอดคล้องกัน (ดูรายการเป้าหมายของบิลด์ใน Building GSI)
การเปลี่ยนแปลง Android 12 GSI
อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 12 ต้องใช้ Android 12 GSI สำหรับการทดสอบความสอดคล้อง ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI รุ่นก่อนหน้า:
- ชื่อเป้าหมาย. ชื่อเป้าหมาย GSI สำหรับการทดสอบความสอดคล้องจะเปลี่ยนเป็น
gsi_$arch
GSI ที่มีชื่อเป้าหมายaosp_$arch
จะเก็บไว้สำหรับนักพัฒนาแอป Android แผนการทดสอบCTS-on-GSI
ยังลดลงสำหรับการทดสอบอินเทอร์เฟซของผู้ขายอีกด้วย - GSI เดิมจะเลิกใช้ GSI 12 ลบวิธีแก้ปัญหาที่รองรับอุปกรณ์ Android 8.0 หรือ 8.1 ที่ยังไม่ Treblized อย่างสมบูรณ์
- 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 สำหรับรายละเอียด
การเปลี่ยนแปลง Android 11 GSI
อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 11 ต้องใช้ Android 11 GSI สำหรับการทดสอบความสอดคล้อง ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI รุ่นก่อนหน้า:
- เนื้อหา system_ext Android 11 กำหนดพาร์ติชันใหม่
system_ext
GSI วางเนื้อหาส่วนขยายของระบบไว้ในโฟลเดอร์system/system_ext
- APEX GSI มีทั้ง APEX แบบแบนและแบบบีบอัด อันไหนที่จะใช้ถูกกำหนดโดยคุณสมบัติของระบบ
ro.apex.updatable
ในพาร์ติชันของผู้จำหน่าย ณ รันไทม์ อ้างอิงการ กำหนดค่าระบบเพื่อรองรับการอัพเดต APEX สำหรับรายละเอียด
การเปลี่ยนแปลง Android 10 GSI
อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 10 ต้องใช้ Android 10 GSI สำหรับการทดสอบความสอดคล้อง ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI รุ่นก่อนหน้า:
- สร้างผู้ใช้ GSI มีรุ่นผู้ใช้จาก Android 10 ใน Android 10 รุ่นผู้ใช้ GSI สามารถใช้ในการทดสอบการปฏิบัติตามข้อกำหนด CTS-on-GSI/VTS อ้างอิง การทดสอบ VTS ด้วย Debug Ramdisk สำหรับรายละเอียด
- รูปแบบที่ไม่กระจัดกระจาย GSI ที่มีเป้าหมาย
aosp_$arch
สร้างขึ้นด้วยรูปแบบที่ไม่กระจาย คุณสามารถใช้img2simg
เพื่อแปลง GSI ที่ไม่กระจายเป็นรูปแบบที่กระจายได้หากจำเป็น - ระบบเป็นราก เป้าหมายบิลด์ GSI เดิมชื่อ
aosp_$arch_a
ถูกเลิกใช้แล้ว สำหรับอุปกรณ์ที่อัปเกรดจาก Android 8 หรือ 8.1 เป็น Android 10 ที่มี ramdisk และไม่ใช่ระบบเป็นรูท ให้ใช้ GSI รุ่นเก่าaosp_$arch_ab
init
ที่อัปเกรดแล้วใน ramdisk รองรับ OEM system.img พร้อมโครงร่าง system-as-root - ตรวจสอบการบูต การใช้ GSI คุณจะต้องปลดล็อกอุปกรณ์เท่านั้น ไม่จำเป็นต้องปิดใช้งานการยืนยันการบู๊ต
การเปลี่ยนแปลง GSI ของ Android 9
อุปกรณ์ที่เปิดใช้งานหรืออัปเดตเป็น Android 9 ต้องใช้ Android 9 GSI สำหรับการทดสอบความสอดคล้อง ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI รุ่นก่อนหน้า:
- ผสาน GSI และโปรแกรมจำลอง GSI สร้างขึ้นจากอิมเมจระบบของผลิตภัณฑ์โปรแกรมจำลอง เช่น
aosp_arm64
และaosp_x86
- ระบบเป็นราก ใน Android รุ่นก่อนหน้า อุปกรณ์ที่ไม่รองรับการอัปเดต A/B สามารถเมานต์อิมเมจระบบภายใต้ไดเร็กทอรี
/system
ใน Android 9 รูทของอิมเมจระบบจะเมาต์เป็นรูทของอุปกรณ์ - อินเตอร์เฟสตัวประสาน 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
ใน Android เวอร์ชันก่อนหน้า อุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่าจำเป็นต้องตรวจสอบว่าข้อมูลเวอร์ชัน ( ro.build.version.release
และ ro.build.version.security_patch
) ที่รายงานโดยระบบที่กำลังทำงานอยู่ตรงกับข้อมูลเวอร์ชันที่รายงานโดย bootloader โดยทั่วไปข้อมูลดังกล่าวได้รับจากส่วนหัวของอิมเมจสำหรับบูต
ใน Android 9 ขึ้นไป ข้อกำหนดนี้มีการเปลี่ยนแปลงเพื่อให้ผู้ขายสามารถบูต GSI ได้ โดยเฉพาะอย่างยิ่ง Keymaster ไม่ควรทำการตรวจสอบเนื่องจากข้อมูลเวอร์ชันที่รายงานโดย GSI อาจไม่ตรงกับข้อมูลเวอร์ชันที่รายงานโดย bootloader ของผู้จำหน่าย สำหรับอุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่า ผู้จำหน่ายต้องแก้ไขการใช้งาน Keymaster เพื่อข้ามการตรวจสอบ (หรืออัปเกรดเป็น Keymaster 4) สำหรับรายละเอียดเกี่ยวกับ Keymaster โปรดดูที่ Keystore ที่ สนับสนุนโดยฮาร์ดแวร์
กำลังดาวน์โหลด 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 build เป้าหมาย 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
เป้าหมายการสร้าง Android GSI
เป้าหมายบิลด์ GSI ต่อไปนี้มีไว้สำหรับอุปกรณ์ที่เปิดตัวบน Android 9 หรือสูงกว่า
ชื่อ GSI | ซุ้มซีพียู | บิตของส่วนต่อประสาน Binder | ระบบเป็นราก | สร้างเป้าหมาย |
---|---|---|---|---|
gsi_arm | แขน | 64 | วาย | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 | ARM64 | 64 | วาย | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 | x86 | 64 | วาย | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 | x86-64 | 64 | วาย | gsi_x86_64-user gsi_x86_64-userdebug |
ข้อกำหนดสำหรับการแฟลช GSI
อุปกรณ์ Android สามารถมีการออกแบบที่แตกต่างกันได้ ดังนั้นจึงไม่มีคำสั่งทั่วไปหรือชุดคำสั่งสำหรับการแฟลช GSI เพื่อใช้กับอุปกรณ์ทั้งหมด ตรวจสอบกับผู้ผลิตอุปกรณ์ Android สำหรับคำแนะนำในการแฟลชที่ชัดเจน ใช้ขั้นตอนต่อไปนี้เป็นแนวทางทั่วไป:
- ตรวจสอบให้แน่ใจว่าอุปกรณ์มีสิ่งต่อไปนี้:
- สั่นสะท้าน
- วิธีการปลดล็อคอุปกรณ์ (เพื่อให้สามารถแฟลชได้โดยใช้
fastboot
) - สถานะปลดล็อคเพื่อให้แฟลชได้ผ่าน
fastboot
(เพื่อให้แน่ใจว่าคุณมีfastboot
เวอร์ชันล่าสุด ให้สร้างจากแผนผังต้นทางของ Android)
- ลบพาร์ติชันระบบปัจจุบัน จากนั้นแฟลช GSI ไปยังพาร์ติชันระบบ
- ล้างข้อมูลผู้ใช้และล้างข้อมูลออกจากพาร์ติชันที่จำเป็นอื่นๆ (เช่น ข้อมูลผู้ใช้และพาร์ติชันระบบ)
- รีบูทอุปกรณ์
ตัวอย่างเช่น หากต้องการแฟลช GSI ไปยังอุปกรณ์ Pixel ให้ทำดังนี้
- บูตเข้าสู่โหมด
fastboot
และ ปลดล็อค bootloader - อุปกรณ์ที่รองรับ
fastbootd
จำเป็นต้องบูตเป็นfastbootd
โดย:$ fastboot reboot fastboot
- ลบและแฟลช GSI ไปยังพาร์ติชันระบบ:
$ fastboot erase system $ fastboot flash system system.img
- ล้างข้อมูลผู้ใช้และล้างข้อมูลออกจากพาร์ติชันที่จำเป็นอื่นๆ (เช่น ข้อมูลผู้ใช้และพาร์ติชันระบบ):
$ fastboot -w
- รีบูต:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedใช้คำสั่งต่อไปนี้เพื่อลบพาร์ติชันผลิตภัณฑ์และเพิ่มพื้นที่ว่างสำหรับพาร์ติชันระบบ ซึ่งให้พื้นที่พิเศษในการแฟลช GSI:
$ fastboot delete-logical-partition product_apostfix
_a
ควรตรงกับ slot id ของพาร์ติชันระบบ เช่น system_a
ในตัวอย่างนี้มีส่วนร่วมใน GSIs
Android ยินดีที่คุณมีส่วนสนับสนุนในการพัฒนา GSI คุณสามารถมีส่วนร่วมและช่วยปรับปรุง GSI ได้โดย:
- การสร้างแพตช์ GSI
DESSERT -gsi
ไม่ใช่ สาขาการพัฒนาและยอมรับเฉพาะ cherrypicks จากสาขาหลัก AOSP ดังนั้นในการส่งแพตช์ GSI คุณต้อง:- ส่งแพตช์ไปยังสาขา
master
AOSP - Cherrypick แพทช์เพื่อ
DESSERT -gsi
- แจ้งจุดบกพร่องเพื่อรับการตรวจสอบ cherrypick
- ส่งแพตช์ไปยังสาขา
- รายงานจุดบกพร่องของ GSI หรือให้คำแนะนำอื่นๆ ตรวจสอบคำแนะนำในการ รายงานจุดบกพร่อง จากนั้นเรียกดูหรือส่งไฟล์จุด บกพร่อง GSI
เคล็ดลับ
การเปลี่ยนโหมดแถบการนำทางโดยใช้ adb
เมื่อบูตด้วย GSI โหมดแถบการนำทางจะได้รับการกำหนดค่าโดยผู้ขายที่มีอำนาจเหนือกว่า คุณสามารถเปลี่ยนโหมดแถบการนำทางได้โดยการรันคำสั่ง adb ต่อไปนี้ในรันไทม์
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
โดยที่ mode สามารถเป็น threebutton
twobutton
gestural
และอื่นๆ