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

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êu aosp_$arch được 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 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ứa userdebug_plat_sepolicy.cil . Khi nhấp nháy nhà cung cấp cụ thể vendor_boot-debug.img hoặc boot-debug.img , /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 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ục system/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ụng img2simg để 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 GSI aosp_$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_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ợ 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.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 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:

  1. Đả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ả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 cho bất kỳ thiết bị Pixel nào:

  1. Khởi động sang fastboot độ khởi động nhanhmở khóa bộ nạp 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. 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 các thiết bị Android 10 hoặc 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
Postfix _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:
    1. Gửi bản vá cho chi nhánh master của AOSP .
    2. Cherrypick bản vá thành DESSERT -gsi .
    3. Gửi lỗi để được cherrypick xem xét.
  • 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.