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 thiết bị Android. Nó được coi là một triển khai Android thuần túy với mã Dự án mã nguồn mở Android (AOSP) chưa 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 thử nghiệm 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ộ kiểm tra nhà cung cấp (VTS)Bộ kiểm tra tương thích (CTS) để đảm bảo rằng thiết bị triển khai chính xác giao diện của nhà cung cấp 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 đó chuyển GSI sang thiết bị Android.

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

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

Android GSI 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 dùng để kiểm tra tính tuân thủ được xác định theo phiên bản Android mà thiết bị 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ả GSI đều được xây dựng từ cơ sở mã 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 xây dựng trong Xây dựng GSI ).

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 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 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êu aosp_$arch được lưu giữ cho các nhà phát triển ứng dụng Android. Kế hoạch kiểm tra CTS-on-GSI cũng được giảm bớt để kiểm tra giao diện của nhà cung cấp.
  • GSI cũ bị loại bỏ dần. GSI 12 loại bỏ các giải pháp thay thế dành cho các thiết bị Android 8.0 hoặc 8.1 chưa được Treblized hoàn toàn.
  • Chính sách gỡ lỗi người dùng. GSI gsi_$arch chứa userdebug_plat_sepolicy.cil . Khi flash 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 Kiểm tra VTS với Debug Ramdisk để biết 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 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 GSI trước đó:

  • nội dung system_ext. Android 11 xác định phân vùng mới system_ext . GSI đặt nội dung mở rộng hệ thống trong thư mục system/system_ext .
  • ĐỈNH. GSI chứa cả APEX dẹt và APEX nén. Việc sử dụng cái 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 tại thời gian 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 của Android 10 GSI

Các thiết bị khởi chạy hoặc cập nhật lên Android 10 phải sử dụng GSI Android 10 để 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 GSI trước đó:

  • Xây dựng người 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 chi tiết.
  • Định dạng không được 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ụng img2simg để chuyển đổi GSI không được phân tích sang định dạng thưa nếu cần.
  • Hệ thống là root. Mục tiêu xây 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 có đĩa RAM và không phải hệ thống gốc, hãy sử dụng GSI aosp_$arch_ab cũ. init được nâng cấp trong ramdisk hỗ trợ OEM system.img với bố cục hệ thống như gốc.
  • 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 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 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 giả lập, ví dụ aosp_arm64aosp_x86 .
  • Hệ thống là root. 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 vào thư mục /system . Trong Android 9, root của hình ảnh hệ thống được gắn làm root 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 nên cả GSI 32 bit và GSI 64 bit đều sử dụng giao diện liên kết 64 bit.
  • thực thi VNĐK. Trong Android 8.1, VNDK là tùy chọn. Bắt đầu từ Android 9, VNĐK là bắt buộc nê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 đối với thuộc tính hệ thống tương thích ( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true ).

Những thay đổi về Keymaster của Android 9

Trong các phiên bản Android cũ hơn, 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 bộ nạp 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 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 do bộ 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 cách 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ằng phần cứng .

Tải xuống GSI

Bạn có thể tải xuống GSI dựng sẵn từ trang web tích hợp liên tục (CI) AOSP 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 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). 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ậtbả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ừ 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 (nghĩa 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 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 Android GSI

Các mục tiêu xây 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 Vòm CPU Độ bit của giao diện chất kết dính Hệ thống là root 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ó thiết kế khác nhau, do đó không có lệnh chung hoặc bộ hướng dẫn nào để cài đặt GSI để áp dụng cho tất cả các thiết bị. Hãy 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 đây làm hướng dẫn chung:

  1. Đảm bảo rằng thiết bị có những điều sau:
    • Treblized
    • 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 để có thể flash qua fastboot (Để đảm bảo rằng bạn có phiên bản fastboot mới nhất, hãy xây dựng nó từ cây nguồn Android.)
  2. 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.
  3. 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).
  4. Khởi động lại thiết bị.

Ví dụ: để flash GSI vào bất kỳ thiết bị Pixel nào:

  1. Khởi động vào chế độ fastbootmở khóa bootloader .
  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. Xóa và flash GSI vào phân vùng hệ thống:
    $ fastboot erase system
    $ fastboot flash system system.img
    
  4. 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
  5. Khởi động lại:
    $ fastboot reboot
Trên Android 10 hoặc các thiết bị mới hơ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 flash 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. Điều này cung cấp thêm không gian để flash GSI:
$ fastboot delete-logical-partition product_a
Hậu tố _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 GSI

Android hoan nghênh những đóng góp của bạn cho sự phát triển của 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 những quả anh đào 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 chi nhánh main AOSP .
    2. Cherrypick bản vá cho DESSERT -gsi .
    3. Gửi một lỗi để được xem xét lại Cherrypick.
  • 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 phần Báo cáo lỗi , sau đó duyệt hoặc lưu trữ các lỗi GSI .

Lời khuyên

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 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.