Ma trận tương thích

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ới MAJOR.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ới VERSION-VERSION)
Nếu bạn không chỉ định, giá trị mặc định sẽ là 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ục CONFIG 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ằng CONFIG_.
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ằng 0x hoặc 0X)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ằng 0x hoặc 0X. 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, mn.
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.