Controllo utilizzi ABI predefinito

Le librerie condivise di Android si evolvono di tanto in tanto. Mantenere i programmi binari predefiniti la modifica richiede un notevole impegno. Su Android 9 o precedenti, i file binari predefiniti le librerie o le ABI rimosse non riescono a collegarsi solo in fase di runtime. Gli sviluppatori devono monitorare i log per trovare file binari predefiniti obsoleti. Su Android 10, viene introdotto un controllo degli utilizzi di ABI basato su simboli. Il controllo è in grado di rilevare file binari predefiniti obsoleti al momento della creazione, in modo che gli sviluppatori di librerie possono sapere quali file binari predefiniti potrebbero essere interrotti dai loro modificare e quali file binari predefiniti devono essere ricreati.

Controllo degli utilizzi di ABI basato su simboli

Il controllo dell'utilizzo di ABI basato su simboli emula il Linker dinamico Android su . Il controllo collega il programma binario predefinito alle dipendenze binario predefinito e verifica se tutti i simboli non definiti sono stati risolti.

Innanzitutto, controlla l'architettura di destinazione del file binario predefinito. Se il file binario predefinito non ha come target ARM, AArch64, x86 o x86-64 Transformer, il controllo ignora il file binario predefinito.

Secondo, le dipendenze del programma binario predefinito devono essere elencate LOCAL_SHARED_LIBRARIES o shared_libs. La build di sistema risolve i nomi dei moduli nella variante corrispondente (ad es. core contro vendor) delle raccolte condivise.

In terzo luogo, il controllo confronta le voci DT_NEEDED con LOCAL_SHARED_LIBRARIES o shared_libs. In particolare, il controllo estrae la voce DT_SONAME da ogni librerie e confronta questi DT_SONAME con DT_NEEDED voci registrate nel file binario predefinito. Se esiste un mancata corrispondenza, viene emesso un messaggio di errore.

In quarto luogo, il controllo risolve i simboli non definiti nel file binario predefinito. Questi simboli non definiti devono essere definiti in una delle dipendenze L'associazione di simboli deve essere GLOBAL o WEAK. Se Impossibile risolvere il simbolo non definito. È stato emesso un messaggio di errore.

Proprietà dei moduli predefiniti

Le dipendenze del programma binario predefinito devono essere specificate in uno dei seguenti:

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

Se il file binario predefinito è progettato per avere simboli non definiti non risolvibili, specifica uno dei seguenti elementi:

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

Per fare in modo che il programma binario predefinito ignori il controllo del file ELF, specifica uno dei seguenti:

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

Esegui il controllo

Per eseguire il controllo, imposta la variabile di ambiente Da CHECK_ELF_FILES a true ed esegui make check-elf-files:

CHECK_ELF_FILES=true make check-elf-files

Per attivare la verifica per impostazione predefinita, aggiungi PRODUCT_CHECK_ELF_FILES a BoardConfig.mk:

PRODUCT_CHECK_ELF_FILES := true

Gli elementi predefiniti vengono controllati automaticamente durante il processo di compilazione di Android:

make