Önceden oluşturulmuş ABI kullanım denetleyicisi

Android paylaşımlı kitaplıkları zaman zaman gelişir. Önceden oluşturulmuş ikili dosyaları güncel tutmak önemli çaba gerektirir. Android 9 veya önceki sürümlerde, kaldırılan kitaplıklara veya ABI'lere bağlı olan önceden oluşturulmuş ikili dosyalar yalnızca çalışma zamanında bağlantı kuramaz. Geliştiricilerin, eski, önceden oluşturulmuş ikili dosyaları bulmak için günlükleri izlemesi gerekir. Android 10'da sembol tabanlı bir ABI kullanım denetleyicisi tanıtıldı. Denetleyici, güncel olmayan önceden oluşturulmuş ikili dosyaları derleme sırasında algılayabilir; böylece paylaşılan kitaplık geliştiricileri, hangi önceden oluşturulmuş ikili dosyaların değişiklik nedeniyle bozulabileceğini ve hangi önceden oluşturulmuş ikili dosyaların yeniden oluşturulması gerektiğini bilebilir.

Sembol tabanlı ABI kullanım denetleyicisi

Sembol tabanlı ABI kullanım denetleyicisi, ana bilgisayardaki Android dinamik bağlayıcıyı taklit eder. Denetleyici, önceden oluşturulmuş ikili dosyayı önceden oluşturulmuş ikili dosyanın bağımlılıklarıyla bağlar ve tanımlanmamış tüm sembollerin çözümlenip çözümlenmediğini kontrol eder.

İlk olarak denetleyici, önceden oluşturulmuş ikili dosyanın hedef mimarisini kontrol eder. Önceden oluşturulmuş ikili dosya ARM, AArch64, x86 veya x86-64 mimarisini hedeflemiyorsa denetleyici önceden oluşturulmuş ikili dosyayı atlar.

İkinci olarak, önceden oluşturulmuş ikili dosyanın bağımlılıkları LOCAL_SHARED_LIBRARIES veya shared_libs listelenmelidir. Derleme sistemi, modül adlarını paylaşılan kitaplıkların eşleşen değişkenine (yani core ve vendor ) çözer.

Üçüncü olarak denetleyici, DT_NEEDED girişlerini LOCAL_SHARED_LIBRARIES veya shared_libs ile karşılaştırır. Özellikle denetleyici, her paylaşılan kitaplıktan DT_SONAME girişini çıkarır ve bu DT_SONAME önceden oluşturulmuş ikili dosyada kayıtlı DT_NEEDED girişleriyle karşılaştırır. Uyumsuzluk olması durumunda bir hata mesajı verilir.

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

Önceden oluşturulmuş 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 bazı çözülemeyen tanımsız sembollere sahip olacak ş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 programın ELF dosya 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ır

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

CHECK_ELF_FILES=true make check-elf-files

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

PRODUCT_CHECK_ELF_FILES := true

Önceden oluşturulmuş yapılar, Android'in derleme işlemi sırasında otomatik olarak kontrol edilir:

make