Önceden oluşturulmuş ABI kullanım denetleyicisi

Android paylaşılan kitaplıkları zaman zaman gelişir. Önceden derlenmiş ikili dosyaları güncel tutmak için önemli miktarda çaba gerekir. Android 9 veya önceki sürümlerde, kaldırılan kitaplıklara veya ABI'lere bağlı önceden oluşturulmuş ikili programlar 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. Kontrol aracı, 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 denetleyici, ö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 ve vendor) çözümler.

Üçüncü olarak, kontrolör DT_NEEDED girişlerini LOCAL_SHARED_LIBRARIES veya shared_libs ile karşılaştırır. Özellikle de denetleyici, her paylaşılan kitaplıktaki DT_SONAME girişini ayıklayıp bu DT_SONAME girişlerini önceden derlenmiş ikili dosyaya kaydedilen DT_NEEDED girişleriyle karşılaştırır. Eşleşme yoksa bir hata mesajı gösterilir.

Dördüncü olarak, doğrulayıcı, önceden derlenmiş ikili dosyada 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 derlenmiş ikili programın ELF dosyası 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

Denetleyiciyi çalıştırmak için CHECK_ELF_FILES ortam değişkenini true olarak ayarlayın ve make check-elf-files'yi çalıştırın:

CHECK_ELF_FILES=true make check-elf-files

Denetleyiciyi varsayılan olarak etkinleştirmek için PRODUCT_CHECK_ELF_FILES değerini BoardConfig.mk değerine ekleyin:

PRODUCT_CHECK_ELF_FILES := true

Önceden derlenmiş paketler, Android'in derleme işlemi sırasında otomatik olarak kontrol edilir:

make