Gotowe narzędzie do sprawdzania zastosowań ABI

Biblioteki udostępnione Androida co jakiś czas się zmieniają. Przechowywanie gotowych plików binarnych wymaga niezłych starań. Na Androidzie wersji 9 lub starszej, możesz użyć gotowych plików binarnych, które zależą usunięte biblioteki lub interfejsy ABI nie łączą się tylko w czasie działania. Deweloperzy muszą prześledzić w logach nieaktualne pliki binarne. Na Androidzie 10, wprowadzono oparty na symbolach narzędzie do sprawdzania zastosowań ABI. Kontroler może wykrywać nieaktualne pliki binarne w czasie kompilacji, aby udostępniać programistów bibliotek, wiedząc, które gotowe pliki binarne mogą być uszkodzone przez oraz które gotowe pliki binarne należy utworzyć ponownie.

Oparty na symbolach wskaźnik wykorzystania interfejsu ABI

Oparty na symbolach mechanizm sprawdzania użycia ABI emuluje dynamiczny tag łączący Androida na hosta. Moduł sprawdzania łączy gotowy plik binarny z zależnościami zbioru danych gotowy plik binarny i sprawdza, czy wszystkie niezdefiniowane symbole są rozwiązane.

Najpierw narzędzie sprawdza architekturę docelową gotowego pliku binarnego. Jeśli gotowy plik binarny nie jest kierowany na ARM, AArch64, x86 ani x86-64 architektura, moduł sprawdzania pomija gotowy plik binarny.

Po drugie: zależności gotowego pliku binarnego LOCAL_SHARED_LIBRARIES lub shared_libs. Kompilacja system rozpozna nazwy modułów pasujące do wariantu (tzn. core kontra vendor) z bibliotek udostępnionych.

Po trzecie, narzędzie porównuje wpisy DT_NEEDED z LOCAL_SHARED_LIBRARIES lub shared_libs. W szczególności narzędzie do sprawdzania wyodrębnia wpis DT_SONAME z każdego udostępnionego i porównuje te DT_SONAME z Wpisy zarejestrowane w gotowym pliku binarnym: DT_NEEDED. Jeśli występuje niezgodność oznacza, że jest wyświetlany komunikat o błędzie.

Po czwarte, narzędzie sprawdza niezdefiniowane symbole w gotowym pliku binarnym. Te niezdefiniowane symbole muszą być zdefiniowane w jednej z zależności i tagu wiązanie symboli musi mieć wartość GLOBAL lub WEAK. Jeśli nie można rozpoznać niezdefiniowanego symbolu, pojawia się komunikat o błędzie.

Właściwości gotowego modułu

Zależności tego pliku binarnego muszą być określone w jednej :

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

Jeśli gotowy plik binarny ma nierozstrzygnięte nieokreślone symbole, określ jeden z tych parametrów:

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

Aby gotowy plik binarny pomijał sprawdzanie pliku ELF, podaj jeden z :

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

Uruchamianie sprawdzania

Aby uruchomić sprawdzanie, ustaw zmienną środowiskową Od CHECK_ELF_FILES do true i biegaj make check-elf-files:

CHECK_ELF_FILES=true make check-elf-files

Aby domyślnie włączyć sprawdzanie, dodaj PRODUCT_CHECK_ELF_FILES do użytkownika BoardConfig.mk:

PRODUCT_CHECK_ELF_FILES := true

Gotowe kompilacje są automatycznie sprawdzane podczas kompilacji Androida:

make