Android paylaşılan kitaplıkları zaman zaman değişir. Önceden oluşturulmuş ikili programları saklama ve hepsinin yüklenmesi büyük çaba gerektirir. Android'de 9 veya önceki sürümlerin yüklü olduğu, kaldırılan kitaplıklar veya ABI'ler yalnızca çalışma zamanında bağlanamaz. Geliştiriciler şunu yapmalıdır: eski ikili programları bulmak için günlükleri izleyin. Android'de 10 için sembol tabanlı bir ABI kullanım denetleyicisi kullanıma sunuldu. Denetleyici, derleme sırasında güncel olmayan önceden oluşturulmuş ikili programları algılayabilir. Böylece, paylaşılan kütüphane geliştiricileri, önceden oluşturulmuş ikili programlardan hangilerinin ve önceden oluşturulmuş ikili programların yeniden oluşturulması gerekir.
Sembole dayalı ABI kullanım kontrol aracı
Sembol temelli ABI kullanım denetleyicisi, ana bilgisayar. Denetleyici, önceden oluşturulmuş ikili programı ve tanımlanmamış tüm simgelerin çözülüp çözülmediğini kontrol eder.
İlk olarak denetleyici, önceden oluşturulmuş ikili programın hedef mimarisini kontrol eder. Önceden oluşturulmuş ikili program ARM, AArch64, x86 veya x86-64'ü hedeflemiyorsa mimarisi yoksa denetleyici ö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 adlarını eşleşen varyanta (ör.
core
- vendor
) paylaşılan kitaplıklar arasından seçim yapın.
Üçüncüsü, denetleyici DT_NEEDED
girişlerini
LOCAL_SHARED_LIBRARIES
veya shared_libs
. Özellikle,
denetleyici, paylaşılan her bir öğeden DT_SONAME
girişini ayıklar
kitaplıklar ve bu DT_SONAME
,
Önceden oluşturulmuş ikili programda DT_NEEDED
giriş kaydedildi. Bir
uyuşmazlığı durumunda bir hata mesajı alırsınız.
Dördüncü olarak denetleyici, önceden oluşturulmuş ikili programdaki tanımlanmamış sembolleri çözer.
Tanımlanmamış bu simgeler bağımlılıkların birinde,
simge bağlaması GLOBAL
veya WEAK
olmalıdır. Bir
tanımlanmamış simge çözümlenemiyor, hata mesajı veriliyor.
Önceden oluşturulmuş modül özellikleri
Önceden oluşturulmuş ikili programın bağımlılıkları takip etmek için:
- Android.bp:
shared_libs: ["libc", "libdl", "libm"],
- Android.mk:
LOCAL_SHARED_LIBRARIES := libc libdl libm
Önceden oluşturulmuş ikili program, çözülmeyen tanımsız simgeler varsa 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
Denetleyiciyi çalıştırmak için ortam değişkenini ayarlayın
CHECK_ELF_FILES
- true
ve koşu
make check-elf-files
:
CHECK_ELF_FILES=true make check-elf-files
Denetleyiciyi varsayılan olarak etkinleştirmek için PRODUCT_CHECK_ELF_FILES
eklentisini ekleyin.
- BoardConfig.mk
:
PRODUCT_CHECK_ELF_FILES := true
Önceden oluşturulmuş öğeler, Android'in derleme işlemi sırasında otomatik olarak kontrol edilir:
make