Esta seção descreve como construir representações de ABI do kernel Android e executar o monitoramento de ABI. É aplicável ao Android 14 e superior. 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) .
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 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 construir 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 no final da construção, 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 construção 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 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.
Atualizar a representação de referência da ABI
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 realiza tudo na etapa Analisar as diferenças de ABI e adicionalmente 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 commit.
Monitoramento de ABI e alvos de dispositivos
O monitoramento da ABI só precisa ser configurado para os principais destinos de compilação do kernel. As configurações de compilação mista (aquelas que definem base_kernel
) que compilam diretamente com o kernel GKI só precisam adicionar suporte para rastrear a lista de símbolos do dispositivo . A definição da ABI deve ser atualizada usando a compilação do GKI.
Consulte também a documentação de referência para Kleaf: Suporte ao monitoramento de ABI (dispositivo) .
Versões mais antigas do kernel
Andróide 13
As instruções de construção são basicamente as mesmas do Android 14, exceto que o formato ABI é XML e a representação de referência da ABI é common/android/abi_gki_aarch64.xml
.
Android 12 e inferior
Assim como no Android 13, o formato ABI é XML.
Kernels mais antigos usam build.sh
em vez de Kleaf. Para monitoramento de ABI você deve usar build_abi.sh
, que aceita as mesmas variáveis de ambiente para personalizar a construção que 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 tal como existe e uma ABI recém-gerada.
A opção --update
substitui a representação de referência da ABI. Ele também atualiza a lista de símbolos ao usar BUILD_CONFIG
para um dispositivo com KMI_SYMBOL_LIST
configurado.