Hình ảnh hệ thống chung (GSI) là hình ảnh hệ thống có cấu hình được điều chỉnh cho các thiết bị Android. Đây được coi là hoạt động triển khai Android thuần tuý với mã Dự án nguồn mở Android (AOSP) chưa sửa đổi mà mọi thiết bị Android chạy Android 9 trở lên đều có thể chạy thành công.
GSI được dùng để chạy các bài kiểm thử VTS và CTS-on-GSI. Hình ảnh hệ thống của thiết bị Android được thay thế bằng GSI, sau đó được kiểm thử bằng Bộ kiểm tra nhà cung cấp (VTS) và Bộ kiểm tra tính tương thích (CTS) để đảm bảo rằng thiết bị triển khai chính xác các giao diện nhà cung cấp bằng phiên bản Android mới nhất.
Để bắt đầu sử dụng GSI, hãy xem các phần sau để biết thông tin chi tiết về cấu hình GSI (và các phương sai được phép ) cũng như các loại. Khi bạn đã sẵn sàng sử dụng GSI, tải và tạo GSI cho mục tiêu thiết bị của bạn, sau đó cài đặt ROM GSI vào thiết bị Android.
Cấu hình và phương sai GSI
GSI Android hiện tại có cấu hình sau:
- Treble. GSI hỗ trợ đầy đủ các thay đổi về kiến trúc dựa trên AIDL/HIDL (còn gọi là Treble), bao gồm cả hỗ trợ cho giao diện AIDL và giao diện HIDL. Bạn có thể sử dụng GSI trên mọi thiết bị Android dùng giao diện nhà cung cấp AIDL/HIDL. (Để biết thêm thông tin chi tiết, hãy xem Tài nguyên về kiến trúc.)
- Hệ thống tệp. GSI sử dụng hệ thống tệp ext4.
GSI Android hiện tại bao gồm các phương sai chính sau:
- Kiến trúc CPU. Hỗ trợ các lệnh CPU khác nhau (ARM, x86, v.v.) và độ bit của CPU (32 bit hoặc 64 bit).
Mục tiêu GSI cho các bài kiểm thử tuân thủ Treble
GSI dùng để kiểm thử mức độ tuân thủ được xác định theo phiên bản Android mà thiết bị khởi chạy.
| Loại thiết bị | Mục tiêu bản dựng |
|---|---|
| Thiết bị khởi chạy bằng Android 15 | gsi_$arch-user (Đã ký) |
| Thiết bị khởi chạy bằng Android 14 | gsi_$arch-user (Đã ký) |
| Thiết bị khởi chạy bằng Android 13 | gsi_$arch-user (Đã ký) |
| Thiết bị khởi chạy bằng Android 12L | gsi_$arch-user (Đã ký) |
| Thiết bị khởi chạy bằng Android 12 | gsi_$arch-user (Đã ký) |
| Thiết bị khởi chạy bằng Android 11 | gsi_$arch-user (Đã ký) |
Tất cả GSI đều được tạo từ toàn bộ mã nguồn Android 12 và mỗi kiến trúc CPU có một tệp nhị phân GSI tương ứng (xem danh sách mục tiêu bản dựng trong phần Tạo GSI).
Các thay đổi về GSI Android 12
Các thiết bị khởi chạy bằng hoặc được cập nhật lên Android 12 phải sử dụng GSI Android 12 để kiểm thử mức độ tuân thủ. Điều này bao gồm các thay đổi chính sau đây so với các GSI trước đó:
- Tên mục tiêu. Tên mục tiêu GSI cho các bài kiểm thử mức độ tuân thủ được đổi thành
gsi_$arch. GSI có tên mục tiêuaosp_$archđược giữ lại cho nhà phát triển ứng dụng Android. Kế hoạch kiểm thửCTS-on-GSIcũng được giảm bớt để kiểm thử giao diện nhà cung cấp. - GSI cũ sẽ bị loại bỏ. GSI 12 loại bỏ các giải pháp thay thế phù hợp với các thiết bị Android 8.0 hoặc 8.1 chưa được Treblized hoàn toàn.
- SEPolicy Userdebug. GSI
gsi_$archchứauserdebug_plat_sepolicy.cil. Khi cài đặt ROM dành riêng cho OEMvendor_boot-debug.imghoặcboot-debug.img,/system/bin/initsẽ tảiuserdebug_plat_sepolicy.ciltừ GSIsystem.img. Hãy tham khảo phần Kiểm thử VTS bằng Ramdisk gỡ lỗi để biết thông tin chi tiết.
Các thay đổi về GSI Android 11
Các thiết bị khởi chạy bằng hoặc được cập nhật lên Android 11 phải sử dụng GSI Android 11 để kiểm thử mức độ tuân thủ. Điều này bao gồm các thay đổi chính sau đây so với các GSI trước đó:
- Nội dung system_ext. Android
11 xác định một phân vùng mới
system_ext. GSI đặt nội dung của tiện ích hệ thống vào thư mụcsystem/system_ext. - APEX. GSI chứa cả APEX được làm phẳng và nén.
Việc sử dụng APEX nào được xác định bởi thuộc tính hệ thống
ro.apex.updatabletrong phân vùng nhà cung cấp trong thời gian chạy. Hãy tham khảo phần Định cấu hình hệ thống để hỗ trợ các bản cập nhật APEX để biết thông tin chi tiết.
Các thay đổi về GSI Android 10
Các thiết bị khởi chạy bằng hoặc được cập nhật lên Android 10 phải sử dụng GSI Android 10 để kiểm thử mức độ tuân thủ. Điều này bao gồm các thay đổi chính sau đây so với các GSI trước đó:
- Bản dựng người dùng. GSI có bản dựng người dùng từ Android 10. Trong Android 10, GSI bản dựng người dùng có thể được dùng trong quá trình kiểm thử mức độ tuân thủ CTS-on-GSI/VTS. Hãy tham khảo Kiểm thử VTS bằng Ramdisk gỡ lỗi để biết thông tin chi tiết.
- Định dạng không phân tán. GSI có mục tiêu
aosp_$archđược tạo bằng định dạng không phân tán. Bạn có thể dùngimg2simgđể chuyển đổi GSI không phân tán sang định dạng phân tán nếu cần. - Hệ thống dưới dạng gốc. Mục tiêu bản dựng GSI cũ có tên
aosp_$arch_ađã bị loại bỏ. Đối với các thiết bị được nâng cấp từ Android 8 hoặc 8.1 lên Android 10 bằng ramdisk và không phải hệ thống dưới dạng gốc, hãy sử dụng GSI cũaosp_$arch_ab.initđược nâng cấp trong ramdisk hỗ trợ system.img OEM với bố cục hệ thống dưới dạng gốc. - Xác minh quy trình khởi động. Khi sử dụng GSI, bạn chỉ cần mở khoá thiết bị. Bạn không cần phải tắt tính năng xác minh quy trình khởi động.
Các thay đổi về GSI Android 9
Các thiết bị khởi chạy bằng hoặc được cập nhật lên Android 9 phải sử dụng GSI Android 9 để kiểm thử mức độ tuân thủ. Điều này bao gồm các thay đổi chính sau đây so với các GSI trước đó:
- Hợp nhất GSI và trình mô phỏng. GSI được tạo từ hình ảnh hệ thống của các sản phẩm trình mô phỏng, ví dụ:
aosp_arm64vàaosp_x86. - Hệ thống dưới dạng gốc. Trong các phiên bản Android trước, các thiết bị
không hỗ trợ bản cập nhật A/B có thể gắn hình ảnh hệ thống trong thư mục
/system. Trong Android 9, gốc của hình ảnh hệ thống được gắn dưới dạng gốc của thiết bị. - Giao diện binder 64 bit. Trong Android 8.x, GSI 32 bit sử dụng giao diện binder 32 bit. Android 9 không hỗ trợ giao diện binder 32 bit, vì vậy cả GSI 32 bit và GSI 64 bit đều sử dụng giao diện binder 64 bit.
- Thực thi VNDK. Trong Android 8.1, VNDK là không bắt buộc.
Bắt đầu từ Android 9, VNDK là bắt buộc, vì vậy
BOARD_VNDK_VERSIONphải đặt. - Thuộc tính hệ thống tương thích. Android
9 cho phép kiểm tra quyền truy cập đối với thuộc tính hệ thống tương thích (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true).
Các thay đổi về Keymaster Android 9
Trong các phiên bản Android trước, các thiết bị triển khai Keymaster 3 trở xuống
phải xác minh rằng thông tin phiên bản
(ro.build.version.release và
ro.build.version.security_patch) do hệ thống đang chạy báo cáo
khớp với thông tin phiên bản do trình tải khởi động báo cáo. Thông tin như vậy thường được lấy từ tiêu đề hình ảnh khởi động.
Trong Android 9 trở lên, yêu cầu này đã thay đổi để cho phép nhà cung cấp khởi động GSI. Cụ thể, Keymaster không được thực hiện quy trình xác minh vì thông tin phiên bản do GSI báo cáo có thể không khớp với thông tin phiên bản do trình tải khởi động của nhà cung cấp báo cáo. Đối với các thiết bị triển khai Keymaster 3 trở xuống, nhà cung cấp phải sửa đổi việc triển khai Keymaster để bỏ qua quy trình xác minh (hoặc nâng cấp lên Keymaster 4). Để biết thông tin chi tiết về Keymaster, hãy tham khảo Kho lưu trữ khoá dựa trên phần cứng.
Tải GSI xuống
Bạn có thể tải GSI dựng sẵn xuống từ trang web tích hợp liên tục (CI) AOSP tại ci.android.com. Nếu không tải được loại GSI cho nền tảng phần cứng của bạn xuống, hãy tham khảo phần sau để biết thông tin chi tiết về cách tạo GSI cho các mục tiêu cụ thể.
Tạo GSI
Bắt đầu từ Android 9, mỗi phiên bản Android có một
nhánh GSI tên là DESSERT-gsi trên AOSP (ví dụ:
android12-gsi là nhánh GSI trên Android
12). Các nhánh GSI bao gồm nội dung của Android với
tất cả các bản vá bảo mật và
các bản vá GSI được áp dụng.
Để tạo GSI, hãy thiết lập cây nguồn Android bằng cách
tải xuống từ một nhánh GSI và
chọn mục tiêu bản dựng GSI. Sử dụng các bảng mục tiêu bản dựng bên dưới để xác định phiên bản GSI
phù hợp cho thiết bị của bạn. Sau khi quá trình tạo hoàn tất, GSI sẽ là hình ảnh hệ thống (tức là system.img) và xuất hiện trong thư mục đầu ra
out/target/product/generic_arm64.
Ví dụ: để tạo mục tiêu bản dựng GSI
gsi_arm64-userdebug trên nhánh GSI android12-gsi,
hãy chạy các lệnh sau.
$ 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
Mục tiêu bản dựng GSI Android
Các mục tiêu bản dựng GSI sau đây dành cho các thiết bị khởi chạy trên Android 9 trở lên.
| Tên GSI | Kiến trúc CPU | Độ bit của giao diện binder | Hệ thống dưới dạng gốc | Mục tiêu bản dựng |
|---|---|---|---|---|
gsi_arm |
ARM | 32 | Y | gsi_arm-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | Y | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | Y | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | Y | gsi_x86_64-usergsi_x86_64-userdebug |
Yêu cầu để cài đặt ROM GSI
Các thiết bị Android có thể có nhiều thiết kế, vì vậy không có lệnh chung hoặc bộ hướng dẫn để cài đặt ROM GSI áp dụng cho tất cả thiết bị. Hãy liên hệ với nhà sản xuất thiết bị Android để biết hướng dẫn cụ thể về cách cài đặt ROM. Hãy làm theo các bước sau đây theo hướng dẫn chung:
- Đảm bảo thiết bị có những điều sau:
- Treblized
- Một phương thức mở khoá thiết bị (để có thể cài đặt ROM bằng
fastboot) - Trạng thái đã mở khoá để có thể cài đặt ROM qua
fastboot(Để đảm bảo bạn có phiên bảnfastbootmới nhất, hãy tạo phiên bản đó từ cây nguồn Android.)
- Xoá phân vùng hệ thống hiện tại, sau đó cài đặt ROM GSI vào phân vùng hệ thống.
- Xoá dữ liệu người dùng và xoá dữ liệu khỏi các phân vùng cần thiết khác (ví dụ: dữ liệu người dùng và phân vùng hệ thống).
- Khởi động lại thiết bị.
Ví dụ: cách cài đặt ROM GSI vào mọi thiết bị Pixel:
- Khởi động vào
fastbootchế độ và mở khoá trình tải khởi động. - Các thiết bị hỗ trợ
fastbootdcũng cần khởi động vàofastbootdbằng cách:$ fastboot reboot fastboot
- Xoá và cài đặt ROM GSI vào phân vùng hệ thống:
$ fastboot erase system $ fastboot flash system system.img
- Nếu thiết bị của bạn hỗ trợ Khung ảo Android, hãy cài đặt ROM Phần sụn máy ảo được bảo vệ:
$ fastboot flash pvmfw pvmfw.img
- Xoá dữ liệu người dùng và xoá dữ liệu khỏi các phân vùng cần thiết khác (ví dụ:
dữ liệu người dùng và phân vùng hệ thống):
$ fastboot -w
- Khởi động lại vào trình tải khởi động:
$ fastboot reboot-bootloader
- Tắt tính năng xác minh quy trình khởi động được xác minh trong khi cài đặt ROM vbmeta được cung cấp:
$ 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 phải khớp với mã khe của phân vùng hệ thống,
chẳng hạn như system_a trong ví dụ này.
Đóng góp cho GSI
Android hoan nghênh bạn đóng góp cho quá trình phát triển GSI. Bạn có thể tham gia và giúp cải thiện GSI bằng cách:
- Tạo bản vá GSI.
DESSERT-gsilà không phải là nhánh phát triển và chỉ chấp nhận cherrypick từ nhánh phát hành mới nhất của AOSP (android17-release), vì vậy để gửi bản vá GSI, bạn phải:- Gửi bản vá đến nhánh
AOSP
android17-release. - Cherrypick bản vá đến
DESSERT-gsi. - Gửi lỗi để được xem xét cherrypick.
- Gửi bản vá đến nhánh
AOSP
- Báo cáo lỗi GSI hoặc đưa ra các đề xuất khác. Xem hướng dẫn trong Báo cáo lỗi, sau đó duyệt hoặc gửi lỗi GSI.
Mẹo
Thay đổi chế độ thanh điều hướng bằng adb
Khi khởi động bằng GSI, chế độ thanh điều hướng được định cấu hình bằng cách ghi đè của nhà cung cấp. Bạn có thể thay đổi chế độ thanh điều hướng bằng cách chạy lệnh adb sau trong thời gian chạy.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Trong đó, mode có thể là threebutton, twobutton,
gestural, v.v.