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

VNDK Snapshot Design

Os instantâneos VNDK podem ser usados ​​por uma imagem do sistema para fornecer as bibliotecas VNDK corretas para as imagens do fornecedor, mesmo quando as imagens do sistema e do fornecedor são criadas a partir de versões diferentes do Android. A criação de um instantâneo VNDK requer a captura de bibliotecas VNDK como um instantâneo e sua marcação com um número de versão. A imagem do fornecedor pode ser vinculada a uma versão VNDK específica que fornece ABIs necessários para os módulos na imagem do fornecedor. No entanto, dentro da mesma versão VNDK, as bibliotecas VNDK deve ser ABI-estável .

VNDK instantâneo concepção inclui métodos para gerar a pré-constrói de um instantâneo VNDK a partir da imagem do sistema actual e instalar essas bibliotecas pré-construído para a partição do sistema de uma versão Android mais recente.

Sobre as bibliotecas VNDK

HIDL-HALs , introduzidas no Android 8.0, permite atualizações separadas para partições do sistema e de fornecedores. VNDK define conjuntos de bibliotecas (VNDK-core, VNDK-SP e LL-NDK) com as quais o código do fornecedor pode se vincular e impede que os fornecedores usem bibliotecas que não estejam em um conjunto VNDK. Como resultado, a imagem do fornecedor pode ser construída e executada se os conjuntos VNDK adequados na imagem do sistema forem fornecidos para a imagem do fornecedor.

VNDK-core

O conjunto VNDK-core de bibliotecas está instalado em /system/lib[64]/vndk-${VER} e está disponível apenas para processos do fornecedor com o nível API igual a ${VER} . Os processos do sistema não pode utilizar estas bibliotecas e deve em vez disso utilizar as bibliotecas instaladas no /system/lib[64] . Por causa da restrição estrita de namespace para cada processo, as bibliotecas VNDK-core estão protegidas contra carregamento duplo.

Para incluir uma biblioteca em VNDK-core, adicione o seguinte ao Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Bibliotecas VNDK-SP são instalados em /system/lib[64]/vndk-sp-${VER} e estão disponíveis para processos de fornecedor e processos do sistema (através das bibliotecas SP-HAL instalados na partição do fornecedor). As bibliotecas VNDK-SP podem ser carregadas duplamente.

Para incluir uma biblioteca em VNDK-SP, adicione o seguinte ao Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Bibliotecas LL-NDK são instalados em /system/lib[64] . Módulos de fornecedores podem usar bibliotecas stub LL-NDK para acessar símbolos pré-selecionados de bibliotecas LL-NDK. As bibliotecas LL-NDK devem ser compatíveis com versões anteriores e estáveis ​​com ABI para permitir que versões antigas dos módulos do fornecedor usem novas versões das bibliotecas LL-NDK. Devido às características estáveis ​​de ABI do LL-NDK, o instantâneo VNDK não precisa incluir bibliotecas LL-NDK para imagens de fornecedores antigos.

Sobre instantâneos de VNDK

Android 8.1 inclui bibliotecas VNDK construído a partir do código fonte . No entanto, para versões posteriores do Android, cada versão do VNDK deve ser capturada como um instantâneo e fornecida como uma pré-construção para permitir o link para uma imagem de fornecedor mais antiga.

A partir do Android 9, as novas versões do Android incluirão pelo menos um instantâneo dos diretórios VNDK-core e VNDK-SP para versões mais antigas no código-fonte do Android. Em tempo de compilação, instantâneos necessários serão instalados para /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER} (diretórios que podem ser usados pelo fornecedor partição), onde ${VER} é a variável de cadeia que representa o nome da versão do instantâneo VNDK.

Como o VNDK instantâneo bibliotecas podem ser diferentes para cada versão VNDK, o VNDK também instantâneo inclui as configurações vinculador namespace, instalados como etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt e /etc/vndksp.libraries.${VER}.txt .

Exemplo: atualização do sistema e imagens do fornecedor

Nenhum instantâneo necessário; construir sem configurações adicionais para instantâneos VNDK.

Exemplo: atualizando apenas a imagem do sistema

Deve incluir o instantâneo VNDK e os arquivos de configuração do namespace do vinculador para a imagem do fornecedor na imagem do sistema. Os arquivos de configuração de ligação de namespace são automaticamente configurados para procurar bibliotecas VNDK em /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER} .

A figura única do sistema 1. Upgrade

Exemplo: atualização da imagem do sistema, pequena alteração da imagem do fornecedor

A construção de uma imagem do fornecedor com base em um instantâneo VNDK ainda não é suportada, portanto, você deve construir a imagem do fornecedor separadamente com seu código-fonte original e, em seguida, atualizar a imagem do sistema conforme descrito no exemplo anterior.

Arquitetura de instantâneo VNDK

Para tornar uma imagem do sistema Android 9 compatível com uma imagem do fornecedor do Android 8.1, o instantâneo VNDK que corresponde à imagem do fornecedor do Android 8.1 deve ser fornecido com a imagem do sistema Android 9, conforme mostrado abaixo:

Arquitetura Figura 2. VNDK instantâneo

O design de instantâneo VNDK inclui os seguintes métodos:

  • Gerar um instantâneo para bibliotecas VNDK-core e VNDK-SP. O Android 9 inclui um script que você pode usar para fazer um instantâneo da versão atual do VNDK. Este script feixes todas as bibliotecas em /system/lib[64]/vndk-28 e /system/lib[64]/vndk-sp-28 que foram construídos com a fonte de corrente como um instantâneo VNDK, onde 28 é a versão VNDK de Android 9. O instantâneo inclui também os arquivos de configuração de ligação de namespace /etc/ld.config.28.txt , /etc/llndk.libraries.28.txt e /etc/vndksp.libraries.28.txt . O instantâneo gerado será usado com versões mais recentes do Android (superior ao Android 9).
  • Instalando bibliotecas VNDK-core e VNDK-SP pré-construída a partir de um instantâneo. No Android 9, um instantâneo VNDK tem um conjunto de bibliotecas VNDK-core pré-construídas e um conjunto de bibliotecas VNDK-SP, bem como arquivos de configuração de namespace de linker. Quando você fornece uma lista de versões VNDK instantâneo para ser instalado, em tempo de compilação, a imagem do sistema instala o VNDK instantâneo bibliotecas para /system/lib[64]/vndk-${VER} e /system/lib[64]/vndk-sp-${VER} diretórios e arquivos de configuração de ligação de namespace para esses instantâneos VNDK para /etc diretório.

Controle de versão VNDK

Cada versão do Android tem apenas um instantâneo VNDK e a versão SDK é usada como uma versão VNDK (o que significa que a versão VNDK tem um número inteiro, como 27 para Android 8.1). A versão VNDK é corrigida quando a versão Android é lançada. A versão VNDK usado pela partição fornecedor é automaticamente armazenada na ro.vndk.version propriedade, que podem ser lidos em tempo de execução. Essa versão é então usada para identificar a versão do VNDK do fornecedor para algumas bibliotecas e para identificar a versão do instantâneo do VNDK para a configuração do namespace.

Construindo bibliotecas VNDK

O make vndk comando constrói bibliotecas que têm vndk: { enabled: true, … } , incluindo dependências e arquivos de configuração namespace. Se BOARD_VNDK_VERSION := current está definido, essas bibliotecas são construídas com o make de comando.

Como essa compilação não instala as bibliotecas VNDK do instantâneo, as bibliotecas VNDK instaladas não são estáveis ​​para ABI. No entanto, quando uma versão do Android é lançada, o ABI para a versão atual do VNDK é corrigido. Neste ponto, qualquer quebra de ABI é um erro de compilação, portanto, os patches para a versão do Android não devem alterar a ABI para bibliotecas VNDK.