Esta seção descreve as matrizes de compatibilidade do framework e do dispositivo e o esquema da matriz de compatibilidade. Para regras de correspondência, consulte Regras de correspondência.
Matriz de compatibilidade do framework (FCM, na sigla em inglês)
A matriz de compatibilidade do framework (FCM, na sigla em inglês) descreve os requisitos do framework no dispositivo em que ele é executado. A matriz de compatibilidade do framework consiste na matriz de compatibilidade do sistema, na matriz de compatibilidade do produto e na matriz de compatibilidade do system_ext. Os requisitos do FCM precisam ser atendidos pelo manifesto do dispositivo (requisitos aplicados no momento do build, no ambiente de execução e no VTS).
O FCM system_ext e o FCM do produto são complementos do FCM específico do dispositivo (instalado na partição do sistema).
- O FCM do dispositivo precisa refletir os requisitos dos módulos na partição do sistema.
- O FCM system_ext precisa refletir os requisitos por módulos na partição system_ext.
- O FCM do produto precisa refletir os requisitos por módulos na partição do produto.
Todos os FCMs precisam estar alinhados com as modificações de um OEM no framework nas partições do sistema, do produto e do system_ext. Por exemplo, se um app instalado na partição do produto usar uma extensão do fornecedor de uma interface HAL, o requisito da interface HAL precisará 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 Ciclo de vida do FCM.
Matriz de compatibilidade de produtos
O FCM do produto é um arquivo de matriz de compatibilidade do framework na partição do produto. O objeto VINTF une o FCM do produto com os FCMs nas partições do sistema e do system_ext no momento da 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 do system_ext
O FCM system_ext é um arquivo de matriz de compatibilidade do framework na partição system_ext. O objeto VINTF une o FCM system_ext com FCMs nas partições do sistema e do produto no momento de execução. Consulte a matriz de compatibilidade de produtos para conferir 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 do framework (requisitos aplicados no lançamento e no tempo de 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 da matriz de compatibilidade
Esta seção descreve o significado dessas tags XML. Algumas tags "required"
podem estar ausentes do arquivo de origem na árvore de origem do Android e serem gravadas por
assemble_vintf
no momento da build. As tags "Required" precisam estar presentes nos arquivos correspondentes no
dispositivo.
?xml
- Opcional. Ele só fornece informações para o analisador de XML.
compatibility-matrix.version
- Obrigatório. Metaversão desta matriz de compatibilidade. Descreve os elementos esperados na matriz de compatibilidade. Não está relacionado à versão do XML.
compatibility-matrix.type
- Obrigatório. Tipo desta matriz de compatibilidade:
"device"
: matriz de compatibilidade do dispositivo."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 em arquivos de matriz de compatibilidade do framework nas partições do produto e do system_ext.
Especifica a versão da matriz de compatibilidade do framework (FCM) deste arquivo. Não declare isso
na matriz de compatibilidade do framework específica 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 é
necessário que o proprietário da matriz de compatibilidade (framework ou dispositivo) esteja
presente. As entradas HAL são distinguidas 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 destes:
"hidl"
: HALs do HIDL. Esse é o padrão."aidl"
: HALs AIDL. Válido apenas na metaversão 2.0 da matriz de compatibilidade."native"
: HALs nativos.
compatibility-matrix.hal.optional
(Android 15 ou versões anteriores)
O atributo - é opcional e tem o padrão falso. Indica se essa HAL é
opcional para o proprietário da matriz de compatibilidade (framework ou dispositivo). Se uma
entrada
<hal>
estiver marcada como opcional, significa que o proprietário pode trabalhar com esse HAL, se ele estiver presente, mas não exige que ele esteja presente. - Aviso: esse atributo foi descontinuado após o Android 15 e não tem mais efeito. Se algum HAL precisar ser instalado, esse requisito será aplicado nos testes.
compatibility-matrix.hal.name
- Obrigatório. Nome completo do pacote deste HAL. Exemplos:
android.hardware.camera
(HAL de HIDL ou AIDL)GLES
(HAL nativo, requer apenas o nome)
compatibility-matrix.hal.version
-
Uma lista de intervalos de versões (consulte
Correspondências de HAL)
que define quais versões o proprietário da matriz de compatibilidade (framework ou
dispositivo) espera.
Para HIDL e HALs nativos, obrigatório, pode ser repetido sem duplicações. O formato é um dos seguintes:MAJOR.MINOR_MIN-MINOR_MAX
MAJOR.MINOR
(equivalente aMAJOR.MINOR-MINOR
)
Para HALs AIDL, não pode estar presente em dispositivos com o Android 11 e versões anteriores. Opcional em dispositivos com versões mais recentes. Se especificado, o formato é um dos seguintes:VERSION_MIN-VERSION_MAX
VERSION
(equivalente aVERSION-VERSION
)
1
. compatibility-matrix.hal.interface
- Opcional, pode repetir. Uma lista de interfaces obrigatórias deste 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 obrigatórios nesta interface. Use o formato de expressão regular estendida.
compatibility-matrix.kernel
- Opcional, pode repetir. Especifique uma lista de configurações do kernel que o framework
requer em cada versão do kernel.
Vários<kernel>
com o mesmo<version>
podem existir para implicar uma relação "e". Cada<kernel>
é um "fragmento" dos requisitos que são ativados somente quando<conditions>
são atendidos. 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 precisam ser exatamente iguais. A revisão secundária define a versão mínima do LTS do kernel que o framework espera. compatibility-matrix.kernel.condition
- Opcional. Não pode existir para o primeiro
<kernel>
de cada versão. Especifica uma lista de condições. Quando as condições são atendidas, os requisitos indicados neste fragmento<kernel>
são ativados. compatibility-matrix.kernel.config
- Opcional, pode repetir. Lista os itens
CONFIG
que precisam ser correspondidos para essa versão do kernel. Cada itemCONFIG
é um par de chave-valor. Os itens de configuração são diferenciados por chave. compatibility-matrix.kernel.config.key
- Obrigatório. Nome da chave do item
CONFIG
. Começa comCONFIG_
. compatibility-matrix.kernel.config.value
- Obrigatório. Valor do item
CONFIG
. O formato depende do tipo:string
. Aspas são omitidas.int
. Valores decimais e hexadecimais (precisam começar com0x
ou0X)
são aceitos. Interpretado como um número inteiro de 64 bits; os estouros resultam em truncamento. O analisador aceita valores de -264 + 1 a 264 - 1, o 65º bit é truncado. Para mais detalhes, consulte a página de manual strtoull.range
. O formato é[int]-[int]
, por exemplo,10-20
. Os valores hexadecimais são aceitos e precisam começar com0x
ou0X
. Dois limites precisam ser um número inteiro não assinado de 64 bits.tristate
. Os valores válidos sãoy
,m
en
.
compatibility-matrix.kernel.config.value.type
- Obrigatório. Tipo do valor do item
CONFIG
:string
int
range
tristate
compatibility-matrix.sepolicy
- Obrigatório. Contém todas as entradas relacionadas à política de segurança. Usado apenas pela matriz de compatibilidade do framework.
compatibility-matrix.sepolicy.sepolicy-version
- Obrigatório, pode ser repetido. Descreve o requisito na versão da sepolicy.
Corresponde a
manifest.sepolicy.version
. Cada instância de um elemento define um intervalo de versões de política de segurança. compatibility-matrix.sepolicy.kernel-sepolicy-version
- Obrigatório. Declara a versão do
policydb
com que o framework funciona. compatibility-matrix.avb.vbmeta-version
- Opcional, usado apenas pela matriz de compatibilidade do framework. Declara a
versão
AVB usada para assinar
system.img
. Descontinuado no Android 10. compatibility-matrix.vendor-ndk
- Opcional, usado apenas pela matriz de compatibilidade do dispositivo. Declara o requisito do snapshot do fornecedor do VNDK. Se estiver ausente, nenhum requisito do VNDK será 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 pela imagem do fornecedor.
compatibility-matrix.vendor-ndk.library
- Opcional, pode repetir. Declara um conjunto de bibliotecas do VNDK exigidas pela
imagem do fornecedor. Mesma semântica que
manifest.vendor-ndk.library
. compatibility-matrix.system-sdk.version
- Opcional, pode ser repetido; usado apenas pela matriz de compatibilidade do dispositivo. Declara o requisito por apps do fornecedor nas versões do SDK do sistema. Se estiver ausente, nenhum requisito do SDK do sistema será feito na imagem do sistema.