Android paylaşılan kitaplıkları zaman zaman gelişir. Önceden derlenmiş ikili dosyaları güncel tutmak için önemli miktarda çaba gerekir. Android 9 veya önceki sürümlerde, kaldırılan kitaplıklara veya ABI'lere bağlı önceden oluşturulmuş ikili programlar yalnızca çalışma zamanında bağlanamaz. Geliştiricilerin, güncel olmayan önceden derlenmiş ikili dosyaları bulmak için günlükleri izlemesi gerekir. Android 10'da, sembol tabanlı bir ABI kullanım denetleyicisi kullanıma sunulmuştur. Kontrol aracı, derleme sırasında eski hazır ikili dosyaları algılayabilir. Böylece, paylaşılan kitaplık geliştiricileri hangi hazır ikili dosyaların değişiklikleri nedeniyle bozulabileceğini ve hangi hazır ikili dosyaların yeniden derlenmesi gerektiğini bilebilir.
Semble dayalı ABI kullanım kontrol aracı
Semble dayalı ABI kullanım denetleyicisi, ana makinede Android dinamik bağlayıcıyı taklit eder. Denetleyici, önceden derlenmiş ikili dosyayı önceden derlenmiş ikili dosyanın bağımlılıklarıyla bağlar ve tanımlanmamış tüm sembollerin çözülüp çözülmediğini kontrol eder.
Doğrulayıcı ilk olarak önceden derlenmiş ikili dosyanın hedef mimarisini kontrol eder. Önceden derlenmiş ikili dosya ARM, AArch64, x86 veya x86-64 mimarisini hedeflemiyorsa denetleyici, önceden derlenmiş ikili dosyayı atlar.
İkinci olarak, önceden derlenmiş ikili dosyanın bağımlılıkları LOCAL_SHARED_LIBRARIES
veya shared_libs
içinde listelenmelidir. Derleme sistemi, modül adlarını paylaşılan kitaplıkların eşleşen varyantına (ör. core
ve vendor
) çözümler.
Üçüncü olarak, kontrolör DT_NEEDED
girişlerini LOCAL_SHARED_LIBRARIES
veya shared_libs
ile karşılaştırır. Özellikle de denetleyici, her paylaşılan kitaplıktaki DT_SONAME
girişini ayıklayıp bu DT_SONAME
girişlerini önceden derlenmiş ikili dosyaya kaydedilen DT_NEEDED
girişleriyle karşılaştırır. Eşleşme yoksa bir hata mesajı gösterilir.
Dördüncü olarak, doğrulayıcı, önceden derlenmiş ikili dosyada tanımlanmamış sembolleri çözer.
Tanımlanmamış bu simgeler bağımlılıklardan birinde tanımlanmalı ve simge bağlaması GLOBAL
veya WEAK
olmalıdır. Tanımlanmamış bir simge çözülemezse bir hata mesajı gönderilir.
Hazır modül özellikleri
Önceden derlenmiş 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 derlenmiş ikili, bazı çözümlenemeyen tanımlanmamış simgelere sahip olacak şekilde tasarlandıysa aşağıdakilerden birini belirtin:
- Android.bp:
allow_undefined_symbols: true,
- Android.mk:
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
Önceden derlenmiş ikili programın ELF dosyası kontrolünü atlamasını sağlamak için aşağıdakilerden birini belirtin:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
Denetleyiciyi çalıştırma
Denetleyiciyi çalıştırmak için CHECK_ELF_FILES
ortam değişkenini true
olarak ayarlayın ve make check-elf-files
'yi çalıştırın:
CHECK_ELF_FILES=true make check-elf-files
Denetleyiciyi varsayılan olarak etkinleştirmek için PRODUCT_CHECK_ELF_FILES
değerini BoardConfig.mk
değerine ekleyin:
PRODUCT_CHECK_ELF_FILES := true
Önceden derlenmiş paketler, Android'in derleme işlemi sırasında otomatik olarak kontrol edilir:
make