อิมเมจระบบทั่วไป (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 (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 ที่สอดคล้องกัน (ดูรายการเป้าหมายบิวด์ใน การสร้าง GSI )
การเปลี่ยนแปลง GSI ของ Android 12
อุปกรณ์ที่เปิดตัวด้วยหรืออัปเดตเป็น 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
เฉพาะ OEM หรือboot-debug.img
/system/bin/init
จะโหลดuserdebug_plat_sepolicy.cil
จาก GSIsystem.img
อ้างอิง การทดสอบ VTS ด้วย Debug Ramdisk เพื่อดูรายละเอียด
การเปลี่ยนแปลง GSI ของ Android 11
อุปกรณ์ที่เปิดตัวด้วยหรืออัปเดตเป็น 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 และไม่ใช่ system-as-root ให้ใช้ GSIaosp_$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 อาจไม่ตรงกับข้อมูลเวอร์ชันที่รายงานโดยโปรแกรมโหลดบูตของผู้จำหน่าย สำหรับอุปกรณ์ที่ใช้ Keymaster 3 หรือต่ำกว่า ผู้จำหน่ายจะต้องแก้ไขการใช้งาน Keymaster เพื่อข้ามการตรวจสอบ (หรืออัปเกรดเป็น Keymaster 4) สำหรับรายละเอียดเกี่ยวกับ Keymaster โปรดดูที่ Hardware-backed Keystore
ดาวน์โหลด GSI
คุณสามารถดาวน์โหลด GSI ที่สร้างไว้ล่วงหน้าได้จากเว็บไซต์ AOSP Continuous Integration (CI) ที่ 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
เป้าหมายการสร้าง Android GSI
เป้าหมายบิวด์ GSI ต่อไปนี้มีไว้สำหรับอุปกรณ์ที่เปิดตัวบน Android 9 ขึ้นไป
ชื่อจีเอสไอ | ส่วนโค้งของซีพียู | ความบิตของอินเทอร์เฟซ 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
ในตัวอย่างนี้มีส่วนร่วมกับ GSI
Android ยินดีที่คุณมีส่วนร่วมในการพัฒนา GSI คุณสามารถมีส่วนร่วมและช่วยปรับปรุง GSI ได้โดย:
- การสร้างแพตช์ GSI
DESSERT -gsi
ไม่ใช่ สาขาการพัฒนาและยอมรับเฉพาะ cherrypicks จากสาขาหลัก AOSP ดังนั้นในการส่งแพตช์ GSI คุณต้อง:- ส่งแพตช์ไปที่สาขา
main
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
และอื่นๆ