Önceden oluşturulmuş ABI kullanım denetleyicisi

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>