Como executar o monitoramento ABI

Esta seção descreve como criar representações ABI do kernel do Android e executar o monitoramento ABI. É aplicável ao Android 14 (AOSP experimental) e superior. Para versões mais antigas, consulte Versões de kernel mais antigas .

Consulte também a documentação de referência para Kleaf: Monitoramento de suporte ABI (GKI) e Monitoramento de suporte ABI (dispositivo) .

Construa o kernel e sua representação ABI

Depois de baixar as fontes GKI, execute o seguinte comando para criar o kernel GKI e os artefatos ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

Este comando constrói a representação ABI atual e a copia para out_abi/kernel_aarch64/dist/abi.stg junto com o kernel e os módulos construídos.

Você pode especificar argumentos extras para as ferramentas ABI no final do comando após -- . Por exemplo, para alterar o destino da ABI e criar artefatos, você pode usar a opção --dist_dir :

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

Analise as diferenças de ABI entre a construção e uma representação de referência

O destino //common:kernel_aarch64_abi_dist , executado no comando acima, analisa e relata quaisquer diferenças de ABI encontradas entre a construção e a representação de referência localizada em common/android/abi_gki_aarch64.stg (definido em BUILD.bazel ). Essas diferenças serão impressas ao final do build, conforme 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 construção localizado em out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short juntamente com relatórios em outros formatos.

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

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

Atualize a representação ABI de referência

Qualquer alteração 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/android/abi_gki_aarch64.stg , definida em BUILD.bazel ). Para fazer isso, você precisa executar o seguinte comando:

​​tools/bazel run //common:kernel_aarch64_abi_update

Este comando executa tudo na etapa Analisar as diferenças de ABI e também atualiza a representação de referência nas fontes. A ABI atualizada pode então ser carregada no mesmo commit da alteração. Inclua as diferenças de ABI do relatório em $DIST_DIR/abi.report.short na mensagem de confirmação.

Monitoramento de ABI e alvos de dispositivos

O monitoramento ABI só precisa ser configurado para alvos de compilação do kernel principal. As configurações de compilação mista (aquelas que definem base_kernel ) que compilam diretamente com o kernel GKI precisam apenas adicionar suporte para rastrear a lista de símbolos do dispositivo . A definição da ABI deve ser atualizada usando a compilação GKI.

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

Versões mais antigas do kernel

Androide 13

As instruções de compilação são basicamente as mesmas do Android 14 (AOSP experimental), exceto que o formato ABI é XML e a representação ABI de referência é common/android/abi_gki_aarch64.xml .

Android 12 e inferior

Como no Android 13, o formato ABI é XML.

Kernels mais antigos usam build.sh em vez de Kleaf. Para monitoramento ABI, você deve usar build_abi.sh , que aceita as mesmas variáveis ​​de ambiente para customizar a compilação como build.sh . Por exemplo:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Isso constrói o kernel e extrai a representação ABI no subdiretório OUT_DIR (que é out_abi por padrão) e é equivalente ao destino //common:kernel_aarch64_abi_dist do Kleaf (consulte Construir kernel e artefatos ABI ).

A representação 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 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 existente e uma ABI recém-gerada.

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