호환성 매트릭스

이 섹션에서는 프레임워크 및 기기 호환성 매트릭스와 호환성 매트릭스 체계에 관해 설명합니다. 매칭 규칙은 매칭 규칙을 참고하세요.

프레임워크 호환성 매트릭스(FCM)

프레임워크 호환성 매트릭스(FCM)는 프레임워크가 실행되는 기기에 관한 프레임워크 요구사항을 설명합니다. 프레임워크 호환성 매트릭스는 시스템 호환성 매트릭스와 제품 호환성 매트릭스, system_ext 호환성 매트릭스로 구성됩니다. FCM의 요구사항은 기기 매니페스트에서 충족되어야 합니다(빌드 시간과 런타임에, 그리고 VTS에서 요구사항 적용됨).

system_ext FCM과 제품 FCM은 시스템 파티션에 설치된 기기별 FCM을 보완합니다.

  • 기기 FCM은 시스템 파티션의 모듈 요구사항을 반영해야 합니다.
  • system_ext FCM은 system_ext 파티션의 모듈 요구사항을 반영해야 합니다.
  • 제품 FCM은 제품 파티션의 모듈 요구사항을 반영해야 합니다.

모든 FCM은 시스템, 제품 및 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 이상에서는 제품 및 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 이하를 실행하는 기기에 있으면 안 됩니다. 이후 버전을 실행하는 기기에서는 선택사항입니다. AIDL HAL을 지정했다면 형식은 다음 중 하나입니다.
  • 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
선택사항입니다. 반복할 수 있습니다. 프레임워크가 각 커널 버전에 관해 요구하는 커널 config 목록을 지정합니다.
<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 항목은 키-값 쌍이며, config 항목이 키로 구분됩니다.
compatibility-matrix.kernel.config.key
필수사항입니다. CONFIG 항목의 키 이름입니다. CONFIG_로 시작합니다.
compatibility-matrix.kernel.config.value
필수사항입니다. CONFIG 항목의 값입니다. 형식은 유형에 따라 다릅니다.
  • string. 따옴표는 생략됩니다.
  • int. 소수 및 16진수(0x 또는 0X)로 시작해야 함) 값이 허용됩니다. 64비트 정수로 해석되며 오버플로가 잘립니다. (파서는 -264 + 1 ~ 264 - 1의 값을 허용하며, 65번째 비트가 잘립니다. 자세한 내용은 strtoull man 페이지를 참고하세요.)
  • range. 형식은 [int]-[int](예: 10-20)입니다. 16진수 값이 허용되며 0x 또는 0X로 시작해야 합니다. 두 경계는 부호 없는 64비트 정수여야 합니다.
  • tristate. 유효한 값은 y, m, 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 요구사항이 시스템 이미지에 적용되지 않습니다.