O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Verificador de uso de ABI pré-construído

As bibliotecas compartilhadas do Android evoluem de tempos em tempos. Manter os binários pré-construídos atualizados requer um esforço considerável. No Android 9 ou anterior, os binários pré-construídos que dependem de bibliotecas removidas ou ABIs só falham ao vincular em tempo de execução. Os desenvolvedores precisam rastrear os logs para encontrar os binários pré-construídos desatualizados. No Android 10, um verificador de uso de ABI baseado em símbolo é introduzido. O verificador pode detectar binários pré-construídos desatualizados em tempo de construção, para que os desenvolvedores de bibliotecas compartilhadas possam saber quais binários pré-construídos podem ser quebrados por sua mudança e quais binários pré-construídos devem ser reconstruídos.

Verificador de uso de ABI baseado em símbolo

O verificador de uso de ABI baseado em símbolo emula o vinculador dinâmico do Android no host. O verificador vincula o binário pré-construído às dependências do binário pré-construído e verifica se todos os símbolos indefinidos foram resolvidos.

Primeiro, o verificador verifica a arquitetura de destino do binário pré-construído. Se o binário pré-construído não tiver como alvo a arquitetura ARM, AArch64, x86 ou x86-64, o verificador ignora o binário pré-construído.

Em segundo lugar, as dependências do binário pré-construídos devem ser listados em LOCAL_SHARED_LIBRARIES ou shared_libs . O sistema de construção resolve os nomes de módulos para a variante de correspondência (ie core vs. vendor ) das bibliotecas compartilhadas.

Em terceiro lugar, o verificador compara os DT_NEEDED entradas para LOCAL_SHARED_LIBRARIES ou shared_libs . Em particular, o verificador extrai o DT_SONAME entrada de cada bibliotecas compartilhadas e compara estes DT_SONAME com as DT_NEEDED entradas registadas no binário pré-construídos. Se houver uma incompatibilidade, uma mensagem de erro será emitida.

Quarto, o verificador resolve os símbolos indefinidos no binário pré-construído. Esses símbolos indeterminado deve ser definido em uma das dependências e o símbolo de ligação deve ser GLOBAL ou WEAK . Se um símbolo indefinido não puder ser resolvido, uma mensagem de erro será emitida.

Propriedades do módulo pré-construídas

As dependências do binário pré-construído devem ser especificadas em um dos seguintes:

  • Android.bp: shared_libs: ["libc", "libdl", "libm"],
  • Android.mk: LOCAL_SHARED_LIBRARIES := libc libdl libm

Se o binário pré-construídos é projetado para ter alguns símbolos indefinidos insolúveis, especifique uma das seguintes opções:

  • Android.bp: allow_undefined_symbols: true,
  • Android.mk: LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

Para que o binário pré-construído ignore a verificação do arquivo ELF, especifique um dos seguintes:

  • Android.bp: check_elf_files: false,
  • Android.mk: LOCAL_CHECK_ELF_FILES := false

Execute o verificador

O verificador cobre todos os módulos pré-construídos ELF durante o processo de compilação do Android.

Para executar o verificador sozinho para tempos de resposta mais rápidos:

m check-elf-files

ABI error fixer

O fixador automático pode ajudar a resolver erros de verificação de ABI. Simplesmente execute o fixador com o Android.bp / Android.mk como entrada, e o fixador imprimirá a correção sugerida para stdout. Opcionalmente, execute o fixador com o --in-place opção para atualizar diretamente o Android.bp / Android.mk com a correção sugerida.

Para Android.bp,

m fix_android_bp_prebuilt
# Print the fixed Android.bp to stdout.
fix_android_bp_prebuilt <path-to-Android.bp>
# Update the Android.bp in place.
fix_android_bp_prebuilt --in-place <path-to-Android.bp>

Para Android.mk,

m fix_android_mk_prebuilt
# Print the fixed Android.mk to stdout.
fix_android_mk_prebuilt <path-to-Android.mk>
# Update the Android.mk in place.
fix_android_mk_prebuilt --in-place <path-to-Android.mk>