O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Matrizes de Compatibilidade

Esta seção descreve as matrizes de enquadramento e compatibilidade de dispositivos e o esquema matriz de compatibilidade . Para regras de jogo, veja regras de correspondência .

Matriz de compatibilidade de estrutura (FCM)

A matriz de compatibilidade da estrutura (FCM) descreve os requisitos da estrutura no dispositivo em que é executado. A matriz de compatibilidade quadro consiste na matriz de compatibilidade do sistema, a matriz de compatibilidade do produto , e a matriz de compatibilidade system_ext . Os requisitos do FCM devem ser atendidos pelo manifesto do dispositivo (requisitos aplicados no tempo de construção, tempo de execução e no VTS).

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

  • A FCM dispositivo deve refletir as exigências dos módulos na partição do sistema .
  • O FCM system_ext deve refletir os requisitos por módulos na partição system_ext.
  • A FCM produto deve refletir as exigências por módulos na partição do produto .

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

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 produto FCM é um arquivo de matriz de compatibilidade de estrutura na partição do produto. O objeto VINTF une o produto FCM com FCMs nas partições system e system_ext no tempo de execução.

Exemplo de arquivo 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 estrutura na partição system_ext. O objeto VINTF une o system_ext FCM aos FCMs no sistema e nas partições do produto no tempo de execução. Veja matriz de compatibilidade do produto para um exemplo system_ext arquivo FCM.

Matriz de compatibilidade de dispositivo (DCM)

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

Exemplo de arquivo 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. Alguns "necessária" tags podem estar faltando do arquivo de origem na árvore fonte do Android e escrito por assemble_vintf em tempo de compilação. As tags "obrigatórias" devem estar presentes nos arquivos correspondentes no dispositivo.

?xml
Opcional. Ele apenas fornece informações para o analisador XML.
compatibility-matrix.version
Obrigatório. Meta-versão desta matriz de compatibilidade. Descreve os elementos esperados na matriz de compatibilidade. Não relacionado à versão XML.
compatibility-matrix.type
Obrigatório. Tipo desta matriz de compatibilidade:
  • "device" : matriz de compatibilidade de dispositivo.
  • "framework" : matriz de compatibilidade Framework.
manifest.level
Obrigatório para a matriz de compatibilidade da estrutura. No Android 12 e superior, permitido em arquivos de matriz de compatibilidade de framework nas partições product e system_ext. Especifica a versão da matriz de compatibilidade da estrutura (versão FCM) deste arquivo. Não declarar isso na matriz de compatibilidade quadro específico do dispositivo (ie DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Opcional e pode repetir. Lista um único HAL (HIDL ou nativo) que é exigido pelo proprietário da matriz de compatibilidade (estrutura ou dispositivo) para estar presente. Entradas HAL são distinguidos por um <name> elemento; 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" : HAL HIDL. Este é o padrão.
  • "aidl" : AIDL HAL . Válido apenas na meta-versão 2.0 da matriz de compatibilidade.
  • "native" : HAL nativas.
compatibility-matrix.hal.optional
O atributo é opcional e o padrão é falso. Indica se este HAL é opcional para o proprietário da matriz de compatibilidade (estrutura ou dispositivo). Se um <hal> entrada é marcada como opcional, isso significa que o proprietário pode trabalhar com este HAL, se presente, mas não exige que ele seja presente.
compatibility-matrix.hal.name
Obrigatório. Nome completo do pacote deste HAL. Exemplos:
  • android.hardware.camera (HIDL ou AIDL HAL)
  • GLES (HAL nativa, requer apenas o nome)
compatibility-matrix.hal.version
A lista de intervalos de versão (ver partidas HAL ) que define quais versões o proprietário da matriz de compatibilidade (quadro ou dispositivo) espera.

Para HIDL e HALs nativos, necessário, pode repetir sem duplicatas. O formato é um dos seguintes:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (equivalente a MAJOR . MINOR - MINOR )

Para AIDL HALs, não deve estar presente em dispositivos que executam o Android 11 e anterior. Opcional em dispositivos que executam versões posteriores. Se especificado, o formato é um dos seguintes:
  • VERSION_MIN - VERSION_MAX
  • VERSION (equivalente a VERSION - VERSION )
Se não especificado, o valor padrão é 1 .
compatibility-matrix.hal.interface
Opcional, pode repetir. Uma lista de interfaces necessárias para este HAL.
compatibility-matrix.hal.interface.name
Obrigatório. Nome da interface.
compatibility-matrix.hal.interface.instance
Opcional, pode repetir. Uma lista de instâncias necessárias desta interface.
compatibility-matrix.hal.interface.regex-instance
Opcional, pode repetir. Uma lista de padrões de nome de instância necessários nesta interface. Use expressões regulares estendida formato.
compatibility-matrix.kernel
Opcional, pode repetir. Especifique uma lista de configurações do kernel que a estrutura requer em cada versão do kernel.
Multiple <kernel> com o mesmo <version> pode existir implicar "e" relacionamento. Cada <kernel> é um "fragmento" dos requisitos que só são ativadas quando <conditions> são cumpridas.
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 corresponder exatamente. A revisão secundária define a versão LTS mínima do kernel que o framework espera.
compatibility-matrix.kernel.condition
Opcional. Não deve existir para o primeiro <kernel> de cada versão. Especifica uma lista de condições. Só quando estiverem reunidas as condições são os requisitos previstos nesta <kernel> fragmento está habilitado.
compatibility-matrix.kernel.config
Opcional, pode repetir. Listas CONFIG itens que devem ser combinadas para esta versão do kernel. Cada CONFIG item é um par chave-valor; os itens de configuração são diferenciados por chave.
compatibility-matrix.kernel.config.key
Obrigatório. Nome da chave do CONFIG item. Começa com CONFIG_ .
compatibility-matrix.kernel.config.value
Obrigatório. Valor do CONFIG item. O formato depende do tipo:
  • string . As citações são omitidas.
  • int . Decimal e hexadecimal (deve começar com 0x ou 0X) valores são aceitos. Interpretado como um número inteiro de 64 bits; transbordamentos resultam em truncamento. (Analisador aceita valores de -2 64 + 1-2 64-1, 65 bits é truncado; para detalhes ver a página homem strtoull .)
  • range . O formato é [int]-[int] , por exemplo, 10-20 . Valores hexadecimais são aceitos e deve começar com 0x ou 0X . Dois limites devem ser um número inteiro de 64 bits sem sinal.
  • tristate . Os valores válidos são y , m e n .
compatibility-matrix.kernel.config.value.type
Obrigatório. Tipo do valor do CONFIG item, um dos seguintes:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Obrigatório. Contém todas as entradas relacionadas a sepolicy. Usado apenas pela matriz de compatibilidade do framework.
compatibility-matrix.sepolicy.sepolicy-version
Obrigatório, pode repetir. Descreve o requisito na versão sepolicy. Corresponde à manifest.sepolicy.version . Cada instância de um elemento define um intervalo de versões de sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Obrigatório. Declara o policydb versão do quadro trabalha.
compatibility-matrix.avb.vbmeta-version
Opcional; usado apenas pela matriz de compatibilidade do framework. Declara a versão AVB usado para assinar system.img . Obsoleto no Android 10.
compatibility-matrix.vendor-ndk
Opcional; usado apenas pela matriz de compatibilidade do dispositivo. Declara o requisito do instantâneo do fornecedor VNDK. Se ausente, nenhum requisito VNDK é feito na imagem do sistema.
compatibility-matrix.vendor-ndk.version
Obrigatório. Um número inteiro positivo que declara uma versão VNDK exigida pela imagem do fornecedor.
compatibility-matrix.vendor-ndk.library
Opcional, pode repetir. Declara um conjunto de bibliotecas VNDK exigidas pela imagem do fornecedor. Mesma semântica como manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
Opcional, pode repetir; usado apenas pela matriz de compatibilidade do dispositivo. Declara o requisito de aplicativos do fornecedor nas versões do SDK do sistema. Se ausente, nenhum requisito do SDK do sistema é feito na imagem do sistema.