Matrizes de compatibilidade

Esta seção descreve o framework e as matrizes de compatibilidade de dispositivo e o esquema de matriz de compatibilidade. Para regras de correspondência, consulte Correspondência Regras.

Matriz de compatibilidade de framework (FCM, na sigla em inglês)

A matriz de compatibilidade de framework (FCM, na sigla em inglês) descreve os requisitos da no dispositivo em que é executado. A matriz de compatibilidade do framework consiste no sistema a matriz de compatibilidade, a matriz de compatibilidade do produto e a matriz de compatibilidade do system_ext. Os requisitos do FCM precisam ser atendidos pelo manifesto do dispositivo (requisitos aplicada no tempo de build, no ambiente de execução e no VTS).

O system_ext FCM e o FCM do produto são complementos do FCM específicos do dispositivo (instalados na partição do sistema).

  • O FCM do dispositivo precisa refletir os requisitos dos módulos no partição do sistema.
  • O FCM system_ext deve refletir os requisitos por módulos na partição system_ext.
  • O FCM do produto precisa refletir os requisitos por módulos no partição do produto.

Todos os FCMs devem estar alinhados com as modificações de um OEM na estrutura de trabalho do sistema, do produto e system_ext. Por exemplo, se um app instalado na partição do produto usar uma extensão de fornecedor de uma interface HAL, o requisito de interface HAL deve ser declarado no do produto FCM.

Exemplo de arquivo de matriz de compatibilidade do sistema:

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

Para mais detalhes, consulte FCM Lifecycle.

Matriz de compatibilidade do produto

O FCM do produto é um arquivo de matriz de compatibilidade de framework no produto partição. O objeto VINTF une o FCM do produto a FCMs no system e system_ext. partições diferentes no ambiente de execução.

Exemplo de arquivo do FCM do produto:

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

Matriz de compatibilidade system_ext

O system_ext FCM é um arquivo de matriz de compatibilidade de framework no system_ext partição. O objeto VINTF une o FCM system_ext a FCMs no sistema e no produto partições diferentes no ambiente de execução. Consulte a matriz de compatibilidade do produto para um exemplo de arquivo system_ext do FCM.

Matriz de compatibilidade do dispositivo (DCM)

A matriz de compatibilidade do dispositivo descreve um conjunto de requisitos que o dispositivo espera da estrutura (requisitos aplicados no lançamento e no momento da OTA).

Exemplo de arquivo do 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>

Esquema de matriz de compatibilidade

Esta seção descreve o significado dessas tags XML. Alguma informação "obrigatória" tags pode estar ausente no arquivo de origem na árvore de origem do Android e gravados por assemble_vintf no momento da criação. "Obrigatório" tags devem estar presentes nos arquivos correspondentes no dispositivo.

?xml
Opcional. Ele só fornece informações para o analisador XML.
compatibility-matrix.version
Obrigatório. Metaversão dessa matriz de compatibilidade. Descreve os elementos esperado na matriz de compatibilidade. Não tem relação com a versão do XML.
compatibility-matrix.type
Obrigatório. Tipo dessa matriz de compatibilidade:
  • "device": matriz de compatibilidade de dispositivos.
  • "framework": matriz de compatibilidade do framework.
manifest.level
Obrigatório para a matriz de compatibilidade do framework. No Android 12 e versões mais recentes, permitido nos arquivos de matriz de compatibilidade do framework nas partições product e system_ext. Especifica a Versão da matriz de compatibilidade de framework (Versão do FCM) deste arquivo. Não declarar na matriz de compatibilidade do framework específico do dispositivo (ou seja, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE).
compatibility-matrix.hal
Opcional e pode ser repetido. Lista um único HAL (HIDL ou nativo) que é exigidos pelo proprietário da matriz de compatibilidade (framework ou dispositivo) seja presente. As entradas de HAL são diferenciadas por um elemento <name>. pode haver várias entradas HAL com o mesmo nome (implica a condição "e").
compatibility-matrix.hal.format
Opcional. O valor pode ser um dos seguintes:
  • "hidl": HALs HIDL. Esse é o padrão.
  • "aidl": HALs da AIDL. Válido somente na metaversão 2.0 da matriz de compatibilidade.
  • "native": HALs nativas.
compatibility-matrix.hal.optional
O atributo é opcional, e o padrão é "false". Indica se a HAL é opcional para o proprietário da matriz de compatibilidade (framework ou dispositivo). Se um A entrada <hal> está marcada como opcional. Isso significa que o proprietário pode funciona com essa HAL, se houver, mas não precisa que ela esteja presente.
compatibility-matrix.hal.name
Obrigatório. Nome completo do pacote dessa HAL. Exemplos:
  • android.hardware.camera (HAL de HIDL ou AIDL)
  • GLES (HAL nativa, requer apenas o nome)
compatibility-matrix.hal.version
Uma lista de intervalos de versões (consulte correspondências de HAL) que defina quais versões o proprietário da matriz de compatibilidade (framework ou dispositivo) espera.

Para HIDL e HALs nativas, necessárias, podem se repetir sem cópias. O formato é um dos seguintes:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (equivalente a MAJOR.MINOR-MINOR).
.
Para HALs da AIDL, não podem estar presentes em dispositivos com Android 11 e anteriores. Opcional em dispositivos que executam versões posteriores. Se especificado, o formato será um dos seguintes:
  • VERSION_MIN-VERSION_MAX
  • VERSION (equivalente a VERSION-VERSION).
. Se não for especificado, o valor padrão será 1.
compatibility-matrix.hal.interface
Opcional, pode repetir. Uma lista das interfaces necessárias para essa HAL.
compatibility-matrix.hal.interface.name
Obrigatório. Nome da interface.
compatibility-matrix.hal.interface.instance
Opcional, pode repetir. Uma lista de instâncias obrigatórias dessa interface.
compatibility-matrix.hal.interface.regex-instance
Opcional, pode repetir. Uma lista de padrões de nome de instâncias obrigatórios neste interface gráfica do usuário. Usar Estendido formato de expressão regular.
compatibility-matrix.kernel
Opcional, pode repetir. especificar uma lista de configurações do kernel que o framework necessário em cada versão do kernel.
Várias <kernel> com o mesmo <version> podem existem para implicar "e" relação. Cada <kernel> é um "fragmento". dos requisitos que são ativados apenas quando <conditions> são atendidas.
compatibility-matrix.kernel.version
Obrigatório. Versão do kernel. O formato é VERSION.MAJOR_REVISION.MINOR_REVISION: A versão e a revisão principal devem ser exatamente iguais. Uma pequena revisão define a versão mínima de LTS do kernel esperado pelo framework.
compatibility-matrix.kernel.condition
Opcional. Não pode existir para o primeiro <kernel> de cada para a versão anterior. Especifica uma lista de condições. Quando as condições são atendidas, os requisitos estabelecidos nesse fragmento de <kernel> estão ativados.
compatibility-matrix.kernel.config
Opcional, pode repetir. Lista CONFIG itens que precisam ser correspondentes para esta versão do kernel. Cada item CONFIG é uma chave-valor. par; os itens de configuração são diferenciados pela chave.
compatibility-matrix.kernel.config.key
Obrigatório. Nome da chave do item CONFIG. Começa com CONFIG_:
compatibility-matrix.kernel.config.value
Obrigatório. Valor do item CONFIG. O formato depende do tipo:
  • string: As aspas são omitidas.
  • int: decimal e hexadecimal (precisa começar com 0x). ou 0X) serão aceitos. Interpretado como um número inteiro de 64 bits. os estouros resultam em truncamento. O analisador aceita valores de -264 + 1 para 264 - 1, o 65o bit é truncado. para mais detalhes, consulte Strtoull página do manual.
  • range: O formato é [int]-[int], por exemplo: 10-20 Os valores hexadecimais são aceitos e devem começar com 0x ou 0X. Dois limites precisam ser um arquivo de 64 bits não assinado inteiro.
  • tristate: Os valores válidos são y, m e n.
compatibility-matrix.kernel.config.value.type
Obrigatório. Tipo de valor do item CONFIG, uma das seguintes opções:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Obrigatório. Contém todas as entradas relacionadas a sepolicy. Usado apenas pelo matriz de compatibilidade de framework.
compatibility-matrix.sepolicy.sepolicy-version
Obrigatório, pode ser repetido. Descreve o requisito da versão do sepolicy. Corresponde a manifest.sepolicy.version. Cada instância de um define um intervalo de versões sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Obrigatório. Declara a versão policydb em que o framework funciona. a criar.
compatibility-matrix.avb.vbmeta-version
Opcional usada apenas pela matriz de compatibilidade do framework. Declara o AVB versão usada para assinar system.img. Descontinuado no Android 10 –
compatibility-matrix.vendor-ndk
Opcional usada apenas pela matriz de compatibilidade do dispositivo. Declara o requisito do snapshot do fornecedor de VNDK. Se ausente, nenhum requisito de VNDK é feito. na imagem do sistema.
compatibility-matrix.vendor-ndk.version
Obrigatório. Um número inteiro positivo que declara uma versão do VNDK exigida pelo imagem do fornecedor.
compatibility-matrix.vendor-ndk.library
Opcional, pode repetir. Declara um conjunto de bibliotecas VNDK exigidas pelo imagem do fornecedor. Mesma semântica de manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Opcional, pode repetir usada apenas pela matriz de compatibilidade do dispositivo. Declara os requisitos dos apps dos fornecedores nas versões do SDK do sistema. Se ausente, não há SDK do sistema é feito na imagem do sistema.