Gerar snapshots do fornecedor

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 em Android.mk não são capturados como um resumo do fornecedor (módulos próprios SoC em nem garantias de que Android.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 ou vendor_available: true
  • Bibliotecas estáticas do VNDK com vendor_available: true.
  • Arquivos executáveis e de objetos com vendor: true ou vendor_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 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. 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 e vintf_fragments.
  • O diretório configs contém arquivos .rc e .xml das sinalizações init_rc e vintf_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 como BOARD_VNDK_VERSION.
  • Instala os módulos de snapshot do VNDK de BOARD_VNDK_VERSION para system_ext.