Önceden oluşturulmuş ABI kullanım kontrol aracı

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>