互換性マトリックス

このセクションでは、フレームワークとデバイスの互換性マトリックスと互換性マトリックスのスキーマについて説明します。一致ルールについては、 「一致ルール」を参照してください。

フレームワーク互換性マトリックス (FCM)

フレームワーク互換性マトリックス (FCM) は、フレームワークが実行されるデバイス上のフレームワークの要件を説明します。フレームワーク互換性マトリックスは、システム互換性マトリックス、製品互換性マトリックス、およびsystem_ext 互換性マトリックスで構成されます。 FCM の要件は、デバイス マニフェストによって満たされる必要があります (ビルド時、実行時、および VTS で強制される要件)。

system_ext FCM と product FCM は、デバイス固有の FCM (システム パーティションにインストールされる) を補完するものです。

  • デバイス FCM は、システム パーティション内のモジュールの要件を反映する必要があります。
  • system_ext FCM は、system_ext パーティション内のモジュールによる要件を反映する必要があります。
  • 製品 FCM は、製品パーティション内のモジュールによる要件を反映する必要があります。

すべての FCM は、system、product、および system_ext パーティション内のフレームワークに対する OEM の変更に合わせて調整する必要があります。たとえば、製品パーティションにインストールされたアプリが HAL インターフェイスのベンダー拡張を使用する場合、HAL インターフェイス要件を製品 FCM で宣言する必要があります。

システム互換性マトリックス ファイルの例:

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

詳細については、 「FCM ライフサイクル」を参照してください。

製品互換性マトリックス

製品 FCM は、製品パーティション内のフレームワーク互換性マトリックス ファイルです。 VINTF オブジェクトは、実行時に製品 FCM をシステムおよび system_ext パーティション内の FCM に結合します。

製品 FCM ファイルの例:

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

System_ext 互換性マトリックス

system_ext FCM は、system_ext パーティション内のフレームワーク互換性マトリックス ファイルです。 VINTF オブジェクトは、実行時に system_ext FCM をシステムおよび製品パーティション内の FCM に結合します。 system_ext FCM ファイルの例については、製品互換性マトリックスを参照してください。

デバイス互換性マトリックス (DCM)

デバイス互換性マトリックスは、デバイスがフレームワークから期待する一連の要件 (起動時および OTA 時に強制される要件) を記述します。

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>

互換性マトリックスのスキーマ

このセクションでは、これらの XML タグの意味について説明します。一部の「必須」タグが Android ソース ツリーのソース ファイルに欠落しており、ビルド時にassemble_vintfによって書き込まれる場合があります。 「必須」タグは、デバイス上の対応するファイルに存在する必要があります。

?xml
オプション。 XML パーサーに情報を提供するだけです。
compatibility-matrix.version
必須。この互換性マトリックスのメタバージョン。互換性マトリックスで期待される要素について説明します。 XML のバージョンとは関係ありません。
compatibility-matrix.type
必須。この互換性マトリックスのタイプ:
  • "device" : デバイスの互換性マトリックス。
  • "framework" : フレームワーク互換性マトリックス。
manifest.level
フレームワーク互換性マトリックスに必要です。 Android 12 以降では、product および system_ext パーティションのフレームワーク互換性マトリックス ファイルで許可されます。このファイルのフレームワーク互換性マトリックスのバージョン (FCM バージョン) を指定します。これをデバイス固有のフレームワーク互換性マトリックス (つまりDEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ) で宣言しないでください。
compatibility-matrix.hal
オプションで繰り返し可能です。互換性マトリックス (フレームワークまたはデバイス) の所有者が存在する必要がある単一の HAL (HIDL またはネイティブ) をリストします。 HAL エントリは<name>要素によって区別されます。同じ名前の HAL エントリが複数存在する可能性があります (「and」条件を意味します)。
compatibility-matrix.hal.format
オプション。値は次のいずれかになります。
  • "hidl" : HIDL HAL。これがデフォルトです。
  • "aidl" : AIDL HAL 。互換性マトリックスのメタバージョン 2.0 でのみ有効です。
  • "native" : ネイティブ HAL。
compatibility-matrix.hal.optional
属性はオプションであり、デフォルトは false です。この HAL が互換性マトリックス (フレームワークまたはデバイス) の所有者にとってオプションであるかどうかを示します。 <hal>エントリがオプションとしてマークされている場合、所有者はこの HAL が存在する場合は操作できますが、この HAL が存在する必要はないことを意味します。
compatibility-matrix.hal.name
必須。この HAL の完全なパッケージ名。例:
  • android.hardware.camera (HIDL または AIDL HAL)
  • GLES (ネイティブ HAL、名前のみが必要)
compatibility-matrix.hal.version
互換性マトリックス (フレームワークまたはデバイス) の所有者が期待するバージョンを定義するバージョン範囲のリスト ( 「 HAL の一致 」を参照)。

HIDL およびネイティブ HAL の場合は、必須であり、重複することなく繰り返すことができます。形式は次のいずれかです。
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR ( MAJOR . MINOR - MINORに相当)

AIDL HAL の場合、Android 11 以前を実行しているデバイスには存在しないでください。新しいバージョンを実行しているデバイスではオプションです。指定した場合、形式は次のいずれかになります。
  • VERSION_MIN - VERSION_MAX
  • VERSION ( VERSION - VERSIONに相当)
指定しない場合、値はデフォルトの1になります。
compatibility-matrix.hal.interface
オプションで繰り返し可能です。この HAL に必要なインターフェイスのリスト。
compatibility-matrix.hal.interface.name
必須。インターフェースの名前。
compatibility-matrix.hal.interface.instance
オプションで繰り返し可能です。このインターフェースの必要なインスタンスのリスト。
compatibility-matrix.hal.interface.regex-instance
オプションで繰り返し可能です。このインターフェースで必要なインスタンス名パターンのリスト。拡張正規表現形式を使用します。
compatibility-matrix.kernel
オプションで繰り返し可能です。フレームワークが各カーネル バージョンで必要とするカーネル構成のリストを指定します。
同じ<version>を持つ複数の<kernel>存在して、「and」関係を示すことができます。各<kernel> <conditions>満たされた場合にのみ有効になる要件の「断片」です。
compatibility-matrix.kernel.version
必須。カーネルのバージョン。形式はVERSION . MAJOR_REVISION . MINOR_REVISION 。バージョンとメジャー リビジョンは正確に一致する必要があります。マイナー リビジョンは、フレームワークが期待するカーネルの最小 LTS バージョンを定義します。
compatibility-matrix.kernel.condition
オプション。各バージョンの最初の<kernel>には存在してはなりません。条件のリストを指定します。条件が満たされると、この<kernel>フラグメントに記載されている要件が有効になります。
compatibility-matrix.kernel.config
オプションで繰り返し可能です。このカーネル バージョンに一致する必要があるCONFIG項目をリストします。各CONFIG項目はキーと値のペアです。設定項目はキーによって区別されます。
compatibility-matrix.kernel.config.key
必須。 CONFIG項目のキー名。 CONFIG_で始まります。
compatibility-matrix.kernel.config.value
必須。 CONFIG項目の値。形式はタイプによって異なります。
  • string 。引用符は省略されています。
  • int . 10 進値と 16 進値 ( 0xまたは0X)の値が受け入れられます。 64 ビット整数として解釈されます。オーバーフローの場合は切り捨てが行われます。 (パーサーは -2 64 + 1 から 2 64 - 1 までの値を受け入れます。65 番目のビットは切り捨てられます。詳細については、 strtoull のマニュアル ページを参照してください。)
  • range 。形式は[int]-[int] 、たとえば10-20です。 16 進値が受け入れられ、 0xまたは0Xで始まる必要があります。 2 つの境界は符号なし 64 ビット整数である必要があります。
  • tristate 。有効な値はym 、およびnです。
compatibility-matrix.kernel.config.value.type
必須。 CONFIG項目の値のタイプ。次のいずれかです。
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
必須。すべての sepolicy 関連のエントリが含まれます。フレームワーク互換性マトリックスによってのみ使用されます。
compatibility-matrix.sepolicy.sepolicy-version
必須、繰り返し可能。 sepolicy バージョンの要件について説明します。 manifest.sepolicy.versionに対応します。要素の各インスタンスは、sepolicy バージョンの範囲を定義します。
compatibility-matrix.sepolicy.kernel-sepolicy-version
必須。フレームワークが動作するpolicydbバージョンを宣言します。
compatibility-matrix.avb.vbmeta-version
オプション。フレームワーク互換性マトリックスによってのみ使用されます。 system.img署名に使用されるAVB バージョンを宣言します。 Android 10 では非推奨になりました。
compatibility-matrix.vendor-ndk
オプション。デバイス互換性マトリックスによってのみ使用されます。 VNDK ベンダー スナップショットの要件を宣言します。欠落している場合、システム イメージに対する VNDK 要件は作成されません。
compatibility-matrix.vendor-ndk.version
必須。ベンダー イメージに必要な VNDK バージョンを宣言する正の整数。
compatibility-matrix.vendor-ndk.library
オプションで繰り返し可能です。ベンダー イメージに必要な VNDK ライブラリのセットを宣言します。 manifest.vendor-ndk.libraryと同じセマンティクス。
compatibility-matrix.system-sdk.version
オプションで繰り返し可能です。デバイス互換性マトリックスによってのみ使用されます。システム SDK バージョンに関するベンダー アプリの要件を宣言します。欠落している場合、システム イメージに対してシステム SDK 要件は作成されません。