Android paylaşılan kitaplıkları zaman zaman gelişir. Önceden derlenmiş ikili dosyaları güncel tutmak önemli bir çaba gerektirir. Android 9 veya önceki sürümlerde, kaldırılan kitaplıklara veya ABI'lere bağlı önceden derlenmiş ikili dosyalar yalnızca çalışma zamanında bağlanamaz. Geliştiricilerin, güncelliğini yitirmiş dosyaları bulmak için günlükleri izlemeleri gerekir. önceden oluşturulmuş ikili programlardır. Android 10'da sembol tabanlı bir ABI kullanım kontrol aracı kullanıma sunuldu. Denetleyici, 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.
Sembol tabanlı ABI kullanım kontrol aracı
Sembol temelli ABI kullanım denetleyicisi, ana makinede Android dinamik bağlayıcı emülasyonu yapar. Denetleyici, önceden oluşturulmuş ikili programı, önceden oluşturulmuş ikili program yöneticisini kullanır ve tanımlanmamış tüm simgelerin çözümlenip çözümlenmediğini kontrol eder.
Kontrol eden, önceden derlenmiş ikili dosyanın hedef mimarisini kontrol eder. Öğe önceden oluşturulmuş ikili program ARM, AArch64, x86 veya x86-64 mimarisini hedeflemediğinde kontrol aracı önceden oluşturulmuş ikili programı atlar.
İkinci olarak, önceden oluşturulmuş ikili programın bağımlılıkları
LOCAL_SHARED_LIBRARIES
veya shared_libs
. Derleme sistemi, modülü
paylaşılan varyantın (ör. core
- vendor
) adları
kitaplıklar.
Üçüncü olarak, kontrolör DT_NEEDED
girişlerini LOCAL_SHARED_LIBRARIES
veya shared_libs
ile karşılaştırır. Özellikle, denetleyici DT_SONAME
girişini şuradan ayıklar:
her bir paylaşılan kitaplıktan yararlanır ve bu DT_SONAME
öğelerini DT_NEEDED
ile karşılaştırır.
önceden oluşturulmuş ikili programa kaydedilen girişlerdir. Uyuşmazlık varsa bir hata mesajı gönderilir.
Dördüncü olarak, doğrulayıcı, önceden derlenmiş ikili dosyada tanımlanmamış sembolleri çözer. Tanımlanmamış bu semboller bağımlılıklardan birinde tanımlanmalı ve sembol bağlaması GLOBAL
veya WEAK
olmalıdır. Tanımlanmamış bir sembol
bir hata mesajı görüntülenir.
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 oluşturulmuş ikili programın ELF dosya kontrolünü atlamasını sağlamak için takip etmek için:
- Android.bp:
check_elf_files: false,
- Android.mk:
LOCAL_CHECK_ELF_FILES := false
Denetleyiciyi çalıştırma
Denetleyici, Android derleme işlemi sırasında önceden oluşturulmuş tüm ELF modüllerini kapsar.
Daha hızlı geri dönüş süreleri için denetleyiciyi tek başına çalıştırmak istiyorsanız:
m check-elf-files
ABI hata düzeltme aracı
Otomatik düzeltici, ABI kontrolü hatalarının çözülmesine yardımcı olabilir. Düzelticiyi Android.bp/Android.mk dosyası ile çalıştırmanız yeterlidir. Düzeltici, önerilen düzeltmeyi stdout'a yazdırır. İsteğe bağlı olarak, Android.bp/Android.mk dosyasını önerilen düzeltmeyle doğrudan güncellemek için düzelticiyi --in-place
seçeneğiyle çalıştırın.
Android.bp için:
m fix_android_bp_prebuilt
# Print the fixed Android.bp to stdout.
fix_android_bp_prebuilt <path-to-Android.bp>
# Update the Android.bp in place.
fix_android_bp_prebuilt --in-place <path-to-Android.bp>
Android.mk için,
m fix_android_mk_prebuilt
# Print the fixed Android.mk to stdout.
fix_android_mk_prebuilt <path-to-Android.mk>
# Update the Android.mk in place.
fix_android_mk_prebuilt --in-place <path-to-Android.mk>