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