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à phương thức 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 chương trình 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 thử nhà cung cấp (VTS)Bộ kiểm thử tính tương thích (CTS) để đảm bảo 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 đây để biết thông tin chi tiết về cấu hình GSI (và các biến thể được phép) cũng như 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 thiết bị mục tiêu, sau đó cài đặt ROM GSI vào thiết bị Android.

Cấu hình GSI và các phương sai

GSI Android hiện tại có cấu hình sau:

GSI Android hiện tại bao gồm các biến thể chính sau:

  • Cấu trúc CPU. Hỗ trợ nhiều lệnh CPU (ARM, x86, v.v.) và số bit CPU (32 bit hoặc 64 bit).

Mục tiêu GSI cho các thử nghiệm tuân thủ 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 bản dựng
Thiết bị chạy Android 15 gsi_$arch-user (Đã ký)
Thiết bị ra mắt với 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 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ị chạy Android 12 hoặc đượ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ó các thay đổi chính sau đây so với các GSI trước đó:

  • Tên mục tiêu. Tên đích GSI dành cho các hoạt động kiểm thử tính tuân thủ sẽ thay đổi thành gsi_$arch. GSI có tên mục tiêu là aosp_$arch được giữ lại cho các nhà phát triển ứng dụng Android. Kế hoạch kiểm thử CTS-on-GSI cũng được giảm để kiểm thử giao diện nhà cung cấp.
  • GSI cũ sẽ ngừng hoạt động. GSI 12 sẽ xoá các giải pháp cho các thiết bị Android 8.0 hoặc 8.1 chưa được chuyển đổi hoàn toàn sang Treble.
  • Userdebug SEPolicy. GSI gsi_$arch chứa userdebug_plat_sepolicy.cil. Khi cài đặt ROM cho vendor_boot-debug.img hoặc boot-debug.img dành riêng cho OEM, /system/bin/init sẽ tải userdebug_plat_sepolicy.cil từ GSI system.img. Tham khảo nội dung Kiểm thử VTS bằng Debug Ramdisk để biết thông tin chi tiết.

Các thay đổi về GSI Android 11

Các thiết bị chạy Android 11 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ó 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 tiện ích hệ thống vào thư mục system/system_ext.
  • Hàm APEX. GSI chứa cả APEX được làm phẳng và nén. Thuộc tính hệ thống ro.apex.updatable trong phân vùng nhà cung cấp tại thời gian chạy sẽ xác định bạn nên sử dụng phương thức nào. Tham khảo nội dung Định cấu hình hệ thống để hỗ trợ 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ị chạy Android 10 hoặc đượ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ó 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, bạn có thể sử dụng GSI bản dựng người dùng trong quy trình kiểm thử tuân thủ CTS-on-GSI/VTS. Tham khảo bài viết Kiểm thử VTS bằng Debug Ramdisk để biết thông tin chi tiết.
  • Định dạng không được phân tích cú pháp. GSI có mục tiêu aosp_$arch được tạo bằng định dạng chưa được phân tích cú pháp. Bạn có thể sử dụng img2simg để chuyển đổi GSI chưa được phân tích cú pháp sang định dạng thưa thớt 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 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 có ổ đĩa ram và không thuộc hệ thống gốc, hãy sử dụng aosp_$arch_ab của GSI cũ. init đã nâng cấp trong ramdisk hỗ trợ system.img của 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 tắt tính năng xác minh quá trình khởi động.

Các thay đổi về 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 GSI Android 9 để kiểm thử việc tuân thủ. Trong đó có 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 xây dựng 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_arm64aosp_x86.
  • Hệ thống dưới dạng thư mục 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, thư mục gốc của hình ảnh hệ thống được gắn dưới dạng 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 đề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 phải đặt BOARD_VNDK_VERSION.
  • Thuộc tính hệ thống tương thích. Android 9 cho phép kiểm tra quyền truy cập cho một thuộc tính hệ thống tương thích (PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true).

Các thay đổi về Keymaster của Android 9

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 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 đề của 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 nên 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 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 bài viết 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 (Dự án nguồn mở Android) tại ci.android.com. Nếu bạn không thể tải loại GSI dành cho nền tảng phần cứng của mình xuống, hãy tham khảo phần sau để biết thông tin chi tiết về cách xây dựng 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 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 có áp dụng tất cả các bản vá bảo mậtbả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 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 chính xác cho thiết bị của bạn. Sau khi bản dựng 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 của Android

Các mục tiêu bản dựng GSI sau đây dành cho các thiết bị chạy Android 9 trở lên.

Tên GSI Cấu trúc 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 gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 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 thiết kế, vì vậy, không có lệnh chung hoặc bộ hướng dẫn để cài đặt ROM GSI 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 rõ ràng về cách cài đặt ROM. Hãy làm theo các bước sau đây để tham khảo nguyên tắc chung:

  1. Đảm bảo rằng thiết bị có những đặc điểm sau:
    • Đã cắt
    • Phương thức 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ể 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 này 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ài đặt ROM GSI cho bất kỳ thiết bị Pixel nào:

  1. Khởi động vào chế độ fastbootmở 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. 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
  5. Khởi động lại vào trình tải khởi động:
    $ fastboot reboot-bootloader
  6. Tắt tính năng xác minh quy trình khởi động đã xác minh trong khi cài đặt ROM vbmeta đã cung cấp:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  7. Reboot:
    $ fastboot reboot
Trên các thiết bị Android 10 trở lên có các phân vùng hệ thống nhỏ hơn, thông báo lỗi sau đây 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. Việc này sẽ cung cấp thêm dung lượng để cài đặt ROM GSI:
$ fastboot delete-logical-partition product_a
Tiền tố _a phải khớp với mã nhận dạng 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 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à một nhánh phát triển và chỉ chấp nhận các lựa chọn cherrypick từ nhánh chính của AOSP (Dự án nguồn mở Android). Vì vậy, để gửi bản vá GSI, bạn phải:
    1. Gửi bản vá đến nhánh main của AOSP.
    2. Chọn lọc bản vá cho DESSERT-gsi.
    3. Gửi lỗi để yêu cầu xem xét lựa chọn chọn lọc.
  • Báo cáo lỗi GSI hoặc đưa ra đề xuất khác. Xem lại hướng dẫn trong phần Báo cáo lỗi, sau đó duyệt xem 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 đâ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.