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

Android paylaşılan kitaplıkları zaman zaman değişir. Önceden oluşturulmuş ikili programları saklama ve güncellemeye büyük çaba gerekir. Android 9'da veya daha eski sürümler, yalnızca kaldırılan kitaplıklara veya ABI'lere bağlı olan önceden oluşturulmuş ikili programlar bağlantı kurulamıyor. 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, güncel olmayan önceden oluşturulmuş ikili programları algılayabilir Böylece paylaşılan kitaplık geliştiricilerinin, paylaşılan kitaplık geliştiricilerinin hangi önceden ikili programların değişime göre bozulabilir ve önceden oluşturulmuş ikili programların yeniden geliştirildi.

Sembole dayalı 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.

İlk olarak denetleyici, önceden oluşturulmuş ikili programı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, denetleyici DT_NEEDED girişlerini LOCAL_SHARED_LIBRARIES ile karşılaştırır. veya shared_libs. Ö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. girişlere kaydedilir. Uyuşmazlık varsa bir hata mesajı gönderilir.

Dördüncü olarak denetleyici, önceden oluşturulmuş ikili programdaki tanımlanmamış sembolleri çözer. Bu Tanımlanmamış simgeler bağımlılıklardan birinde ve simge bağlama GLOBAL veya WEAK olmalıdır. Tanımlanmamış bir sembol bir hata mesajı görüntülenir.

Önceden oluşturulmuş modül özellikleri

Önceden oluşturulmuş ikili programı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 program, bazı çözünür olmayan sembolleri görüyorsanız 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.

Denetleyiciyi tek başına çalıştırarak geri dönüş sürelerini kısaltmak için:

m check-elf-files

ABI hata düzeltme aracı

Otomatik düzeltici, ABI kontrolü hatalarının çözülmesine yardımcı olabilir. Düzelticiyi şununla birlikte çalıştırın: Android.bp / Android.mk dosyasını kullanır. Düzeltici, önerilen stdout için düzeltme. İsteğe bağlı olarak, düzelticiyi --in-place seçeneğiyle çalıştırın. Android.bp / Android.mk dosyasını önerilen düzeltmeyle doğrudan güncelleyin.

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>