Tiện ích SDK

Mô-đun Tiện ích mở rộng SDK quyết định cấp SDK mở rộng của thiết bị và cung cấp API cho các ứng dụng để truy vấn cấp SDK mở rộng. Mô-đun này có thể cập nhật, nghĩa là nó có thể nhận các bản cập nhật cho chức năng ngoài chu kỳ phát hành Android thông thường.

Tiện ích mở rộng SDK chịu trách nhiệm:

  • Quyết định mức SDK mở rộng của thiết bị.
  • Cung cấp API cho ứng dụng để truy vấn cấp SDK mở rộng.
  • (Bắt đầu từ Android 12) Xác định giá trị cho các biến môi trường BOOTCLASSPATH , DEX2OATBOOTCLASSPATHSYSTEMSERVERCLASSPATH .

Định dạng mô-đun

Mô-đun Tiện ích mở rộng SDK ( com.android.sdkext ) ở định dạng APEX và có sẵn cho các thiết bị chạy Android 11 trở lên.

Định dạng gói

Mô-đun Tiện ích mở rộng SDK ( com.google.android.sdkext ) có định dạng APEX và chứa các thành phần sau:

  • (Bắt đầu từ Android 12) bin/derive_classpath : Một tệp nhị phân gốc chạy sớm trong quá trình khởi động thiết bị. Nó đọc các tệp cấu hình đường dẫn lớp riêng lẻ từ hệ thống và các mô-đun khác, hợp nhất chúng và xác định định nghĩa của các biến môi trường CLASSPATH .

  • bin/derive_sdk : Một tệp nhị phân gốc chạy sớm trong quá trình khởi động thiết bị và đọc siêu dữ liệu của các mô-đun khác để đặt thuộc tính hệ thống liên quan đến SDK mở rộng (ví dụ: build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : Tệp này nằm trên bootclasspath hiển thị API cho các ứng dụng để truy vấn cấp SDK tiện ích mở rộng.

Lấy cấp SDK tiện ích mở rộng

Chương trình derive_sdk đọc siêu dữ liệu được lưu trữ dưới dạng tệp protobuf nhị phân trong đường dẫn etc/sdkinfo.binarypb bên trong mỗi mô-đun APEX. Để biết chi tiết về cấu trúc protobuf, hãy tham khảo tệp protobuf .

Cấp độ SDK tiện ích đọc

Mô-đun Tiện ích mở rộng SDK hiển thị lớp java SdkExtensions trong gói android.os.ext . Sử dụng phương thức getExtensionVersion(int) để đọc phiên bản của tiện ích mở rộng SDK (ví dụ: getExtensionVersion(Build.VERSION_CODES.R) ).

Dẫn xuất đường dẫn lớp

Dịch vụ derive_classpath đọc và hợp nhất các tệp cấu hình riêng lẻ trong /system/etc/classpaths//apex/*/etc/classpaths/ . Mỗi cấu hình lưu trữ thông báo protobuf từ classpaths.proto ở định dạng nhị phân proto. Thuật toán hợp nhất chính xác xác định thứ tự của các mục nhập đường dẫn lớp được mô tả trong derive_classpath.cpp và có thể thay đổi theo thời gian.