Como executar o monitoramento de ABI

Esta seção descreve como criar representações de ABI do kernel do Android e executar monitoramento de ABI. Ela se aplica ao Android 14 e mais alto. Para versões mais antigas, consulte Versões mais antigas do kernel.

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 de ABI dele

Depois de fazer o download das fontes de GKI execute o seguinte comando para criar o kernel de GKI e os artefatos da ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

Esse comando compila a representação da ABI atual e a copia para o out_abi/kernel_aarch64/dist/abi.stg com o kernel e os módulos criados.

É possível especificar argumentos extras para as ferramentas da ABI no final do comando. depois de --. Por exemplo, para mudar o destino da ABI e dos artefatos de build, pode usar a opção --dist_dir:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=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 acima, analisa e relata todas as diferenças de ABI encontradas entre o build e a referência localizada em common/android/abi_gki_aarch64.stg (definida no BUILD.bazel (link em inglês). Essas diferenças serã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 out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short junto com relatórios em outros formatos.

A automação deve usar o código de saída do comando de compilação, que será diferente de zero se as diferenças são encontradas.

Observe que fase de desenvolvimento ramificações, incluindo android-mainline, não têm representação ABI de referência. Sem ela, o //common:kernel_aarch64_abi_dist não detecta diferenças.

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 refletido na representação da ABI de referência. (common/android/abi_gki_aarch64.stg, definido no BUILD.bazel). Para fazer isso, execute o seguinte comando:

​​tools/bazel run //common:kernel_aarch64_abi_update

Esse comando realiza tudo na etapa Analise as diferenças da ABI e atualize também a representação de referência nas origens. A ABI atualizada pode ser carregada em o mesmo commit que a alteração. Inclua as diferenças de ABI da relatar em $DIST_DIR/abi.report.short na mensagem de confirmação.

Monitoramento de ABI e destinos de dispositivo

O monitoramento de ABI só precisa ser configurado para os principais destinos de build do kernel. Misto configurações de build (que definem base_kernel) que são compiladas diretamente com o kernel de GKI só precisa adicionar suporte para rastrear a lista de símbolos do dispositivo. A definição da ABI precisa ser atualizada usando o build GKI.

Consulte também a documentação de referência do Kleaf: Suporte ao monitoramento de ABI (dispositivo).

Versões mais antigas do kernel

Android 13

As instruções de criação são basicamente as mesmas Android 14, exceto pelo formato ABI: XML e a representação da ABI de referência será common/android/abi_gki_aarch64.xml.

Android 12 e versões anteriores

Assim como no Android 13, o formato ABI é XML.

Os kernels mais antigos usam build.sh em vez do Kleaf. Para monitoramento de ABI, use build_abi.sh, que aceita as mesmas variáveis de ambiente para personalizar o criar como 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 OUT_DIR (que é out_abi por padrão) e é equivalente aos Destino //common:kernel_aarch64_abi_dist do Kleaf (consulte Crie artefatos de kernel e ABI).

A representação da ABI de referência é armazenada em android/abi_gki_aarch64.xml como definido pela variável ABI_DEFINITION em common/build.config.gki.aarch64.

Se você precisar atualizar a representação ABI do kernel, a maneira mais conveniente é para 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 mostra as diferenças de ABI entre o arquivo atual. e uma ABI recém-gerada.

A opção --update substitui a representação da ABI de referência. Ela também faz as atualização da lista de símbolos ao usar BUILD_CONFIG em um dispositivo com KMI_SYMBOL_LIST configurado.