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>