Hình ảnh hệ thống chung (GSI) là một hình ảnh hệ thống có các cấu hình đã điều chỉnh cho các thiết bị Android. Đây được coi là một cách triển khai Android thuần tuý có mã Dự án nguồn mở Android chưa sửa đổi (AOSP) mà bất kỳ Android nào thiết bị chạy Android 9 trở lên 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ử với Bộ thử nghiệm dành cho nhà cung cấp (VTS) và Bộ kiểm tra tính tương thích (CTS) để đảm bảo thiết bị triển khai giao diện của nhà cung cấp đúng cách theo phiên bản mới nhất Android.
Để 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 phép sử dụng) phương sai) và loại. Khi bạn đã sẵn sàng sử dụng GSI, tải xuống và xây dựng GSI cho thiết bị của bạn đích, sau đó cài đặt ROM GSI lên Android thiết bị.
Cấu hình GSI và các phương sai
GSI hiện tại của Android có cấu hình sau:
- Treble. GSI bao gồm dịch vụ hỗ trợ đầy đủ cho Thay đổi về cấu trúc dựa trên AIDL/HIDL (còn được gọi là Treble), bao gồm tính năng 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 sử dụng giao diện của nhà cung cấp AIDL/HIDL. (Để biết thêm chi tiết, hãy xem Tài nguyên cấu trúc.)
- Hệ thống tệp. GSI sử dụng hệ thống tệp có định dạng ext4.
GSI hiện tại của Android bao gồm các biến thể chính sau đây:
- Cấu trúc CPU. Hỗ trợ nhiều hướng dẫn dành cho CPU (ARM, x86, v.v.) và bit của CPU (32 bit hoặc 64 bit).
Các mục tiêu của GSI dành cho các thử nghiệm tuân thủ Treble
GSI dùng để kiểm tra tính tuân thủ được xác định theo phiên bản Android mà thiết bị khởi chạy cùng.
Loại thiết bị | Tạo mục tiêu |
---|---|
Thiết bị chạy Android 14 | gsi_$arch-user (Đã ký) |
Thiết bị chạy Android 13 | gsi_$arch-user (Đã ký) |
Thiết bị chạy Android 12L | gsi_$arch-user (Đã ký) |
Thiết bị chạy Android 12 | gsi_$arch-user (Đã ký) |
Thiết bị chạy Android 11 | gsi_$arch-user (Đã ký) |
Tất cả GSI đều được xây dựng từ cơ sở mã của Android 12, và mỗi cấu trúc CPU có một tệp nhị phân GSI tương ứng (xem danh sách bản dựng trong Xây dựng GSI).
Các thay đổi về GSI Android 12
Các thiết bị chạy hoặc cập nhật lên Android 12 phải sử dụng Android 12 GSI phục vụ việc kiểm tra tính tuân thủ. Điều này bao gồm sau những thay đổi lớn so với các GSI trước đó:
- Tên mục tiêu. Tên đích của GSI dành cho việc tuân thủ
kiểm thử được thay đổi thành
gsi_$arch
. GSI có tên đíchaosp_$arch
được lưu giữ cho các nhà phát triển ứng dụng Android. Kế hoạch thử nghiệmCTS-on-GSI
cũng được giảm để kiểm thử giao diện của nhà cung cấp. - GSI cũ đã bị loại bỏ. GSI 12 loại bỏ các giải pháp phù hợp với các thiết bị Android 8.0 hoặc 8.1 vẫn chưa được bảo vệ hoàn toàn.
- Userdebug SEPolicy.
gsi_$arch
của GSI chứauserdebug_plat_sepolicy.cil
. Khi nhấp nháyvendor_boot-debug.img
dành riêng cho OEM hoặcboot-debug.img
,/system/bin/init
sẽ tảiuserdebug_plat_sepolicy.cil
trong GSIsystem.img
. Tham chiếu Kiểm thử VTS bằng Gỡ lỗi Ramdisk để biết thông tin chi tiết.
Các thay đổi về GSI Android 11
Các thiết bị chạy hoặc cập nhật lên Android 11 phải sử dụng Android 11 GSI dành cho việc kiểm tra tính tuân thủ. Điều này bao gồm sau những thay đổi lớn 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 tiện ích hệ thống vào thư mụcsystem/system_ext
. - Hàm APEX. GSI chứa cả APEX đã được làm phẳng và nén.
Chế độ nào được sử dụng do thuộc tính hệ thống
ro.apex.updatable
xác định trong phân vùng nhà cung cấp tại thời điểm chạy. Tham chiếu Định cấu hình hệ thống hỗ trợ 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ị chạy hoặc cập nhật lên Android 10 phải sử dụng Android 10 GSI phục vụ việc kiểm tra tính tuân thủ. Điều này bao gồm sau những thay đổi lớn so với các GSI trước đó:
- Bản dựng người dùng. GSI có bản dựng của người dùng được tạo từ Android 10. Trong Android 10, GSI bản dựng của người dùng có thể được sử dụng trong quá trình kiểm thử tuân thủ CTS-on-GSI/VTS. Tham chiếu Kiểm thử VTS bằng tính năng gỡ lỗi Ramdisk để biết thông tin chi tiết.
- Định dạng không được phân tích cú pháp. GSI có đích đến
aosp_$arch
được tạo bằng định dạng không được phân tích cú pháp. Bạn có thể sử dụngimg2simg
để chuyển đổi GSI chưa được phân tích cú pháp sang định dạng thưa thớt nếu nếu cần. - Hệ thống dưới dạng thư mục gốc. Mục tiêu bản dựng GSI cũ có tên là
aosp_$arch_a
đã bị loại bỏ. Đối với các thiết bị đã nâng cấp từ Android 8 hoặc 8.1 đến Android 10 với ramdisk và không thuộc hệ thống dưới dạng thư mục gốc, hãy sử dụng GSI cũaosp_$arch_ab
.init
được nâng cấp trong ramdisk hỗ trợ OEM system.img 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ị. Không cần tắt tính năng xác minh tính năng khởi động.
Các thay đổi đối với GSI Android 9
Các thiết bị chạy hoặc cập nhật lên Android 9 phải sử dụng Android 9 GSI phục vụ việc kiểm tra tính tuân thủ. Điều này bao gồm sau những thay đổi lớn so với các GSI trước đó:
- Hợp nhất GSI và trình mô phỏng. GSI được xây dựng từ hệ thống
hình ảnh của các sản phẩm trình mô phỏng, ví dụ:
aosp_arm64
vàaosp_x86
- Hệ thống dưới dạng thư mục gốc. Trong các phiên bản Android trước, thiết bị
không hỗ trợ cập nhật A/B có thể gắn hình ảnh hệ thống trong
Thư mục
/system
. Trong Android 9, Thư mục gốc của hình ảnh hệ thống được gắn làm thư mục 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 liên kết 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 sử dụng giao diện liên kết 64 bit.
- Thực thi VNDK. Trong Android 8.1, bạn không bắt buộc phải sử dụng VNDK.
Kể từ Android 9, VNDK là bắt buộc, vì vậy
Bạn phải đặt
BOARD_VNDK_VERSION
. - Thuộc tính hệ thống tương thích. của Android
9 cho phép kiểm tra quyền truy cập để tìm
thuộc tính hệ thống (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
Android 9 Các thay đổi trong Keymaster
Trong các phiên bản Android trước đây, các thiết bị triển khai Keymaster 3 trở xuống
phải xác minh 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 đề của hình ảnh khởi động.
Trong Android 9 trở lên, yêu cầu này đã được thay đổi để cho phép nhà cung cấp khác để khởi động GSI. Cụ thể, Keymaster sẽ không 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 hoặc thấp hơn, nhà cung cấp phải sửa đổi quy trình triển khai Keymaster để bỏ qua bước 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ừ tính năng tích hợp liên tục (CI) của AOSP (Dự án nguồn mở Android) trang web tại ci.android.com. Nếu loại GSI cho phần cứng của bạn nền tảng không có sẵn để tải xuống, hãy tham khảo phần sau đây để thông tin chi tiết về việc xây dựng GSI cho các mục tiêu cụ thể.
Xây dựng GSI
Kể từ Android 9, mỗi phiên bản Android đều có một
Nhánh GSI có tên DESSERT-gsi
trên AOSP (ví dụ:
android12-gsi
là nhánh GSI trên Android
12). Nhánh GSI chứa nội dung của Android có
tất cả bản vá bảo mật và
Đã áp dụng bản vá GSI.
Để xây dựng GSI, hãy thiết lập cây nguồn Android bằng cách
tải xuống từ nhánh GSI và
chọn bản dựng GSI
mục tiêu. Sử dụng các bảng mục tiêu bản dựng bên dưới để xác định đúng GSI
cho thiết bị của bạn. Sau khi quá trình xây dựng hoàn tất, GSI là hệ thống
hình ảnh (tức là system.img
) và xuất hiện trong thư mục đầu ra
out/target/product/generic_arm64
Ví dụ: để xây dựng mục tiêu bản dựng GSI
gsi_arm64-userdebug
trên nhánh android12-gsi
của GSI,
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 của Android
Các mục tiêu bản dựng GSI sau đây là dành cho các thiết bị chạy trên Android 9 trở lên.
Tên GSI | Vòm CPU | Bit giao diện liên kết | Hệ thống dưới dạng gốc | Tạo mục tiêu |
---|---|---|---|---|
gsi_arm |
ARM | 32 | Y | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | Y | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | Y | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | Y | gsi_x86_64-user gsi_x86_64-userdebug |
Các yêu cầu đối với việc cài đặt ROM GSI
Các thiết bị Android có thể có thiết kế khác nhau, vì vậy không có lệnh chung hoặc tập hợp hướng dẫn cài đặt ROM GSI để áp dụng cho tất cả các thiết bị. Liên hệ với nhà sản xuất thiết bị Android để biết hướng dẫn cài đặt ROM rõ ràng. Hãy sử dụng các bước sau làm nguyên tắc chung:
- Hãy đảm bảo rằng thiết bị có:
- Cắt dán
- Phương pháp mở khoá thiết bị (để thiết bị có thể được cài đặt ROM bằng
fastboot
) - Trạng thái đã mở khoá để có thể nhấp nháy qua
fastboot
(Để đảm bảo rằng bạn có phiên bản mới nhất củafastboot
, hãy tạo 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 hệ thống phân vùng.
- Xoá sạch 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 (cho 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ài đặt ROM GSI cho bất kỳ thiết bị Pixel nào:
- Khởi động đến
Chế độ
fastboot
và mở khóa 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
- Xoá sạch 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 (cho
ví dụ: dữ liệu người dùng và phân vùng hệ thống):
$ fastboot -w
- Khởi động lại:
$ 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ã vị trí của phân vùng hệ thống,
như system_a
trong ví dụ này.
Đóng góp cho GSI
Android hoan nghênh sự đóng góp của bạn cho việc 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à nhánh phát triển và chỉ chấp nhận các lựa chọn cherrypick từ nhánh chính AOSP, vì vậy, để gửi bản vá GSI, bạn phải:- Gửi bản vá đến
AOSP (Dự án nguồn mở Android)
Nhánh
main
. - Chọn bản vá cho
DESSERT-gsi
. - Hãy báo cáo lỗi để yêu cầu xem xét cherrypick.
- Gửi bản vá đến
AOSP (Dự án nguồn mở Android)
Nhánh
- Báo cáo lỗi GSI hoặc đưa ra đề xuất khác. Bài đánh giá các hướng dẫn trong báo cáo lỗi, sau đó duyệt qua hoặc tệp GSI lỗi.
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 đâ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.