Hình ảnh hệ thống chung

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)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:

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 đích aosp_$arch được lưu giữ cho các nhà phát triển ứng dụng Android. Kế hoạch thử nghiệm CTS-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ứa userdebug_plat_sepolicy.cil. Khi nhấp nháy vendor_boot-debug.img dành riêng cho OEM hoặc boot-debug.img, /system/bin/init sẽ tải userdebug_plat_sepolicy.cil trong GSI system.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ục system/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ụ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 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_arm64aosp_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.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 đã đượ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:

  1. 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ủa fastboot, hãy tạo 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 hệ thống phân vùng.
  3. 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).
  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 đến Chế độ fastbootmở khóa 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á 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
  5. Khởi động lại:
    $ 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 để 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. Việc này sẽ cung cấp 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ã 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:
    1. Gửi bản vá đến AOSP (Dự án nguồn mở Android) Nhánh main.
    2. Chọn bản vá cho DESSERT-gsi.
    3. Hãy báo cáo lỗi để yêu cầu xem xét cherrypick.
  • 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.