O Android 11 é compatível com artefatos de compilação de instantâneos do VNDK e instantâneos de fornecedores, que podem ser usados para compilar o vendor.img
independentemente da versão do Android na árvore de origem. Isso permite versões mistas de imagens, como um fornecedor mais antigo e uma imagem de sistema mais recente.
As versões de imagens mistas não são compatíveis com o seguinte.
Android.mk.
Como Soong gera o instantâneo do fornecedor, os módulos definidos noAndroid.mk
não são capturados como um instantâneo do fornecedor (os módulos proprietários do SoC noAndroid.mk
também não têm garantia de funcionamento).Desinfetante. Os instantâneos do fornecedor e do VNDK não oferecem suporte ao desinfetante, pois as variantes do desinfetante precisam ser criadas separadamente.
Sobre instantâneos de fornecedores
Um instantâneo de fornecedor é um instantâneo de propriedade do OEM. É um conjunto de módulos C++ pré-construídos instalados em /vendor
mas mantidos em AOSP. Sem capturar um instantâneo do fornecedor da versão anterior do Android, a atualização para uma nova versão do Android pode quebrar a partição do fornecedor porque os módulos de instantâneo do fornecedor podem ser removidos ou alterados sem compatibilidade com API ou ABI.
Um instantâneo do fornecedor contém os seguintes módulos no AOSP.
- Bibliotecas compartilhadas, estáticas e de cabeçalho com
vendor: true
ouvendor_available: true
- Bibliotecas estáticas do VNDK com
vendor_available: true
- Executáveis e arquivos de objeto com
vendor: true
ouvendor_available: true
Os módulos nos diretórios a seguir são considerados código de hardware de propriedade do SoC e são ignorados.
-
device/
-
vendor/
-
hardware/
, exceto para-
hardware/interfaces
-
hardware/libhardware
-
hardware/libhardware_legacy
-
Os códigos de hardware de propriedade do SoC também podem existir em outros diretórios. No momento, os instantâneos de fornecedores não oferecem suporte a essas configurações.
Criação de instantâneos de fornecedores
Crie um instantâneo do fornecedor usando os comandos a seguir.
. build/envsetup.sh
lunch target
m dist vendor-snapshot
Esses comandos criam um arquivo vendor-$(TARGET_DEVICE).zip
em $DIST_DIR
. O exemplo abaixo mostra um arquivo ZIP de instantâneo do fornecedor.
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- Os arquivos JSON contêm sinalizadores como nome do módulo, diretórios exportados, arquivos
init_rc
e arquivosvintf_fragments
. - O diretório
configs
contém arquivos.rc
e.xml
dos sinalizadoresinit_rc
evintf_fragments
.
Instalando snapshots de fornecedores
Para instalar um snapshot de fornecedor, navegue até o diretório de destino e use os comandos a seguir.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VER
Este comando gera /vendor/ vendor name /vendor_snapshot/v VER /$(TARGET_ARCH)/Android.bp
. O exemplo a seguir mostra a estrutura de diretórios de um instantâneo de fornecedor.
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
Criando imagens de fornecedores
Usando artefatos de compilação de instantâneo do VNDK e um instantâneo de fornecedor, você pode compilar vendor.img
independentemente da versão do Android na árvore de origem, possibilitando a criação de versões mistas de imagens. Depois de instalar o snapshot do VNDK e o snapshot do fornecedor, defina BOARD_VNDK_VERSION
para a versão do fornecedor. Por exemplo:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Quando BOARD_VNDK_VERSION
é definido com um valor diferente de current
, o sistema de compilação:
- Ativa os módulos de snapshot do VNDK e os módulos de snapshot do fornecedor de
BOARD_VNDK_VERSION
. Cada módulo de instantâneo substitui um módulo de origem C++ com o mesmo nome. - Define
ro.vndk.version
comoBOARD_VNDK_VERSION
. - Instala módulos de snapshot VNDK de
BOARD_VNDK_VERSION
emsystem_ext
.