Satıcı Yerel Geliştirme Kiti'ne (VNDK) genel bakış

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.
    ziyaret edin.
ziyaret edin.

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:

  1. Ç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.
  2. 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 ve libvulkan.so,
  • 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ı)
ziyaret edin.

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ğilse current, BOARD_VNDK_VERSION hesabını kullanın.
  • BOARD_VNDK_VERSION şuna eşitse current:
    • PLATFORM_VERSION_CODENAME değeri REL 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.