Vendor Native Development Kit (VNDK) , dlopen için çalışma zamanında satıcı veya ürün bölümünde diğer kitaplıklar veya ikili dosyalar tarafından kullanılan bir kitaplık kümesidir.
Neden VNDK?
AOSP, satıcı bölümü değişmeden kalırken sistem bölümünün en son çerçeve sürümüne yükseltilebildiği yalnızca çerçeve güncellemelerine izin verir. Farklı zamanlarda oluşturulmuş olmasına rağmen, her bölümdeki ikili dosyalar birbirleriyle çalışabilmelidir.
Yalnızca çerçeve güncellemeleri aşağıdaki zorlukları içerir:
- Çerçeve modülleri ve satıcı modülleri arasındaki bağımlılık . Android 8.0'dan önce, satıcı ve sistem bölümündeki modüller birbirine bağlanabilirdi. Ancak, satıcı modüllerinden kaynaklanan bağımlılıklar, çerçeve modüllerinin geliştirilmesine istenmeyen kısıtlamalar getirdi.
- AOSP kitaplıklarının uzantıları . Android, sistem bölümü standart bir Genel Sistem Görüntüsü (GSI) ile değiştirildiğinde tüm Android cihazlarının CTS'yi geçmesini gerektirir. Bununla birlikte, satıcılar, performansı artırmak veya HIDL uygulamaları için ekstra işlevler eklemek için AOSP kitaplıklarını genişlettikçe, sistem bölümünün standart bir GSI ile yanıp sönmesi, bir satıcının HIDL uygulamasını bozabilir. Bu tür kırılmaları önlemeye ilişkin yönergeler için bkz. VNDK uzantıları .
Bu zorlukların üstesinden gelmek için Android, VNDK (bu bölümde açıklanmıştır), HIDL , hwbinder, cihaz ağacı yerleşimi ve sepolicy yerleşimi gibi çeşitli özellikler içerir.
VNDK'ya özgü terimler
VNDK ile ilgili belgeler aşağıdaki terminolojiyi kullanır:- Modüller , paylaşılan kitaplıkları veya yürütülebilir dosyaları ifade eder. Modüller, derleme zamanı bağımlılıkları yapar.
- İşlemler , yürütülebilir dosyalardan oluşturulan işletim sistemi görevleridir. İşlemler, çalışma zamanı bağımlılıkları yapar.
- Çerçeve nitelikli terimler
system
bölümüyle ilgilidir: - Çerçeve yürütülebilir dosyaları,
/system/bin
veya/system/xbin
içindeki yürütülebilir dosyalara atıfta bulunur. - Çerçeve paylaşımlı kitaplıklar ,
/system/lib[64]
altındaki paylaşılan kitaplıklara atıfta bulunur. - Çerçeve modülleri , hem çerçeve paylaşımlı kitaplıklarına hem de çerçeve yürütülebilir dosyalarına atıfta bulunur.
- Çerçeve süreçleri ,
/system/bin/app_process
gibi çerçeve yürütülebilir dosyalarından oluşturulan süreçlerdir. - Satıcı -nitelikli terimler,
vendor
bölümleriyle ilgilidir: - Satıcı yürütülebilir dosyaları,
/vendor/bin
içindeki yürütülebilir dosyalara atıfta bulunur - Satıcı tarafından paylaşılan kitaplıklar,
/vendor/lib[64]
altındaki paylaşılan kitaplıkları ifade eder. - Satıcı modülleri , hem satıcı tarafından yürütülebilir dosyalara hem de satıcı tarafından paylaşılan kitaplıklara atıfta bulunur.
- Satıcı süreçleri ,
/vendor/bin/android.hardware.camera.provider@2.4-service
gibi Satıcı Yürütülebilir Dosyalarından oluşturulan süreçlerdir.
VNDK kavramları
İdeal bir Android 8.0 ve üstü dünyada, çerçeve süreçleri satıcı tarafından paylaşılan kitaplıkları yüklemez, tüm satıcı süreçleri yalnızca satıcı tarafından paylaşılan kitaplıkları (ve çerçeve paylaşılan kitaplıklarının bir bölümünü) yükler ve çerçeve süreçleri ile satıcı süreçleri arasındaki iletişim HIDL ve donanım tarafından yönetilir bağlayıcı.
Böyle bir dünya, çerçeve paylaşımlı kitaplıklardan gelen kararlı, genel API'lerin satıcı modülü geliştiricileri için yeterli olmayabileceği (API'ler Android sürümleri arasında değişebilse de) olasılığını içerir ve çerçeve paylaşılan kitaplıklarının bir kısmının satıcı süreçleri tarafından erişilebilir olmasını gerektirir. Ayrıca, performans gereksinimleri tavizlere yol açabileceğinden, yanıt süresi açısından kritik bazı HAL'lerin farklı şekilde ele alınması gerekir.
Aşağıdaki bölümlerde, VNDK'nin satıcılar ve Aynı İşlem HAL'leri (SP-HAL'ler) için çerçeve paylaşımlı kitaplıkları nasıl ele aldığı ayrıntılı olarak açıklanmaktadır.
Satıcı için çerçeve paylaşılan kitaplıkları
Bu bölüm, satıcı süreçleri tarafından erişilebilir olan paylaşılan kitaplıkları sınıflandırmaya yönelik ölçütleri açıklar. Birden çok Android sürümünde satıcı modüllerini desteklemek için iki yaklaşım vardır:
- Çerçeve paylaşılan kitaplıkların ABI'lerini/API'lerini sabitleyin . Yeni çerçeve modülleri ve eski satıcı modülleri, bellek ayak izini ve depolama boyutunu azaltmak için aynı paylaşılan kitaplığı kullanabilir. Benzersiz bir paylaşılan kitaplık ayrıca birkaç çift yükleme sorununu da önler. Ancak, kararlı ABI'leri/API'leri sürdürmenin geliştirme maliyeti yüksektir ve her çerçeve paylaşılan kitaplığı tarafından dışa aktarılan tüm ABI'leri/API'leri stabilize etmek gerçekçi değildir.
- Eski çerçeve paylaşılan kitaplıklarını kopyalayın . Bağlayıcı, soket, boru, paylaşılan bellek, paylaşılan dosya ve sistem özellikleri dahil (ancak bunlarla sınırlı olmamak üzere) çerçeve modülleri ve satıcı modülleri arasında iletişim kurmak için tüm mekanizmalar olarak tanımlanan yan kanallara karşı güçlü bir kısıtlama ile birlikte gelir. İletişim protokolü donmuş ve kararlı olmadığı sürece iletişim olmamalıdır (örn. HIDL aracılığıyla hwbinder). Paylaşılan kitaplıkların çift yüklenmesi de sorunlara neden olabilir; örneğin, yeni kütüphane tarafından oluşturulan bir nesne eski kütüphaneden fonksiyonlara aktarılırsa, bu kütüphaneler nesneyi farklı yorumlayabileceğinden bir hata oluşabilir.
Paylaşılan kütüphanelerin özelliklerine göre farklı yaklaşımlar kullanılmaktadır. Sonuç olarak, çerçeve paylaşımlı kitaplıklar üç alt kategoride sınıflandırılır:
- LL-NDK Kitaplıkları , kararlı olduğu bilinen Çerçeve Paylaşımlı Kitaplıklardır . Geliştiricileri, API/ABI kararlılıklarını korumaya kararlıdır.
- LL-NDK aşağıdaki kitaplıkları içerir:
libEGL.so
,libGLESv1_CM.so
,libGLESv2.so
,libGLESv3.so
,libandroid_net.so
,libc.so
,libdl.so
,liblog.so
,libm.so
,libnativewindow.so
libneuralnetworks.so
,libsync.so
,libvndksupport.so
velibvulkan.so
,
- LL-NDK aşağıdaki kitaplıkları içerir:
- Uygun VNDK Kitaplıkları (VNDK) , iki kez kopyalanması güvenli olan Çerçeve Paylaşımlı Kitaplıklardır . Çerçeve Modülleri ve Satıcı Modülleri , kendi kopyalarıyla bağlantı kurabilir. Bir çerçeve paylaşımlı kitaplığı, yalnızca aşağıdaki kriterleri karşılaması durumunda uygun bir VNDK kitaplığı haline gelebilir:
- Çerçeveye/çerçeveden IPC göndermez/almaz.
- ART sanal makine ile ilgili değildir.
- Kararsız dosya biçimlerine sahip dosyaları/bölümleri okumaz/yazmaz.
- Yasal inceleme gerektiren özel bir yazılım lisansına sahip değildir.
- Kod sahibinin satıcı kullanımlarına itirazı yoktur.
- Yalnızca Çerçeve Kitaplıkları (YALNIZCA FWK) , yukarıda belirtilen kategorilere ait olmayan Çerçeve Paylaşımlı Kitaplıklardır . Bu kütüphaneler:
- Çerçeve iç uygulama ayrıntıları olarak kabul edilir.
- Satıcı modülleri tarafından erişilmemelidir.
- Kararsız ABI'lere/API'lere sahip olun ve API/ABI uyumluluk garantisi yok.
- kopyalanmaz.
Aynı İşlem HAL (SP-HAL)
Same-Process HAL ( SP-HAL ), Vendor Shared Libraries olarak uygulanan ve Framework Processes'e yüklenen önceden belirlenmiş HAL'ler kümesidir. SP-HAL'ler bir bağlayıcı ad alanı tarafından yalıtılır (paylaşılan kitaplıklara görünen kitaplıkları ve sembolleri denetler). SP-HAL'ler yalnızca LL-NDK ve VNDK-SP'ye bağlı olmalıdır.
VNDK-SP, uygun VNDK kitaplıklarının önceden tanımlanmış bir alt kümesidir. VNDK-SP kitaplıkları, VNDK-SP kitaplıklarının çerçeve süreçlerine çift yüklenmesinin sorunlara neden olmamasını sağlamak için dikkatlice gözden geçirilir. Hem SP-HAL'ler hem de VNDK-SP'ler Google tarafından tanımlanır.
Aşağıdaki kitaplıklar onaylı SP-HAL'lerdir:
-
libGLESv1_CM_${driver}.so
-
libGLESv2_${driver}.so
-
libGLESv3_${driver}.so
-
libEGL_${driver}.so
-
vulkan.${driver}.so
-
android.hardware.renderscript@1.0-impl.so
-
android.hardware.graphics.mapper@2.0-impl.so
VNDK-SP kitaplıkları, Android.bp dosyalarında vndk: { support_system_process: true }
belirtir. vndk: {private:true}
belirtilirse, bu kitaplıklara VNDK-SP-Private
adı verilir ve bunlar SP-HALS tarafından görülmez.
Aşağıdakiler, RS istisnaları olan yalnızca çerçeve kitaplıklarıdır (FWK-ONLY-RS) :
-
libft2.so
(Renderscript) -
libmediandk.so
(Renderscript)
VNDK sürüm oluşturma
VNDK paylaşılan kitaplıkları sürümlendirilir:
-
ro.vndk.version
sistem özelliği otomatik olarak/vendor/default.prop
eklenir. - VNDK ve VNDK-SP paylaşılan kitaplıkları, bir VNDK apex
com.android.vndk.v${ro.vndk.version}
olarak yüklenir ve/apex/com.android.vndk.v${ro.vndk.version}
.
ro.vndk.version
değeri aşağıdaki algoritma tarafından seçilir:
-
BOARD_VNDK_VERSION
,current
eşit değilse ,BOARD_VNDK_VERSION
kullanın. -
BOARD_VNDK_VERSION
,current
eşitse : -
PLATFORM_VERSION_CODENAME
REL
ise,PLATFORM_SDK_VERSION
kullanın (örn.28
). - Aksi takdirde,
PLATFORM_VERSION_CODENAME
kullanın (örn.P
).
Satıcı Test Paketi (VTS)
Android Vendor Test Suite (VTS), boş olmayan bir ro.vndk.version
özelliğini zorunlu kılar. Hem yeni başlatılan cihazlar hem de yükseltme cihazları ro.vndk.version
tanımlamalıdır. Bazı VNDK test durumları (örneğin VtsVndkFilesTest
ve VtsVndkDependencyTest
), eşleşen uygun VNDK kitaplıkları veri kümelerini yüklemek için ro.vndk.version
özelliğine güvenir.