Android paylaşımlı kitaplıkları zaman zaman gelişir. Önceden oluşturulmuş ikili dosyaları güncel tutmak önemli çaba gerektirir. Android 9 veya önceki sürümlerde, kaldırılan kitaplıklara veya ABI'lere bağlı olan önceden oluşturulmuş ikili dosyalar yalnızca çalışma zamanında bağlantı kuramaz. Geliştiricilerin, eski, önceden oluşturulmuş ikili dosyaları bulmak için günlükleri izlemesi gerekir. Android 10'da sembol tabanlı bir ABI kullanım denetleyicisi tanıtıldı. Denetleyici, güncel olmayan önceden oluşturulmuş ikili dosyaları derleme sırasında algılayabilir; böylece paylaşılan kitaplık geliştiricileri, hangi önceden oluşturulmuş ikili dosyaların değişiklik nedeniyle bozulabileceğini ve hangi önceden oluşturulmuş ikili dosyaların yeniden oluşturulması gerektiğini bilebilir.
Sembol tabanlı ABI kullanım denetleyicisi
Sembol tabanlı ABI kullanım denetleyicisi, ana bilgisayardaki Android dinamik bağlayıcıyı taklit eder. Denetleyici, önceden oluşturulmuş ikili dosyayı önceden oluşturulmuş ikili dosyanın bağımlılıklarıyla bağlar ve tanımlanmamış tüm sembollerin çözümlenip çözümlenmediğini kontrol eder.
İlk olarak denetleyici, önceden oluşturulmuş ikili dosyanın hedef mimarisini kontrol eder. Önceden oluşturulmuş ikili dosya ARM, AArch64, x86 veya x86-64 mimarisini hedeflemiyorsa denetleyici önceden oluşturulmuş ikili dosyayı atlar.
İkinci olarak, önceden oluşturulmuş ikili dosyanın bağımlılıkları LOCAL_SHARED_LIBRARIES
veya shared_libs
listelenmelidir. Derleme sistemi, modül adlarını paylaşılan kitaplıkların eşleşen değişkenine (yani core
ve vendor
) çözer.
Üçüncü olarak denetleyici, DT_NEEDED
girişlerini LOCAL_SHARED_LIBRARIES
veya shared_libs
ile karşılaştırır. Özellikle denetleyici, her paylaşılan kitaplıktan DT_SONAME
girişini çıkarır ve bu DT_SONAME
önceden oluşturulmuş ikili dosyada kayıtlı DT_NEEDED
girişleriyle karşılaştırır. Uyumsuzluk olması durumunda bir hata mesajı verilir.
Dördüncüsü, denetleyici önceden oluşturulmuş ikili dosyadaki tanımlanmamış sembolleri çözer. Bu tanımlanmamış semboller bağımlılıklardan birinde tanımlanmalı ve sembol bağlaması GLOBAL
veya WEAK
olmalıdır. Tanımlanmamış bir sembol çözülemezse bir hata mesajı verilir.
Önceden oluşturulmuş modül özellikleri
Önceden oluşturulmuş ikili dosyanın bağımlılıkları aşağıdakilerden birinde belirtilmelidir:
- Android.bp:
shared_libs: ["libc", "libdl", "libm"],
- Android.mk:
LOCAL_SHARED_LIBRARIES := libc libdl libm
Önceden oluşturulmuş ikili dosya bazı çözülemeyen tanımsız sembollere sahip olacak şekilde tasarlanmışsa aşağıdakilerden birini belirtin:
- Android.bp:
allow_undefined_symbols: true,
- Android.mk:
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
Önceden oluşturulmuş ikili programın ELF dosya kontrolünü atlaması için aşağıdakilerden birini belirtin:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
Denetleyiciyi çalıştır
Denetleyiciyi çalıştırmak için CHECK_ELF_FILES
ortam değişkenini true
olarak ayarlayın ve make check-elf-files
çalıştırın:
CHECK_ELF_FILES=true make check-elf-files
Denetleyiciyi varsayılan olarak etkinleştirmek için BoardConfig.mk
PRODUCT_CHECK_ELF_FILES
ekleyin:
PRODUCT_CHECK_ELF_FILES := true
Önceden oluşturulmuş yapılar, Android'in derleme işlemi sırasında otomatik olarak kontrol edilir:
make