Phần này mô tả khung và ma trận tương thích với thiết bị và giản đồ ma trận tương thích. Cho quy tắc so khớp, hãy xem phần So khớp Quy tắc.
Ma trận tương thích khung (FCM)
Ma trận tương thích khung (FCM) mô tả các yêu cầu của khung trên thiết bị mà nó chạy. Ma trận tương thích khung bao gồm hệ thống ma trận tương thích, ma trận tương thích sản phẩm, và ma trận tương thích system_ext. Tệp kê khai thiết bị phải đáp ứng các yêu cầu của FCM (yêu cầu thực thi trong thời gian xây dựng, thời gian chạy và trong VTS).
FCM system_ext và FCM sản phẩm là nội dung bổ sung cho FCM dành riêng cho thiết bị (đã cài đặt trong phân vùng hệ thống).
- FCM của thiết bị phải phản ánh các yêu cầu của mô-đun trong phân vùng hệ thống.
- FCM system_ext phải phản ánh các yêu cầu theo mô-đun trong phân vùng system_ext.
- FCM của sản phẩm phải phản ánh các yêu cầu theo mô-đun trong phân vùng sản phẩm.
Tất cả FCM phải phù hợp với sửa đổi của OEM về khung trong hệ thống, sản phẩm và phân vùng system_ext. Ví dụ: nếu một ứng dụng được cài đặt trong phân vùng sản phẩm sử dụng tiện ích của nhà cung cấp của giao diện HAL, yêu cầu giao diện HAL phải được khai báo trong FCM của sản phẩm.
Ví dụ về tệp ma trận tương thích của hệ thống:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework" level="3"> <hal> <name>android.hardware.camera</name> <version>1.0</version> <version>3.1-4</version> <interface> <name>ICameraProvider</name> <instance>default</instance> <regex-instance>[a-z_]+/[0-9]+</regex-instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <version>1.0</version> <interface> <name>INfc</name> <instance>default</instance> </interface> </hal> <hal optional="true"> <name>android.hardware.graphics.composer</name> <version>2.1</version> <interface> <name>IComposer</name> <instance>default</instance> </interface> </hal> <hal format="aidl" optional="true"> <name>android.hardware.light</name> <version>1-2</version> <interface> <name>ILights</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>GL</name> <version>1.1</version> <version>3.0</version> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <kernel version="3.18.51"> <!-- common configs --> </kernel> <kernel version="3.18.51"> <!-- arm specific configs --> <condition> <config> <key>CONFIG_ARM</key> <value type="tristate">y</value> </config> <condition> <config> <key>CONFIG_A</key> <value type="string"></value> </config> <config> <key>CONFIG_B</key> <value type="tristate">y</value> </config> </kernel> <kernel version="4.1.22"> <!-- common configs --> <config> <key>CONFIG_A</key> <value type="string">foo</value> </config> <config> <key>CONFIG_B2</key> <value type="int">1024</value> </config> </kernel> <sepolicy> <kernel-sepolicy-version>30</kernel-sepolicy-version> <sepolicy-version>25.0</sepolicy-version> <sepolicy-version>26.0-3</sepolicy-version> </sepolicy> <avb> <vbmeta-version>2.1</vbmeta-version> </avb> <xmlfile format="dtd"> <name>media_profile</name> <version>1.0</version> <path>/system/etc/media_profile_V1_0.dtd</path> </xmlfile> </compatibility-matrix>
Để biết thêm chi tiết, hãy xem FCM Vòng đời.
Ma trận về khả năng tương thích của sản phẩm
FCM của sản phẩm là một tệp ma trận tương thích khung trong sản phẩm phân vùng. Đối tượng VINTF kết hợp FCM sản phẩm với FCM trong hệ thống và system_ext trong thời gian chạy.
Ví dụ về tệp FCM của sản phẩm:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework"> <hal> <name>vendor.foo.camera</name> <version>1.0</version> <interface> <name>IBetterCamera</name> <instance>default</instance> </interface> </hal> </compatibility-matrix>
Ma trận tương thích System_ext
FCM system_ext là tệp ma trận tương thích khung trong system_ext phân vùng. Đối tượng VINTF kết hợp FCM system_ext với FCM trong hệ thống và sản phẩm trong thời gian chạy. Xem ma trận về khả năng tương thích với sản phẩm để có tệp FCM system_ext ví dụ.
Ma trận tương thích thiết bị (DCM)
Ma trận về khả năng tương thích của thiết bị mô tả một tập hợp yêu cầu mà thiết bị yêu cầu từ khung này (các yêu cầu được thực thi tại thời điểm khởi chạy và thời điểm OTA).
Ví dụ về tệp DCM:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="device"> <hal> <name>android.hidl.manager</name> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <version>1.0</version> <interface> <name>IMemory</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.allocator</name> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.framework.sensor</name> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </compatibility-matrix>
Giản đồ ma trận tương thích
Phần này mô tả ý nghĩa của các thẻ XML này. Một số nội dung "bắt buộc" thẻ
có thể bị thiếu từ tệp nguồn trong cây nguồn Android và được viết bởi
assemble_vintf
tại thời điểm xây dựng. "Bắt buộc" phải có trong các tệp tương ứng trên
thiết bị.
?xml
- Không bắt buộc. Tệp này chỉ cung cấp thông tin cho trình phân tích cú pháp XML.
compatibility-matrix.version
- Bắt buộc. Phiên bản meta của ma trận tương thích này. Mô tả các phần tử như dự kiến trong ma trận tương thích. Không liên quan đến phiên bản XML.
compatibility-matrix.type
- Bắt buộc. Loại ma trận tương thích này:
"device"
: Ma trận tương thích của thiết bị."framework"
: Ma trận tương thích khung.
manifest.level
- Bắt buộc đối với ma trận tương thích khung. Trong Android 12 trở lên,
được phép trong tệp ma trận tương thích khung trong phân vùng sản phẩm và phân vùng system_ext.
Chỉ định Phiên bản ma trận tương thích khung (FCM Version) của tệp này. Không khai báo thông tin này
trong ma trận tương thích khung dành riêng cho thiết bị (ví dụ:
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
). compatibility-matrix.hal
- Không bắt buộc và có thể lặp lại. Liệt kê một HAL (HIDL hoặc gốc) duy nhất
theo yêu cầu của chủ sở hữu ma trận tương thích (khung hoặc thiết bị) phải
hiện tại. Các mục nhập HAL được phân biệt bằng phần tử
<name>
; có thể có một số mục nhập HAL có cùng tên (ám chỉ điều kiện "và"). compatibility-matrix.hal.format
- Không bắt buộc. Giá trị có thể là một trong các giá trị sau:
"hidl"
: HAL HIDL. Đây là tuỳ chọn mặc định."aidl"
: HAL AIDL. Chỉ hợp lệ trên meta phiên bản ma trận tương thích 2.0."native"
: HAL gốc.
compatibility-matrix.hal.optional
- Thuộc tính là không bắt buộc và giá trị mặc định là false. Nêu rõ việc HAL này có
không bắt buộc đối với chủ sở hữu ma trận tương thích (khung hoặc thiết bị). Nếu một
Mục nhập
<hal>
được đánh dấu là không bắt buộc, điều này có nghĩa là chủ sở hữu có thể làm việc với HAL này (nếu có) nhưng không bắt buộc phải có. compatibility-matrix.hal.name
- Bắt buộc. Tên gói đầy đủ của HAL này. Ví dụ:
android.hardware.camera
(HIDL hoặc AIDL HAL)GLES
(HAL gốc, chỉ yêu cầu tên)
compatibility-matrix.hal.version
-
Danh sách phạm vi phiên bản (xem
Khớp với HAL)
xác định các phiên bản mà chủ sở hữu của ma trận tương thích (khung hoặc
thiết bị) mong đợi.
Đối với HIDL và HAL gốc, bắt buộc, có thể lặp lại mà không bị trùng lặp. Định dạng là một trong các định dạng sau:MAJOR.MINOR_MIN-MINOR_MAX
MAJOR.MINOR
(tương đương vớiMAJOR.MINOR-MINOR
)
Đối với HAL AIDL, không được có trên thiết bị chạy Android 11 trở xuống. Không bắt buộc trên thiết bị chạy các phiên bản mới hơn. Nếu được chỉ định, định dạng là một trong các định dạng sau:VERSION_MIN-VERSION_MAX
VERSION
(tương đương vớiVERSION-VERSION
)
1
. compatibility-matrix.hal.interface
- Không bắt buộc, có thể lặp lại. Danh sách các giao diện bắt buộc của HAL này.
compatibility-matrix.hal.interface.name
- Bắt buộc. Tên giao diện.
compatibility-matrix.hal.interface.instance
- Không bắt buộc, có thể lặp lại. Danh sách các thực thể bắt buộc của giao diện này.
compatibility-matrix.hal.interface.regex-instance
- Không bắt buộc, có thể lặp lại. Danh sách các mẫu tên thực thể bắt buộc trên . Sử dụng Mở rộng Biểu thức chính quy.
compatibility-matrix.kernel
- Không bắt buộc, có thể lặp lại. Chỉ định danh sách cấu hình nhân mà khung đó
yêu cầu trên từng phiên bản kernel.
Nhiều<kernel>
có cùng một<version>
có thể tồn tại để ngụ ý "và" mối quan hệ. Mỗi<kernel>
là một "mảnh" trong các yêu cầu chỉ được bật khi<conditions>
đáp ứng. compatibility-matrix.kernel.version
- Bắt buộc. Phiên bản kernel. Định dạng là
VERSION.MAJOR_REVISION.MINOR_REVISION
. Phiên bản và bản sửa đổi chính phải khớp chính xác. Bản sửa đổi nhỏ xác định phiên bản LTS tối thiểu của nhân mà khung yêu cầu. compatibility-matrix.kernel.condition
- Không bắt buộc. Không được tồn tại đối với
<kernel>
đầu tiên của mỗi biến . Chỉ định một danh sách các điều kiện. Khi các điều kiện được đáp ứng, đã bật các yêu cầu nêu trong mảnh<kernel>
này. compatibility-matrix.kernel.config
- Không bắt buộc, có thể lặp lại. Liệt kê
CONFIG
mục bắt buộc phải phù hợp với phiên bản kernel này. Mỗi mụcCONFIG
là một khoá-giá trị cặp; các mục cấu hình được phân biệt bằng khoá. compatibility-matrix.kernel.config.key
- Bắt buộc. Tên khoá của mục
CONFIG
. Bắt đầu bằngCONFIG_
. compatibility-matrix.kernel.config.value
- Bắt buộc. Giá trị của mục
CONFIG
. Định dạng phụ thuộc vào loại:string
. Dấu ngoặc kép được bỏ qua.int
. Hệ thập phân và thập lục phân (phải bắt đầu bằng0x
hoặc0X)
giá trị được chấp nhận. Được diễn giải dưới dạng số nguyên 64 bit; tràn sẽ dẫn đến việc cắt bớt. (Trình phân tích cú pháp chấp nhận các giá trị từ -264 + 1 thành 264 – 1, bit thứ 65 bị cắt bớt; để biết thông tin chi tiết, vui lòng tham khảo vụt mạnh .)range
. Định dạng là[int]-[int]
, ví dụ:10-20
. Giá trị thập lục phân được chấp nhận và phải bắt đầu bằng0x
hoặc0X
. Hai ranh giới phải là một 64 bit chưa ký số nguyên.tristate
. Các giá trị hợp lệ lày
,m
vàn
.
compatibility-matrix.kernel.config.value.type
- Bắt buộc. Loại giá trị của mục
CONFIG
, một trong các giá trị sau:string
int
range
tristate
compatibility-matrix.sepolicy
- Bắt buộc. Chứa mọi mục liên quan đến sepolicy. Chỉ được khung tương thích khung.
compatibility-matrix.sepolicy.sepolicy-version
- Bắt buộc, có thể lặp lại. Mô tả yêu cầu đối với phiên bản sepolicy.
Tương ứng với
manifest.sepolicy.version
. Mỗi thực thể của một xác định nhiều phiên bản sepolicy. compatibility-matrix.sepolicy.kernel-sepolicy-version
- Bắt buộc. Khai báo phiên bản
policydb
mà khung hoạt động bằng Google. compatibility-matrix.avb.vbmeta-version
- Không bắt buộc; mà chỉ được ma trận tương thích khung sử dụng. Khai báo
AVB
phiên bản dùng để ký
system.img
. Không được dùng nữa trong Android 10. compatibility-matrix.vendor-ndk
- Không bắt buộc; mà ma trận tương thích của thiết bị chỉ sử dụng. Khai báo thông tin tổng quan nhanh về nhà cung cấp VNDK. Nếu thiếu thì không có yêu cầu nào về VNDK trên hình ảnh hệ thống.
compatibility-matrix.vendor-ndk.version
- Bắt buộc. Một số nguyên dương khai báo phiên bản VNDK do hình ảnh của nhà cung cấp.
compatibility-matrix.vendor-ndk.library
- Không bắt buộc, có thể lặp lại. Khai báo một tập hợp thư viện VNDK theo yêu cầu của
hình ảnh của nhà cung cấp. Cùng ngữ nghĩa như
manifest.vendor-ndk.library
. compatibility-matrix.system-sdk.version
- Không bắt buộc, có thể lặp lại; mà ma trận tương thích của thiết bị chỉ sử dụng. Khai báo yêu cầu của ứng dụng của nhà cung cấp trên các phiên bản SDK hệ thống. Nếu thiếu thì tức là không có SDK hệ thống là yêu cầu đối với hình ảnh hệ thống.