Hình ảnh hệ thống chung

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)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 AIDLgiao 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êu aosp_$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 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_$arch chứa userdebug_plat_sepolicy.cil. Khi cài đặt ROM dành riêng cho OEM vendor_boot-debug.img hoặc boot-debug.img, /system/bin/init sẽ tải userdebug_plat_sepolicy.cil từ GSI system.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ục system/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.updatable trong 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ùng img2simg để 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_arm64aosp_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_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 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.releasero.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ậtcá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-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

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:

  1. Đả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ản fastboot mới nhất, hãy tạo phiên bản đó từ cây nguồn Android.)
  2. 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.
  3. 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).
  4. 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:

  1. Khởi động vào fastboot chế độmở khoá trình tải khởi động.
  2. Các thiết bị hỗ trợ fastbootd cũng cần khởi động vào fastbootd bằng cách:
    $ fastboot reboot fastboot
  3. Xoá và cài đặt ROM GSI vào phân vùng hệ thống:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. 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
    
  5. 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
  6. Khởi động lại vào trình tải khởi động:
    $ fastboot reboot-bootloader
  7. 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
  8. Reboot:
    $ fastboot reboot
Trên các thiết bị Android 10 trở lên có phân vùng hệ thống nhỏ hơn, thông báo lỗi sau có thể xuất hiện khi cài đặt ROM GSI:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
Sử dụng lệnh sau để xoá 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 giúp bạn có thêm dung lượng để cài đặt ROM GSI:
$ fastboot delete-logical-partition product_a
Hậu tố _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-gsikhô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:
    1. Gửi bản vá đến nhánh AOSP android17-release.
    2. Cherrypick bản vá đến DESSERT-gsi.
    3. Gửi lỗi để được xem xét cherrypick.
  • 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.