O Android 11 oferece suporte ao build de snapshot do VNDK
artefatos
e snapshots do fornecedor, que podem ser usados para criar vendor.img
, independentemente da
Versão do Android na árvore de origem. Isso permite versões mistas de imagens, como
como um fornecedor mais antigo
e uma imagem do sistema mais recente.
As versões de imagens mistas não são compatíveis com as seguintes funções:
Android.mk.
Como o Soong gera o snapshot do fornecedor, os módulos definidos emAndroid.mk
não são capturados como um resumo do fornecedor (módulos próprios SoC em nem garantias de queAndroid.mk
funcionará.Limpador. Os snapshots do fornecedor e do VNDK não têm suporte para limpador como limpador e variantes precisam ser criadas separadamente.
Sobre os snapshots do fornecedor
Um snapshot do fornecedor é um snapshot de propriedade do OEM. É um conjunto de módulos C++ pré-criados
instalado no /vendor
, mas mantido no AOSP. Sem capturar um fornecedor
instantâneo da versão anterior do Android, atualizando para uma nova versão do Android
pode interromper a partição do fornecedor porque os módulos de snapshot do fornecedor podem ser removidos
ou alterados sem compatibilidade com API ou ABI.
Um snapshot de 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
. - Arquivos executáveis e de objetos com
vendor: true
ouvendor_available: true
Os módulos nos diretórios a seguir são considerados códigos de hardware de propriedade do SoC. e são ignorados.
device/
vendor/
hardware/
, exceto parahardware/interfaces
hardware/libhardware
hardware/libhardware_legacy
Os códigos de hardware de propriedade do SoC também podem existir em outros diretórios. Neste momento, os snapshots do fornecedor não aceitam essas configurações.
Criar snapshots do fornecedor
Crie um snapshot de 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 a seguir mostra um arquivo ZIP de snapshot 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 sinalizações como nome do módulo, diretórios exportados,
arquivos
init_rc
evintf_fragments
. - O diretório
configs
contém arquivos.rc
e.xml
das sinalizaçõesinit_rc
evintf_fragments
.
Instalar snapshots do fornecedor
Para instalar um snapshot de fornecedor, navegue até o diretório de destino e use o comandos a seguir.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VER
Esse comando gera
/vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp
:
O exemplo a seguir mostra a estrutura de diretórios de um snapshot 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)
Criar imagens de fornecedores
Como usar o build de snapshot do VNDK
artefatos
e um snapshot do fornecedor, é possível criar vendor.img
independente da versão
mais recente na árvore de origem, possibilitando a criação de versões mistas da
de imagens de contêiner. Depois de instalar os snapshots do VNDK e do fornecedor, defina
BOARD_VNDK_VERSION
à versão do fornecedor. Exemplo:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
Quando BOARD_VNDK_VERSION
é definido como um valor diferente de current
, o build
sistema:
- Ativa os módulos de snapshot do VNDK e os módulos de snapshots do fornecedor de
BOARD_VNDK_VERSION
: Cada módulo de snapshot modifica um módulo de origem C++ com o mesmo nome. - Define
ro.vndk.version
comoBOARD_VNDK_VERSION
. - Instala os módulos de snapshot do VNDK de
BOARD_VNDK_VERSION
parasystem_ext
.