Önceden oluşturulmuş ABI kullanım denetleyicisi

Android paylaşılan kitaplıkları zaman zaman değişir. Önceden oluşturulmuş ikili dosyaları güncel tutmak önemli bir çaba gerektirir. Android 9 veya önceki sürümlerde, yalnızca kaldırılan kitaplıklara ya da ABI'lere bağlı olan önceden oluşturulmuş ikili dosyalar yalnızca çalışma zamanında bağlantı oluşturamaz. Geliştiricilerin, güncel olmayan önceden oluşturulmuş 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 önceden oluşturulmuş ikili dosyaları algılayabilir. Böylece paylaşılan kitaplık geliştiricileri, hangi önceden oluşturulmuş ikili dosyaların değişikliklerinden etkilenebileceğini ve hangi önceden oluşturulmuş ikili dosyaların yeniden oluşturulması gerektiğini bilebilir.

Sembole dayalı ABI kullanım denetleyicisi

Sembol tabanlı ABI kullanımı denetleyicisi, ana makinede Android dinamik bağlayıcısını taklit eder. Denetleyici, önceden oluşturulmuş ikiliyi önceden oluşturulmuş ikilinin bağımlılıklarıyla bağlar ve tanımlanmamış tüm sembollerin çözülüp çözülmediğini kontrol eder.

Öncelikle, kontrol aracı önceden oluşturulmuş ikilinin hedef mimarisini kontrol eder. Önceden oluşturulmuş ikili dosya ARM, AArch64, x86 veya x86-64 mimarisini hedeflemiyorsa denetleyici, önceden oluşturulmuş ikili dosyayı atlar.

İkincisi, önceden oluşturulmuş ikili programı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 aracı DT_NEEDED girişlerini LOCAL_SHARED_LIBRARIES veya shared_libs ile karşılaştırır. Özellikle, kontrol aracı her paylaşılan kitaplıktan DT_SONAME girişini çıkarır ve bu DT_SONAME girişlerini önceden oluşturulmuş ikili dosyada kayıtlı DT_NEEDED girişleriyle karşılaştırır. Uyuşmazlık varsa hata mesajı verilir.

Dördüncüsü, kontrol aracı önceden oluşturulmuş ikili dosyadaki tanımlanmamış sembolleri çözer. Tanımsız semboller, bağımlılıklardan birinde tanımlanmalı ve sembol bağlama GLOBAL veya WEAK olmalıdır. Tanımlanmamış bir sembol çözümlenemezse hata mesajı verilir.

Hazır modül özellikleri

Önceden oluşturulmuş 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 oluşturulmuş ikili dosya, çözülemeyen tanımlanmamış semboller içerecek şekilde tasarlanmışsa aşağıdakilerden birini belirtin:

  • Android.bp: allow_undefined_symbols: true,
  • Android.mk: LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

Önceden oluşturulmuş ikili dosyanın ELF dosyası kontrolünü atlaması 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 tüm ELF önceden oluşturulmuş modüllerini kapsar.

Daha hızlı geri dönüş süreleri için denetleyiciyi tek başına çalıştırmak üzere:

m check-elf-files

ABI hata düzeltici

Otomatik düzeltici, ABI kontrolü hatalarını çözmenize yardımcı olabilir. Düzelticiyi Android.bp / Android.mk ile girdi olarak çalıştırmanız yeterlidir. Düzeltici, önerilen düzeltmeyi stdout'a yazdırır. İsteğe bağlı olarak, düzelticiyi --in-place seçeneğiyle çalıştırarak Android.bp / Android.mk dosyasını önerilen düzeltmeyle doğrudan güncelleyebilirsiniz.

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>