Os snapshots do VNDK podem ser usados por uma imagem do sistema para fornecer o VNDK correto. bibliotecas a imagens do fornecedor, mesmo quando as imagens do sistema e do fornecedor são criadas diferentes versões do Android. A criação de um snapshot do VNDK requer a captura Bibliotecas VNDK como um snapshot e a marcação de um número de versão. A a imagem do fornecedor pode ser vinculada a uma versão específica do VNDK que fornece as ABIs necessárias. dos módulos na imagem do fornecedor. No entanto, na mesma versão do VNDK, as bibliotecas do VNDK precisam ser ABI-stable.
O design de snapshots do VNDK inclui métodos para gerando a pré-builds de um instantâneo do VNDK com base na imagem atual do sistema e instalação essas bibliotecas pré-criadas para a partição do sistema de uma versão mais recente do Android.
Sobre as bibliotecas VNDK
HIDL-HALs, introduzidos em O Android 8.0 permite upgrades separados para partições do sistema e do fornecedor. VNDK define conjuntos de bibliotecas (VNDK-core, VNDK-SP e LL-NDK) que o código do fornecedor pode vinculam-se e impede que os fornecedores usem bibliotecas que não estão em um VNDK definido. Como resultado, a imagem do fornecedor pode ser criada e executada se o VNDK adequado na imagem do sistema são fornecidos à imagem do fornecedor.
VNDK-core
O conjunto de bibliotecas do VNDK-core está instalado
/system/lib[64]/vndk-${VER}
e está disponível
apenas para processos do fornecedor com o nível da API igual a
${VER}
. Os processos do sistema não podem usar essas bibliotecas e devem
Em vez disso, use as bibliotecas instaladas em /system/lib[64]
. Devido ao
da restrição de namespace estrita para cada processo, as bibliotecas VNDK-core.
estão protegidos contra o carregamento duplo.
Para incluir uma biblioteca no VNDK-core, adicione o seguinte a
Android.bp
:
vendor_available: true, vndk: { enabled: true, },
VNDK-SP
As bibliotecas VNDK-SP estão instaladas em /system/lib[64]/vndk-sp-${VER}
.
e estão disponíveis para os processos do fornecedor e do sistema (por meio do SP-HAL
bibliotecas instaladas na partição do fornecedor). As bibliotecas VNDK-SP podem ser
carregado duas vezes.
Para incluir uma biblioteca no VNDK-SP, adicione o seguinte a Android.bp
:
vendor_available: true, vndk: { enabled: true, support_system_process: true, },
LL-NDK
As bibliotecas do LL-NDK estão instaladas em /system/lib[64]
. Módulos do fornecedor
pode usar bibliotecas de stub do LL-NDK para acessar símbolos pré-selecionados do LL-NDK
bibliotecas. As bibliotecas do LL-NDK precisam ser compatíveis com versões anteriores e estáveis ao ABI para
permite que versões antigas dos módulos do fornecedor usem novas versões de bibliotecas do LL-NDK.
Devido às características estáveis à ABI do LL-NDK, o snapshot do VNDK
não é necessário incluir bibliotecas do LL-NDK para imagens de fornecedores antigos.
Sobre os snapshots do VNDK
O Android 8.1 inclui VNDK bibliotecas criadas usando o código-fonte. No entanto, para versões posteriores Android, cada versão do VNDK precisa ser capturada como um snapshot e fornecida como um pré-criada para permitir a vinculação a uma imagem de fornecedor mais antiga.
A partir do Android 9, as novas versões do Android
inclua pelo menos um snapshot dos diretórios VNDK-core e VNDK-SP para versões mais antigas.
no código-fonte do Android. No tempo de build, os snapshots necessários
instalado em /system/lib[64]/vndk-${VER}
e
/system/lib[64]/vndk-sp-${VER}
(diretórios que podem ser usados por
a partição do fornecedor), em que ${VER}
é a variável de string que
representa o nome da versão do snapshot do VNDK.
Como as bibliotecas de snapshots do VNDK podem ser diferentes para cada versão do VNDK, o VNDK pode
também inclui as configurações de namespace do vinculador, instaladas como
etc/ld.config.${VER}.txt
,
/etc/llndk.libraries.${VER}.txt
e
/etc/vndksp.libraries.${VER}.txt
Exemplo: fazer upgrade do sistema e do fornecedor imagens
Nenhum snapshot necessário. build sem configurações extras para o VNDK snapshots.
Exemplo: fazer upgrade apenas da imagem do sistema
É necessário incluir os arquivos de configuração de snapshot do VNDK e de namespace do vinculador para
a imagem do fornecedor na imagem do sistema. Os arquivos de configuração de namespace do vinculador
são configurados automaticamente para pesquisar bibliotecas VNDK em
/system/lib[64]/vndk-${VER}
e
/system/lib[64]/vndk-sp-${VER}
.
Exemplo: upgrade da imagem do sistema, pequena mudança na imagem do fornecedor
Ainda não é possível criar uma imagem de fornecedor com base em um snapshot do VNDK, portanto você precisa criar a imagem do fornecedor separadamente com o código-fonte original e, em seguida, atualizar a imagem do sistema conforme descrito no exemplo anterior.
Arquitetura de snapshots do VNDK
Para tornar uma imagem do sistema Android 9 compatível com um Imagem do fornecedor do Android 8.1, o snapshot do VNDK que corresponde ao Android 8.1 a imagem do fornecedor precisa ser fornecida com o Android 9 imagem do sistema, conforme mostrado abaixo:
O design de snapshots do VNDK inclui os seguintes métodos:
- Como gerar um snapshot para o VNDK-core e o VNDK-SP
bibliotecas. O Android 9 inclui um script que você
pode usar para fazer um snapshot do build atual do VNDK. Este script agrupa tudo
bibliotecas em
/system/lib[64]/vndk-28
e/system/lib[64]/vndk-sp-28
que foram criados com a versão atual origem como um snapshot do VNDK, em que28
é a versão do VNDK do Android 9. O resumo também inclui o vinculador os arquivos de configuração do namespace/etc/ld.config.28.txt
,/etc/llndk.libraries.28.txt
e/etc/vndksp.libraries.28.txt
O snapshot gerado vai ser usado com versões mais recentes do Android (mais recentes que o Android 9). - A instalação de bibliotecas VNDK-core e VNDK-SP pré-criadas de um
snapshot. No Android 9, um snapshot de VNDK tem
um conjunto de bibliotecas VNDK-core pré-criadas e um conjunto de bibliotecas VNDK-SP, bem como
como arquivos de configuração de namespace do vinculador. Ao fornecer uma lista de VNDK
versões do snapshot a serem instaladas, no tempo de build, a imagem do sistema é instalada
as bibliotecas de snapshots do VNDK para
/system/lib[64]/vndk-${VER}
e os diretórios/system/lib[64]/vndk-sp-${VER}
e o vinculador os arquivos de configuração do namespace para os snapshots do VNDK para/etc
.
Controle de versão do VNDK
Cada versão do Android tem apenas um snapshot de VNDK, e a versão do SDK é usada como
uma versão do VNDK, o que significa que a versão do VNDK tem um número inteiro, como 27
para Android 8.1). A versão do VNDK é corrigida quando a versão do Android é
lançado. A versão do VNDK usada pela partição do fornecedor é armazenada
automaticamente na propriedade ro.vndk.version
, que pode ser lida
no ambiente de execução. Essa versão é usada para identificar a versão do VNDK do fornecedor
para algumas bibliotecas e identificar a versão do snapshot do VNDK para o namespace
configuração do Terraform.
Criar bibliotecas VNDK
O comando make vndk
cria bibliotecas que têm vndk:
{ enabled: true, … }
, incluindo dependências e namespace
de configuração do Terraform. Se BOARD_VNDK_VERSION := current
estiver definido,
Essas bibliotecas são criadas com o comando make
.
Como essa compilação não instala as bibliotecas VNDK do snapshot, o As bibliotecas VNDK instaladas não são estáveis para ABI. No entanto, quando uma versão do Android for lançado, a ABI da versão atual do VNDK será corrigida. Neste ponto, A falha de ABI é um erro de build, portanto, os patches para a versão do Android não podem mudar a ABI das bibliotecas do VNDK.