อิมเมจระบบทั่วไป (GSI) คืออิมเมจระบบที่มีการกำหนดค่าที่ปรับแล้วสำหรับอุปกรณ์ Android ถือเป็นการใช้งาน Android ล้วนๆ โดยมีโค้ด Android Open Source Project (AOSP) ที่ไม่ได้แก้ไขซึ่งอุปกรณ์ Android ใดๆ ที่ใช้ Android 9 ขึ้นไปสามารถทำงานได้สำเร็จ
GSI ใช้สำหรับเรียกใช้การทดสอบ VTS และ CTS-on-GSI อิมเมจระบบของอุปกรณ์ Android จะถูกแทนที่ด้วย GSI จากนั้นจึงทดสอบด้วย Vendor Test Suite (VTS) และ ชุดทดสอบความเข้ากันได้ (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 bitness (32 บิตหรือ 64 บิต)
เป้าหมาย GSI สำหรับการทดสอบการปฏิบัติตามข้อกำหนดของเสียงแหลม
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 ไม่สมบูรณ์
- ผู้ใช้ดีบัก SEPolicy GSI
gsi_$arch
มีuserdebug_plat_sepolicy.cil
เมื่อทำการแฟลชvendor_boot-debug.img
เฉพาะ OEM หรือboot-debug.img
/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 และไม่ใช่ระบบในฐานะรูท ให้ใช้ GSIaosp_$arch_ab
เก่าinit
ที่อัปเกรดแล้วใน ramdisk รองรับ OEM system.img พร้อมเลย์เอาต์ system-as-root - ตรวจสอบการบูต การใช้ GSI คุณจะต้องปลดล็อกอุปกรณ์เท่านั้น ไม่จำเป็นต้องปิดการใช้งานการตรวจสอบการบูต
การเปลี่ยนแปลงของ Android 9 GSI
อุปกรณ์ที่เปิดตัวหรืออัปเดตเป็น Android 9 ต้องใช้ Android 9 GSI สำหรับการทดสอบการปฏิบัติตามข้อกำหนด ซึ่งรวมถึงการเปลี่ยนแปลงที่สำคัญต่อไปนี้จาก GSI ก่อนหน้า:
- ผสาน GSI และโปรแกรมจำลอง GSI สร้างขึ้นจากอิมเมจระบบของผลิตภัณฑ์อีมูเลเตอร์ เช่น
aosp_arm64
และaosp_x86
- ระบบในฐานะที่เป็นรูท ใน Android เวอร์ชันก่อนหน้า อุปกรณ์ที่ไม่รองรับการอัปเดต A/B สามารถต่อเชื่อมอิมเมจระบบภายใต้ไดเร็กทอรี
/system
ใน Android 9 รูทของอิมเมจระบบจะถูกเมาต์เป็นรูทของอุปกรณ์ - อินเทอร์เฟซตัวประสาน 64 บิต ใน Android 8.x GSI แบบ 32 บิตใช้อินเทอร์เฟซตัวประสานแบบ 32 บิต Android 9 ไม่รองรับอินเทอร์เฟซตัวผูก 32 บิต ดังนั้นทั้ง GSI แบบ 32 บิตและ 64 บิตจึงใช้อินเทอร์เฟซตัวประสาน 64 บิต
- การบังคับใช้ VNDK ใน Android 8.1 VNDK เป็นทางเลือก ตั้งแต่ Android 9 เป็นต้นไป จำเป็นต้องมี
BOARD_VNDK_VERSION
ดังนั้นจึง ต้อง ตั้งค่า 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 โปรดดูที่ Hardware-backed Keystore
กำลังดาวน์โหลด GSI
คุณสามารถดาวน์โหลด GSI ที่สร้างไว้ล่วงหน้าได้จากเว็บไซต์ AOSP การรวมอย่างต่อเนื่อง (CI) ที่ ci.android.com หากไม่สามารถดาวน์โหลดประเภท GSI สำหรับแพลตฟอร์มฮาร์ดแวร์ของคุณได้ โปรดดูส่วนต่อไปนี้สำหรับรายละเอียดเกี่ยวกับการสร้าง GSI สำหรับเป้าหมายเฉพาะ
อาคาร GSIs
เริ่มต้นด้วย 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
Android GSI สร้างเป้าหมาย
เป้าหมายการสร้าง GSI ต่อไปนี้มีไว้สำหรับอุปกรณ์ที่เปิดตัวใน Android 9 หรือสูงกว่า
ชื่อ GSI | ซีพียูอาร์ค | Binder อินเทอร์เฟซ bitness | ระบบในฐานะราก | สร้างเป้าหมาย |
---|---|---|---|---|
gsi_arm | แขน | 64 | Y | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 | ARM64 | 64 | Y | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 | x86 | 64 | Y | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 | x86-64 | 64 | Y | gsi_x86_64-user gsi_x86_64-userdebug |
ข้อกำหนดสำหรับการกะพริบ GSIs
อุปกรณ์ Android สามารถมีการออกแบบที่แตกต่างกัน ดังนั้นจึงไม่มีคำสั่งทั่วไปหรือชุดคำสั่งสำหรับการแฟลช GSI เพื่อนำไปใช้กับอุปกรณ์ทั้งหมด ตรวจสอบกับผู้ผลิตอุปกรณ์ Android สำหรับคำแนะนำการกะพริบอย่างชัดเจน ใช้ขั้นตอนต่อไปนี้เป็นแนวทางทั่วไป:
- ตรวจสอบให้แน่ใจว่าอุปกรณ์มีสิ่งต่อไปนี้:
- Treblized
- วิธีการปลดล็อกอุปกรณ์ (เพื่อให้สามารถแฟลชได้โดยใช้
fastboot
) - สถานะปลดล็อคเพื่อให้แฟลชได้ผ่าน
fastboot
(เพื่อให้แน่ใจว่าคุณมีเวอร์ชันล่าสุดของfastboot
ให้สร้างจากแผนผังแหล่งที่มาของ Android)
- ลบพาร์ติชั่นระบบปัจจุบัน จากนั้นแฟลช GSI ไปยังพาร์ติชั่นระบบ
- ล้างข้อมูลผู้ใช้และล้างข้อมูลจากพาร์ติชั่นที่จำเป็นอื่นๆ (เช่น ข้อมูลผู้ใช้และพาร์ติชั่นระบบ)
- รีบูตอุปกรณ์
ตัวอย่างเช่น หากต้องการแฟลช GSI ไปยังอุปกรณ์ Pixel ใดๆ ให้ทำดังนี้
- บูตเข้าสู่โหมด
fastboot
และ ปลดล็อกโปรแกรมโหลดบูต - อุปกรณ์ที่รองรับ
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
- แจ้งข้อบกพร่องเพื่อให้ได้รับการตรวจสอบ
- ส่งโปรแกรมแก้ไขไปยังสาขา
- การ รายงานจุดบกพร่องของ GSI หรือเสนอแนะอื่นๆ ตรวจสอบคำแนะนำในการ รายงานจุดบกพร่อง จากนั้นเรียกดูหรือยื่น ข้อบกพร่องของ GSI
เคล็ดลับ
การเปลี่ยนโหมดแถบนำทางโดยใช้adb
เมื่อทำการบูทด้วย GSI โหมดแถบนำทางจะถูกกำหนดค่าโดยการแทนที่ผู้ขาย คุณสามารถเปลี่ยนโหมดแถบนำทางได้โดยการรันคำสั่ง adb ต่อไปนี้ในรันไทม์
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
โดยที่ mode สามารถเป็น threebutton
, twobutton
, gestural
และอื่น ๆ