Vendor Native Development Kit (VNDK), diğer kütüphaneler tarafından kullanılan kitaplık setidir. dlopen için çalışma zamanında tedarikçi veya ürün bölümünde ya da ikili programların
Neden VNDK?
AOSP, sistem bölümünün en yeni sürüme yükseltilebileceği yalnızca çerçeve güncellemelerine izin verir. çerçeve sürümü gösterilir. Her ne kadar farklı bir her bölümdeki ikili programlar birbirleriyle çalışabilmelidir.
Yalnızca çerçeve güncellemeleri aşağıdaki zorlukları içerir:
- Çerçeve modülleriyle tedarikçi modülleri arasındaki bağımlılık. Android 8.0'dan önce satıcı ve sistem bölümündeki modüller bağlanabiliyordu bir iletişim kurmaktır. Ancak tedarikçi modüllerinden kaynaklanan bağımlılıklar, istenmeyen çerçeve modüllerinin geliştirilmesi.
- AOSP kitaplıklarının uzantıları. Android sistem bölümü değiştirildiğinde tüm Android cihazların CTS'yi geçmesini gerektirir standart bir Genel Sistem Görüntüsü (GSI) ile değiştirin. Ancak AOSP'nin kapsamını genişlettiği için kitaplıklarını kullanarak performansı artırmak veya HIDL'lerine ekstra işlevler eklemek için sistem bölümünün standart GSI değeri ile güncellenmesi tedarikçinin HIDL uygulamasını bozabilir. Şu konulardaki yönergeler için: daha fazla bilgi edinmek için VNDK uzantıları.
Android, bu zorlukların üstesinden gelmek için VNDK olarak (bu bölümde açıklanmıştır), HIDL, hwbinder, cihaz ağacı yer paylaşımı ve sepolicy yerleşimi.
VNDK'ya özel şartlar
VNDK ile ilgili dokümanlarda aşağıdaki terminoloji kullanılır:- Modüller, paylaşılan kitaplıkları veya yürütülebilir dosyaları belirtir. Modüller, derleme zamanı oluşturur ve bildirmeyi konuştuk.
- İşlemler, yürütülebilir dosyalardan oluşturulan işletim sistemi görevleridir. Süreçler çalışma zamanı oluşturur ve bildirmeyi konuştuk.
- Çerçeve nitelikli terimler,
system
bölümü ile ilgilidir: - Çerçeve çalışması yürütülebilir dosyaları,
/system/bin
veya/system/xbin
. - Çerçeve üzerinde paylaşılan kitaplıklar,
/system/lib[64]
. - Çerçeve modülleri, iki çerçeve paylaşılan kitaplığını da belirtir ve çerçeve yürütülebilir dosyaları.
- Çerçeve süreçleri, çerçeveden ortaya çıkan süreçlerdir.
/system/bin/app_process
gibi yürütülebilir dosyalar. - Tedarikçi firma nitelikli terimler
vendor
bölümleriyle ilgilidir: - Tedarikçi firma yürütülebilir dosyaları
/vendor/bin
dosyasındaki yürütülebilir dosyalara referans verir - Tedarikçi firma tarafından paylaşılan kitaplıklar,
/vendor/lib[64]
. - Tedarikçi firma modülleri, hem satıcının yürütülebilir dosyalarını hem de satıcının paylaşılan kitaplıklarını ifade eder.
- Tedarikçi süreçleri, tedarikçi firma tarafından oluşturulan süreçlerdir.
/vendor/bin/android.hardware.camera.provider@2.4-service
gibi yürütülebilir dosyalar.
VNDK kavramları
İdeal Android 8.0 ve sonraki sürümlerde çerçeve işlemleri yüklenmez satıcı tarafından paylaşılan kitaplıklar, tüm tedarikçi firma işlemleri yalnızca tedarikçi firma tarafından paylaşılan kitaplıkları yükler (ve çerçeve paylaşılan kitaplıklarının bir kısmı) çalışır ve çerçeve süreçleri ve tedarikçi işlemleri, HIDL ve donanım ile bağlayıcı.
Böyle bir dünyada kararlı, herkese açık API'lerin çerçeve paylaşılan kitaplıklar, tedarikçi modülü geliştiricileri için yeterli olmayabilir API'lerin Android sürümleri arasında değişebilmesine rağmen tedarikçinin süreçleri için erişilebilir olmasını sağlamaktır. Ayrıca, performans gereksinimleri uzlaşmalara yol açabilir, bazı durumlarda yanıt süresi kritiktir. HAL'ler farklı şekilde ele alınmalıdır.
Aşağıdaki bölümlerde, VNDK'nın tedarikçiler ve Aynı Süreç HAL'leri (SP-HAL'ler) için de geçerlidir.
Tedarikçi firma için çerçeve paylaşılan kitaplıklar
Bu bölümde, paylaşılan kitaplıkların sınıflandırılmasına yönelik ölçütler açıklanmaktadır. erişilebilir kılmayı öğreteceğim. Tedarikçileri desteklemek için iki yaklaşım vardır. modüllerinde anlatacağım:
- Çerçeve paylaşılan kitaplıkların ABI'lerini/API'lerini dengeleyin. Yeni çerçeve modülleri ve eski tedarikçi modülleri, aynı paylaşılan kitaplığı kullanarak ve depolama alanı boyutunu azaltır. Benzersiz bir paylaşılan kitaplık, çift yükleme sorunu var. Ancak istikrarı korumak için geliştirme maliyeti ABI'ler/API'ler yüksek ve dışa aktarılan tüm ABI'leri/API'leri sabitlemek gerçekçi değil her çerçeve için paylaşılan kitaplıktır.
- Eski çerçeve paylaşılan kitaplıklarını kopyalayın. Güçlü olanın etkisi Bu kısıtlama, ilgili tüm iletişim mekanizmalarını çerçeve modülleri ve tedarikçi modüllerinin yanı sıra bağlayıcı, yuva, kanal, paylaşılan bellek, paylaşılan dosya ve sistem özellikleri. Orada İletişim protokolü donmuş ve kararlı olmadığı sürece iletişim kurulmamalıdır (ör. hwbinder üzerinden HIDL). Paylaşılan kitaplıkların çift yüklenmesi tespit edebilir, örneğin, yeni kitaplık tarafından oluşturulan bir nesne yerine eski kitaplıktaki işlevlere eklenirse, bu kitaplıklar oluşturabilirsiniz.
Ortak iş ortaklarının özelliklerine bağlı olarak farklı yaklaşımlar kullanılır kitaplıklar. Sonuç olarak, paylaşılan çerçeveli kitaplıklar üç kategoriye ayrılır. alt kategoriler:
- LL-NDK Kitaplıkları Çerçeve Çalışması Paylaşılan Kitaplıklarıdır
performansa sahip. Geliştiricileri, güvenliklerini artırmaya ve
API/ABI stabiliteleri.
- 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) Çerçeve Paylaşılandır
İki kez kopyalanması güvenli olan kitaplıklar. Çerçeve Modülleri ve
Tedarikçi Firma Modülleri kendi kopyalarıyla bağlantı oluşturabilir. Paylaşılan bir çerçeve
kitaplığının uygun bir VNDK kitaplığı olabilmesi için
ölçütler:
- Çerçeveden IPC'ler göndermez veya çerçeveden almaz.
- ART sanal makinesiyle ilişkili değildir.
- Kararsız dosya biçimlerine sahip dosyaları/bölümleri okumaz/yazmaz.
- Yasal incelemeler gerektiren özel yazılım lisansı yoktur.
- Kod sahibinin, tedarikçi firma kullanımlarına itirazı yoktur.
- Yalnızca Çerçeve İşi Kitaplıkları (YALNIZCA FWK), Çerçeve Çalışmalarıyla Paylaşılır
Yukarıda belirtilen kategorilere ait olmayan kitaplıklar. Bu
kitaplıklar:
- Çerçevenin dahili uygulama ayrıntıları olarak kabul edilir.
- Tedarikçi modülleri tarafından erişilmemelidir.
- Kararsız ABI'lere/API'lere sahiptir ve API/ABI uyumluluk garantisi verilmez.
- Kopyalanmaz.
Aynı İşlem HAL (SP-HAL)
Aynı Süreç HAL (SP-HAL), önceden belirlenmiş HAL'lerden oluşan bir gruptur Sağlayıcı Paylaşılan Kitaplıkları olarak uygulanıp Çerçeve Süreçler. SP-HAL'ler bir bağlayıcı ad alanı tarafından izole edilir ( kitaplıklar ve simgeler için geçerlidir). SP-HAL'ler yalnızca LL-NDK ve VNDK-SP'ye bağlı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çeveye iki kez yüklenmesini sağlamak amacıyla dikkatlice incelenir. bir sorun yaratmaz. Hem SP-HAL'ler hem de VNDK-SP'ler Google'a dokunun.
Aşağıdaki kitaplıklar onaylanmış 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ı vndk: { support_system_process: true }
değerini belirtir
veya Android.bp dosyalarında kullanabilirsiniz. vndk: {private:true}
değeri de aynıysa
bu kitaplıklar VNDK-SP-Private
olarak adlandırılır ve
görünmez.
Aşağıda RS istisnaları olan yalnızca çerçevesel kitaplıklar verilmiştir (YALNIZCA FWK-RS):
libft2.so
(Oluşturma komut dosyası)libmediandk.so
(Oluşturma komut dosyası)
VNDK sürüm oluşturma
VNDK paylaşılan kitaplıklarının sürümü mevcuttur:
ro.vndk.version
sistem özelliği otomatik olarak şuraya eklenir:/vendor/default.prop
.- VNDK ve VNDK-SP paylaşılan kitaplıkları, VNDK apex olarak yüklenir
com.android.vndk.v${ro.vndk.version}
ve şuraya eklendi:/apex/com.android.vndk.v${ro.vndk.version}
.
ro.vndk.version
değeri algoritma tarafından seçilir
aşağıda bulabilirsiniz:
BOARD_VNDK_VERSION
eşit değilsecurrent
,BOARD_VNDK_VERSION
hesabını kullanın.BOARD_VNDK_VERSION
şuna eşitsecurrent
:PLATFORM_VERSION_CODENAME
değeriREL
ise şunu kullanın:PLATFORM_SDK_VERSION
(ör.28
).- Aksi takdirde
PLATFORM_VERSION_CODENAME
(ör.P
) tıklayın.
Tedarikçi Firma Test Paketi (VTS)
Android Vendor Test Suite (VTS), Google'ın
boş olmayan ro.vndk.version
özelliği. Yeni kullanıma sunulan cihazların ikisi de
ve yeni sürüme geçirilen cihazlarda ro.vndk.version
tanımlanmalıdır. Bazı VNDK testleri
vakalar (ör. VtsVndkFilesTest
ve
VtsVndkDependencyTest
), ro.vndk.version
özelliğini kullanır.
özelliğini kullanmanızı öneririz.