Esta página descreve como criar representações de ABI do kernel do Android e executar o monitoramento de ABI. Isso se aplica ao Android 16 e versões mais recentes. Para versões anteriores, consulte ABI monitor previous kernel versions.
Consulte também a documentação de referência do Kleaf: Suporte ao monitoramento de ABI (GKI) e Suporte ao monitoramento de ABI (dispositivo).
Criar o kernel e a representação da ABI
Depois de baixar as fontes do GKI, execute o seguinte comando para criar o kernel do GKI e os artefatos de ABI:
tools/bazel run //common:kernel_aarch64_abi_dist
Esse comando cria a representação ABI atual e a copia para
$DIST_DIR/abi.stg
junto com o kernel e os módulos criados. O padrão de $DIST_DIR
é out_abi/kernel_aarch64_abi_dist/dist
.
É possível especificar argumentos extras para as ferramentas de ABI no final do comando
depois de --
. Por exemplo, para mudar o destino de ABI e criar artefatos, use a opção --destdir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
Analisar as diferenças de ABI entre o build e uma representação de referência
O destino //common:kernel_aarch64_abi_dist
, executado no comando anterior, analisa e informa as diferenças de ABI encontradas entre o build e a representação de referência localizada em common/gki/aarch64/abi.stg
(definida em BUILD.bazel
). Essas diferenças são impressas no final do build, conforme mostrado no exemplo a seguir:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
O relatório impresso vem do artefato de build localizado em
$DIST_DIR/abi_stgdiff/abi.report.short
, junto com relatórios em outros formatos.
A automação precisa usar o código de saída do comando de build, que é diferente de zero se forem encontradas diferenças.
As ramificações da fase de desenvolvimento, incluindo android-mainline
, não têm uma representação de ABI de referência.
Sem ele, //common:kernel_aarch64_abi_dist
não detecta nenhuma diferença.
Atualizar a representação da ABI de referência
Qualquer mudança que afete a ABI do kernel, como uma
atualização da lista de símbolos,
precisa ser refletida na representação da ABI de referência
(common/gki/aarch64/abi.stg
, definida em
BUILD.bazel).
Para isso, execute o seguinte comando:
tools/bazel run //common:kernel_aarch64_abi_update
Esse comando executa todas as ações da etapa
Analisar as diferenças de ABI e também atualiza a
representação de referência nas fontes. Em seguida, o ABI atualizado pode ser enviado no mesmo commit da mudança. Inclua as diferenças de ABI do relatório em $DIST_DIR/abi_stgdiff/abi.report.short
na mensagem de commit.
Monitoramento de ABI e segmentação por dispositivo
O monitoramento de ABI só precisa ser configurado para destinos de build do kernel principal. Configurações de build
mistas (que definem base_kernel
) que são compiladas diretamente com
o kernel GKI só precisam adicionar suporte para rastrear a lista de símbolos do dispositivo.
A definição de ABI deve ser atualizada usando o build do GKI.
Consulte também a documentação de referência do Kleaf: Suporte ao monitoramento de ABI (dispositivo).
Monitorar ABI de versões anteriores do kernel (Android 15 e versões anteriores)
Para versões anteriores do kernel, as instruções de build e monitoramento da ABI são diferentes, conforme a seguir.
Android 15 e 14
As instruções são praticamente as mesmas do Android 16, exceto que a representação da ABI de referência é common/android/abi_gki_aarch64.stg
e $DIST_DIR
tem como padrão out_abi/kernel_aarch64/dist
.
Android 13
O Android 13 pode ser criado com o Kleaf ou com scripts de build legados.
Para o Kleaf, as instruções são as mesmas do Android 14, exceto que o formato
ABI é XML e a representação ABI de referência é
common/android/abi_gki_aarch64.xml
.
Para scripts de build legados, as instruções são as mesmas do Android 12.
Android 12 e versões anteriores
O formato da ABI é XML, e a representação da ABI de referência é
common/android/abi_gki_aarch64.xml
Esses kernels usam build.sh
em vez de Kleaf. Para o monitoramento de ABI, use
build_abi.sh
, que aceita as mesmas variáveis de ambiente para personalizar o
build que build.sh
. Exemplo:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Isso cria o kernel e extrai a representação da ABI para o subdiretório OUT_DIR
(que é out_abi
por padrão) e é equivalente ao destino //common:kernel_aarch64_abi_dist
do Kleaf. Consulte Criar artefatos de kernel e ABI.
A representação da ABI de referência é armazenada em android/abi_gki_aarch64.xml
, conforme definido pela variável ABI_DEFINITION
em common/build.config.gki.aarch64
.
Se você precisar atualizar a representação da ABI do kernel, a maneira mais conveniente é
usar as opções --update
e --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
O --print-report
imprime as diferenças de ABI entre o arquivo como ele existe
e uma ABI recém-gerada.
A opção --update
substitui a representação da ABI de referência. Ele também faz a atualização da lista de símbolos ao usar BUILD_CONFIG
em um dispositivo com KMI_SYMBOL_LIST
configurado.