Die gemeinsam genutzten Mediatheken von Android werden von Zeit zu Zeit weiterentwickelt. Vordefinierte Binärdateien beibehalten und sie aktuell zu halten, erfordert erheblichen Aufwand. In Android 9 oder älter werden die vordefinierten Binärdateien, die von Entfernte Bibliotheken oder ABIs können nur während der Laufzeit nicht verknüpft werden. Entwickler müssen verfolgen Sie die Logs, um die veralteten vordefinierten Binärdateien zu finden. In Android 10 wird ein symbolbasiertes ABI-Anwendungsprüfungsprogramm eingeführt. Die Prüfung kann bei der Erstellung veraltete vorgefertigte Binärdateien erkennen, sodass freigegebene Bibliotheksentwickler können erkennen, welche vordefinierten Binärprogramme aufgrund ihrer und welche vorgefertigten Binärdateien neu erstellt werden müssen.
Symbolbasierte ABI-Nutzungsprüfung
Die symbolbasierte ABI-Nutzungsprüfung emuliert den dynamischen Link von Android auf Host. Die Prüfung verknüpft die vordefinierte Binärdatei mit den Abhängigkeiten der und prüft, ob alle nicht definierten Symbole aufgelöst wurden.
Zuerst prüft die Prüfung die Zielarchitektur der vordefinierten Binärdatei. Wenn die vordefinierte Binärdatei nicht auf ARM, AArch64, x86 oder x86-64 ausgerichtet ist Architektur enthält, überspringt die Prüfung die vordefinierte Binärdatei.
Zweitens müssen die Abhängigkeiten der vordefinierten Binärdatei im
LOCAL_SHARED_LIBRARIES
oder shared_libs
. Der Build
das System die Modulnamen in die entsprechende Variante (d.h.
core
im Vergleich zu vendor
) der gemeinsam genutzten Bibliotheken.
Drittens vergleicht die Prüfung die DT_NEEDED
-Einträge mit
LOCAL_SHARED_LIBRARIES
oder shared_libs
. Insbesondere
Die Prüfung extrahiert den Eintrag DT_SONAME
aus jedem freigegebenen
und vergleicht diese DT_SONAME
mit den
DT_NEEDED
-Einträge, die in der vordefinierten Binärdatei aufgezeichnet wurden. Wenn es eine
nicht übereinstimmen, wird eine Fehlermeldung ausgegeben.
Viertens löst die Prüfung die nicht definierten Symbole in der vordefinierten Binärdatei auf.
Diese undefinierten Symbole müssen in einer der Abhängigkeiten und im
Symbolbindung muss entweder GLOBAL
oder WEAK
sein. Wenn ein
Undefiniertes Symbol kann nicht aufgelöst werden und es wird eine Fehlermeldung ausgegeben.
Vordefinierte Modulattribute
Abhängigkeiten der vordefinierten Binärdatei müssen in einer der Folgendes:
- Android.bp:
shared_libs: ["libc", "libdl", "libm"],
- Android.mk:
LOCAL_SHARED_LIBRARIES := libc libdl libm
Wenn die vorgefertigte Binärdatei so konzipiert ist, nicht auflösbare nicht definierte Symbole – geben Sie eines der folgenden an:
- Android.bp:
allow_undefined_symbols: true,
- Android.mk:
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
Damit die vordefinierte Binärdatei die Prüfung der ELF-Datei überspringt, geben Sie eine der Folgendes:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
Prüfung ausführen
Um die Prüfung auszuführen, legen Sie die Umgebungsvariable fest
CHECK_ELF_FILES
bis true
und ausgeführt
make check-elf-files
:
CHECK_ELF_FILES=true make check-elf-files
Fügen Sie PRODUCT_CHECK_ELF_FILES
hinzu, um die Prüfung standardmäßig zu aktivieren.
an BoardConfig.mk
:
PRODUCT_CHECK_ELF_FILES := true
Vordefinierte werden während des Android-Build-Prozesses automatisch geprüft:
make