Android paylaşılan kitaplıkları zaman zaman gelişir. Önceden derlenmiş ikili dosyaları güncel tutmak önemli ölçüde ç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ü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. 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.
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 doğrulayıcı, ö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
- vendor
) çözümler.
Üçüncü olarak, kontrolör DT_NEEDED
girişlerini LOCAL_SHARED_LIBRARIES
veya shared_libs
ile karşılaştırır. Özellikle, denetleyici paylaşılan her kitaplıktan DT_SONAME
girişini ayıklar ve bu DT_SONAME
değerini, önceden oluşturulmuş ikili programda kaydedilen DT_NEEDED
girişleriyle karşılaştırır. Uyuşmazlık varsa bir hata mesajı gönderilir.
Dördüncü olarak denetleyici, önceden oluşturulmuş ikili programdaki 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 oluşturulmuş ikili programın ELF dosya 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
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>