Hình ảnh hệ thống chung (GSI) là một 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à một 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 kiểm thử VTS và CTS trên GSI. Hình ảnh hệ thống của một thiết bị Android được thay thế bằng GSI, sau đó được kiểm thử bằng Bộ kiểm thử của 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 đúng các giao diện của nhà cung cấp bằng phiên bản Android mới nhất.
Để bắt đầu với 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 biến thể được phép) và các loại. Khi bạn đã sẵn sàng sử dụng GSI, hãy tải xuống và tạo GSI cho mục tiêu thiết bị của bạn, sau đó cài đặt ROM GSI vào một thiết bị Android.
Cấu hình và các biến thể của GSI
GSI Android hiện tại có cấu hình như sau:
- Âm bổng. GSI hỗ trợ đầy đủ các thay đổi về cấu trúc dựa trên AIDL/HIDL (còn gọi là Treble), bao gồm cả việc hỗ trợ các giao diện AIDL và các 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 có những điểm khác biệt chính sau đây:
- Cấu trúc CPU. Hỗ trợ nhiều chỉ dẫn CPU (ARM, x86, v.v.) và độ dài bit CPU (32 bit hoặc 64 bit).
Các mục tiêu GSI cho các bài kiểm thử tuân thủ chuẩn Treble
GSI dùng để kiểm thử việ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 xây dựng |
---|---|
Thiết bị ra mắt cùng với Android 15 | gsi_$arch-user (Đã ký) |
Các thiết bị ra mắt cùng với Android 14 | gsi_$arch-user (Đã ký) |
Thiết bị ra mắt cùng với Android 13 | gsi_$arch-user (Đã ký) |
Thiết bị ra mắt cùng với Android 12L | gsi_$arch-user (Đã ký) |
Thiết bị ra mắt cùng với Android 12 | gsi_$arch-user (Đã ký) |
Thiết bị ra mắt cùng với Android 11 | gsi_$arch-user (Đã ký) |
Tất cả GSI đều được tạo từ cơ sở mã Android 12 và mỗi cấu trúc CPU đều có một tệp nhị phân GSI tương ứng (xem danh sách các 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ập nhật lên Android 12 phải sử dụng GSI Android 12 để kiểm thử việc tuân thủ. Trong đó có những thay đổi lớn 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 kiểm thử 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-GSI
cũng được giảm bớt để kiểm thử giao diện của nhà cung cấp. - GSI cũ đã ngừng hoạt động. GSI 12 sẽ xoá các giải pháp thay thế phù hợp với những thiết bị Android 8.0 hoặc 8.1 chưa được Treblized hoàn toàn.
- SEPolicy gỡ lỗi người dùng. GSI
gsi_$arch
chứauserdebug_plat_sepolicy.cil
. Khi nhấp nháyvendor_boot-debug.img
hoặcboot-debug.img
dành riêng cho OEM,/system/bin/init
sẽ tảiuserdebug_plat_sepolicy.cil
từsystem.img
GSI. Tài liệu tham khảo Thử nghiệm 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ử việc tuân thủ. Trong đó có những thay đổi lớn 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 trong thư mụcsystem/system_ext
. - APEX. GSI chứa cả APEX được rút gọn và nén.
Bạn nên dùng thuộc tính hệ thống
ro.apex.updatable
nào trong phân vùng nhà cung cấp tại thời gian chạy. Tài liệu tham khảo Đị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ập nhật lên Android 10 phải sử dụng GSI Android 10 để kiểm thử việc tuân thủ. Trong đó có những thay đổi lớn 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, bạn có thể dùng GSI bản dựng người dùng trong quá trình kiểm thử tuân thủ CTS-on-GSI/VTS. 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 thưa. GSI có các mục tiêu
aosp_$arch
được tạo bằng định dạng không thưa thớt. Bạn có thể dùngimg2simg
để chuyển đổi một GSI không thưa sang định dạng thưa 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
đã ngừng hoạt động. Đố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 của OEM với bố cục system-as-root. - 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ử việc tuân thủ. Trong đó có những thay đổi lớn 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, chẳng hạn như
aosp_arm64
vàaosp_x86
. - Hệ thống dưới dạng gốc. Trong các phiên bản Android trước, những 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 liên kết 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 liên kết 32 bit, vì vậy cả GSI 32 bit và GSI 64 bit đều sử dụng giao diện liên kết 64 bit.
- Thực thi VNDK. Trong Android 8.1, VNDK là không bắt buộc.
Kể từ Android 9, VNDK là bắt buộc, vì vậy bạn
BOARD_VNDK_VERSION
phả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 một thuộc tính hệ thống tương thích (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
Các thay đổi về Keymaster trên Android 9
Trong các phiên bản Android trước đây, những 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 các 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, các 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 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) của 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
Kể từ Android 9, mỗi phiên bản Android đều có một nhánh GSI có 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 một 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 đích tạo 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
Các mục tiêu bản dựng GSI của Android
Các mục tiêu bản dựng GSI sau đây dành cho những thiết bị khởi chạy trên Android 9 trở lên.
Tên GSI | Cấu trúc CPU | Độ bit của giao diện liên kết | Hệ thống dưới dạng gốc | Mục tiêu xây dựng |
---|---|---|---|---|
gsi_arm |
ARM | 32 | Có | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | Có | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | Có | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | Có | gsi_x86_64-user gsi_x86_64-userdebug |
Yêu cầu đối với việc cài đặt ROM GSI
Các thiết bị Android có thể có nhiều kiểu thiết kế, vì vậy, không có lệnh chung hoặc bộ hướng dẫn chung nào để flash GSI áp dụng cho tất cả cá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 chạy flash. Hãy làm theo các bước sau đây như một hướng dẫn chung:
- Đảm bảo thiết bị có những đặc điểm sau:
- Treblized
- Một phương thức để mở khoá thiết bị (nhờ đó, thiết bị có thể được flash bằng
fastboot
) - Trạng thái đã mở khoá để có thể nhấp nháy qua
fastboot
(Để đảm bảo bạn có phiên bản mới nhất củafastboot
, hãy tạo phiên bản này từ cây nguồn Android.)
- Xoá phân vùng hệ thống hiện tại, sau đó chuyển 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ụ: phân vùng 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ài đặt ROM GSI cho mọi thiết bị Pixel:
- Khởi động ở chế độ
fastboot
và mở khoá trình tải khởi động. - Các thiết bị hỗ trợ
fastbootd
cũng cần khởi động vàofastbootd
bằ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ợ Android Virtual Framework, hãy flash Protected Virtual Machine Firmware:
$ 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ụ: phân vùng dữ liệu người dùng và phân vùng hệ thống):
$ fastboot -w
- Khởi động lại về trình tải khởi động:
$ fastboot reboot-bootloader
- Tắt quy trình xác minh Xác minh quy trình khởi động trong khi nhấp nháy vbmeta đã 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ã nhận dạng khe cắm 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 những đóng góp của bạn 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-gsi
không phải là một nhánh phát triển và chỉ chấp nhận các cherrypick từ nhánh phát hành mới nhất của AOSP (android16-release
). Vì vậy, để gửi bản vá GSI, bạn phải:- Gửi bản vá cho nhánh AOSP
android16-release
. - Chọn lọc bản vá cho
DESSERT-gsi
. - Báo cáo lỗi để yêu cầu xem xét cherrypick.
- Gửi bản vá cho 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 phần Báo cáo lỗi, sau đó duyệt qua hoặc báo cáo lỗi GSI.
Lưu ý
Thay đổi chế độ thanh điều hướng bằng adb
Khi khởi động bằng GSI, chế độ thanh điều hướng sẽ được nhà cung cấp định cấu hình bằng cách ghi đè. Bạn có thể thay đổi chế độ thanh điều hướng bằng cách chạy lệnh adb sau đây 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.