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. Nó được coi là một triển khai Android thuần túy với mã Dự án nguồn mở Android (AOSP) không sửa đổi mà bất kỳ thiết bị Android nào chạy Android 9 trở lên đều có thể chạy thành công.
GSI được sử dụng để chạy các bài kiểm tra 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 tra bằng Bộ thử nghiệm của nhà cung cấp (VTS) và Bộ thử nghiệm tương thích (CTS) để đảm bảo rằng thiết bị triển khai giao diện của nhà cung cấp một cách chính xác với phiên bản Android mới nhất.
Để bắt đầu với GSI, hãy xem lại các phần sau để biết chi tiết về cấu hình GSI (và các phương sai đượ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à xây dựng GSI cho mục tiêu thiết bị của bạn, sau đó cài đặt GSI vào thiết bị Android.
Cấu hình GSI và phương sai
GSI Android hiện tại có cấu hình sau:
- Treble. GSI bao gồm hỗ trợ đầy đủ cho các thay đổi kiến trúc dựa trên AIDL / HIDL (còn được gọi là Treble ), bao gồm hỗ trợ cho các giao diện AIDL và giao diện HIDL . Bạn có thể sử dụng GSI trên bất kỳ thiết bị Android nào sử dụng giao diện nhà cung cấp AIDL / HIDL. (Để biết thêm chi tiết, hãy xem tài nguyên Kiến trúc .)
- Hệ thống tập tin. GSI sử dụng hệ thống tệp ext4.
GSI Android hiện tại bao gồm các khác biệt 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 tra tuân thủ Treble
GSI được sử dụng để kiểm tra sự tuân thủ được xác định bởi phiên bản Android mà thiết bị khởi chạy cùng.
Loại thiết bị | Xây dựng mục tiêu |
---|---|
Thiết bị khởi chạy với Android 12 | gsi_$arch-user (Đã ký) |
Thiết bị khởi chạy với Android 11 | gsi_$arch-user (Đã ký) |
Thiết bị khởi chạy với Android 10 | gsi_$arch-user (Đã ký) |
Thiết bị khởi chạy với Android 9 | gsi_$arch-userdebug |
Tất cả các GSI đều được xây dựng từ cơ sở mã Android 12 và mỗi kiến trúc CPU có một mã nhị phân GSI tương ứng (xem danh sách các mục tiêu xây dựng trong GSI xây dựng ).
Những thay đổi về GSI của Android 12
Các thiết bị khởi chạy hoặc cập nhật lên Android 12 phải sử dụng GSI của Android 12 để kiểm tra tính tuân thủ. Điều này bao gồm 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 bài kiểm tra tuân thủ được đổi thành
gsi_$arch
. GSI với tên mục tiêuaosp_$arch
được 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 bớt đối với giao diện nhà cung cấp thử nghiệm. - GSI kế thừa bị loại bỏ dần. GSI 12 loại bỏ các cách giải quyết phù hợp với các thiết bị Android 8.0 hoặc 8.1 không được Trebzed hoàn toàn.
- Userdebug SEPolicy. GSI
gsi_$arch
chứauserdebug_plat_sepolicy.cil
. Khi nhấp nháy nhà cung cấp cụ thểvendor_boot-debug.img
hoặcboot-debug.img
,/system/bin/init
sẽ tảiuserdebug_plat_sepolicy.cil
từ GSIsystem.img
. Tham khảo Kiểm tra VTS với Debug Ramdisk để biết thêm chi tiết.
Những thay đổi về GSI của Android 11
Các thiết bị khởi chạy hoặc cập nhật lên Android 11 phải sử dụng GSI của Android 11 để kiểm tra tính tuân thủ. Điều này bao gồm những thay đổi lớn sau đây so với các GSI trước đó:
- nội dung system_ext. Android 11 định nghĩa một
system_ext
phân vùng mới. GSI đặt nội dung phần mở rộng hệ thống trong thư mụcsystem/system_ext
. - APEXes. GSI chứa cả APEX phẳng và nén. Cái nào sẽ sử dụng được xác định bởi thuộc tính hệ thống
ro.apex.updatable
trong phân vùng của nhà cung cấp tại thời điểm chạy. Tham khảo cấu hình hệ thống để hỗ trợ cập nhật APEX để biết chi tiết.
Những thay đổi về GSI của Android 10
Các thiết bị khởi chạy hoặc cập nhật lên Android 10 phải sử dụng Android 10 GSI để kiểm tra tính tuân thủ. Điều này bao gồm những thay đổi lớn sau đây so với các GSI trước đó:
- Người dùng xây dựng. GSI có bản dựng người dùng từ Android 10. Trong Android 10, bản dựng người dùng GSI có thể được sử dụng trong thử nghiệm tuân thủ CTS-on-GSI / VTS. Tham khảo Kiểm tra VTS với Debug Ramdisk để biết thêm chi tiết.
- Định dạng chưa phân tích. GSI với mục tiêu
aosp_$arch
được xây dựng với định dạng không phân tích. Bạn có thể sử dụngimg2simg
để chuyển đổi GSI chưa phân tích thành định dạng thưa thớt nếu cần. - Hệ thống dưới dạng gốc. Mục tiêu xây dựng GSI kế thừa có tên
aosp_$arch_a
đã bị loại bỏ dần. Đối với các thiết bị được nâng cấp từ Android 8 hoặc 8.1 lên Android 10 có đĩa ram và không phải hệ thống làm quyền root, hãy sử dụng GSIaosp_$arch_ab
.init
được nâng cấp trong đĩa ram hỗ trợ OEM system.img với bố cục system-as-root. - Xác minh khởi động. Sử dụng GSI, bạn chỉ cần mở khóa thiết bị. Không cần thiết phải tắt xác minh khởi động.
Những thay đổi về GSI của Android 9
Các thiết bị khởi chạy hoặc cập nhật lên Android 9 phải sử dụng GSI của Android 9 để kiểm tra tính tuân thủ. Điều này bao gồm những thay đổi lớn sau đây so với các GSI trước đó:
- Hợp nhất GSI và trình giả lập. GSI được xây dựng từ hình ảnh hệ thống của các sản phẩm giả lập, ví dụ:
aosp_arm64
và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ợ 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 chất kết dính 64-bit. Trong Android 8.x, GSI 32 bit sử dụng giao diện chất kết dính 32 bit. Android 9 không hỗ trợ giao diện chất kết dính 32 bit, vì vậy cả GSI 32 bit và GSI 64 bit đều sử dụng giao diện chất kết dính 64 bit.
- Thực thi VNDK. Trong Android 8.1, VNDK là tùy chọn. Bắt đầu từ Android 9, VNDK là bắt buộc, vì vậy
BOARD_VNDK_VERSION
phải được đặ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 của Android 9 Keymaster
Trong các phiên bản Android trước đó, các thiết bị triển khai Keymaster 3 trở xuống bắt buộc 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 bootloader 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 nên thực hiện 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 được bộ nạp 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 xác minh (hoặc nâng cấp lên Keymaster 4). Để biết chi tiết về Keymaster, hãy tham khảo Kho khóa được hỗ trợ bởi phần cứng .
Tải xuống GSI
Bạn có thể tải xuống GSI được tạo sẵn từ trang web tích hợp liên tục AOSP (CI) tại ci.android.com . Nếu loại GSI cho nền tảng phần cứng của bạn không có sẵn để tải xuống, hãy tham khảo phần sau để biết chi tiết về cách xây dựng GSI cho các mục tiêu cụ thể.
Xây dựng GSI
Bắt đầu với Android 9, mỗi phiên bản Android 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). Các nhánh của 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à bản vá GSI được áp dụng.
Để 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ừ một nhánh GSI và chọn mục tiêu xây dựng GSI . Sử dụng bảng mục tiêu xây dựng bên dưới để xác định phiên bản GSI chính xác cho thiết bị của bạn. Sau khi quá trình xây dựng hoàn tất, GSI là hình ảnh hệ thống (tức là system.img
) và xuất hiện trong thư mục đầu out/target/product/ generic_arm64
.
Ví dụ: để tạo mục tiêu xây 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 xây dựng GSI của Android
Các mục tiêu xây dựng GSI sau đây dành cho các thiết bị chạy trên Android 9 trở lên.
Tên GSI | Vòm CPU | Giao diện kết dính bitness | Hệ thống dưới dạng gốc | Xây dựng mục tiêu |
---|---|---|---|---|
gsi_arm | CÁNH TAY | 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 |
Yêu cầu để nhấp nháy GSI
Các thiết bị Android có thể có các thiết kế khác nhau, vì vậy không có lệnh chung hoặc tập hợp các hướng dẫn để cài đặt GSI để áp dụng cho tất cả các thiết bị. Kiểm tra với nhà sản xuất thiết bị Android để biết hướng dẫn nhấp nháy rõ ràng. Sử dụng các bước sau làm hướng dẫn chung:
- Đảm bảo rằng thiết bị có những điều sau đây:
- Trebzed
- Một phương pháp để mở khóa thiết bị (để chúng có thể được flash bằng
fastboot
) - Trạng thái đã mở khóa để làm cho nó có thể nhấp nháy thông qua
fastboot
(Để đảm bảo rằng bạn có phiên bảnfastboot
mới nhất, hãy xây dựng nó từ cây nguồn Android.)
- Xóa phân vùng hệ thống hiện tại, sau đó flash GSI vào phân vùng hệ thống.
- Xóa dữ liệu người dùng và xóa 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ụ: để flash GSI cho bất kỳ thiết bị Pixel nào:
- Khởi động sang
fastboot
độ khởi động nhanh và mở khóa bộ nạp 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
- Xóa và flash GSI vào phân vùng hệ thống:
$ fastboot erase system $ fastboot flash system system.img
- Xóa dữ liệu người dùng và xóa 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:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedSử dụng lệnh sau để xóa phân vùng sản phẩm và giải phóng dung lượng cho phân vùng hệ thống. Điều này cung cấp thêm không gian để flash GSI:
$ fastboot delete-logical-partition product_aPostfix
_a
phải khớp với id vị trí 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 GSIs
Android hoan nghênh những đóng góp của bạn cho sự 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 cherrypicks từ nhánh chính của AOSP, vì vậy để gửi một bản vá GSI, bạn phải:- Gửi bản vá cho chi nhánh
master
của AOSP . - Cherrypick bản vá thành
DESSERT -gsi
. - Gửi lỗi để được cherrypick xem xét.
- Gửi bản vá cho chi nhánh
- Báo cáo lỗi GSI hoặc đưa ra các đề xuất khác. Xem lại hướng dẫn trong Báo cáo lỗi , sau đó duyệt hoặc gửi lỗi GSI .
Lời khuyên
Thay đổi chế độ thanh điều hướng bằng cách sử dụng adb
Khi khởi động với GSI, chế độ thanh điều hướng được định cấu hình bởi ghi đè 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.