VNDK anlık görüntüleri oluşturma

VNDK anlık görüntüsü, bir Android sürümü için VNDK çekirdek ve VNDK-SP kitaplıklarından oluşan bir settir. Yalnızca system.img için gereken karşılık gelen VNDK anlık görüntüsünü vendor.img.

Resmi VNDK anlık görüntüleri, Android derleme sunucusunda otomatik olarak oluşturulur. ve Android kaynak ağacının /prebuilts/vndk tanesine giriş yaptı. Örneğin, VNDK anlık görüntülerini yerel olarak derleyebilirsiniz. VNDK anlık görüntüleri kol, arm64, x86 ve x86_64 TARGET_ARCH çeşitlerinde desteklenir.

Anlık görüntüler oluştur

Android derleme sunucusu, derleme yapıları ve VNDK anlık görüntü dosyaları oluşturur derlemenizi sağlar.

Derleme parametreleri

Derleme hedefi adı: vndk. Derleme hedefi yapılandırması aşağıda gösterilmiştir.

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH, Genel Sistem Görüntüsü (GSI) ile aynı hedef yaylar (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT Snapshot v28 (Android 9) ve sonraki sürümler için yukarıda listelenen popüler yapılandırmaları içerir.

Derleme komutları

Resmi anlık görüntüler için, Android 9 ve sonraki sürümler örnek bir hedef (vndk) içerir: VNDK oluşturan ve üreten vndk.mk anlık görüntü: $DIST_DIR. Anlık görüntü ZIP dosyası android-vndk-$(TARGET_ARCH).zip Örnek:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

Android derleme sunucusu Desteklenen tüm mimariyi derlemek için build.sh komut dosyası çeşitlerini seçin.

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

Bir Android sürümünün VNDK anlık görüntüsü, o sürümün sürüm dalını kullanabilirsiniz.

Yerel olarak derleyin

Geliştirme sırasında komutudur.

  • Desteklenen tüm artları aynı anda derlemek için aşağıdaki derleme komut dosyasını yürütün (build.sh).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • Belirli bir TARGET_ARCH oluşturmak için aşağıdakini yürütün komutlarının ikisine katlanır.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

İlgili android-vndk-$(TARGET_ARCH).zip dosyası oluşturulur $DIST_DIR altında.

Anlık görüntü dosyaları

VNDK anlık görüntüsü aşağıdaki dosyaları içerir.

  • VNDK-core ve VNDK-SP paylaşılan kitaplıkların satıcı varyantı.
    • LL-NDK paylaşılan kitaplıklar, geriye dönük uyumlu oldukları için gerekli değildir.
    • 64 bit hedefler için hem TARGET_ARCH hem de TARGET_2ND_ARCH kitaplık derlendi ve dahil edildi.
  • VNDK-core, VNDK-SP, LL-NDK ve VNDK-özel kitaplıkların listesi: [vndkcore|vndksp|llndk|vndkprivate].libraries.txt
  • Lisans dosyaları.
  • module_paths.txt Tüm VNDK için modül yollarını kaydeder GPL projelerinin kaynakları olup olmadığını kontrol etmek için gerekli Android kaynak ağacında test edilmesini sağlayın.

Belirli bir VNDK anlık görüntüsü ZIP dosyası için android-vndk-$(TARGET_ARCH).zip, VNDK önceden oluşturulmuş kitaplıkları adında ayrı dizinler halinde gruplanmış ABI'ya göre arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) bitlik değeri. Örneğin, android-vndk-arm64.zip için 64 bit kitaplıklar arch-arm64-armv8-a altına yerleştirilir ve 32 bit kitaplıklar arch-arm-armv8-a altına yerleştirildi. Aşağıdaki örnekte, kol64 (TARGET_ARCH=arm64) VNDK için dizin yapısı anlık görüntü ZIP dosyasına kaydedin (android-vndk-arm64.zip).

VNDK Anlık Görüntü Dizin Yapısı.
Şekil 1. VNDK anlık görüntü dizin yapısı (örnek)

Tedarikçi anlık görüntüleri için derleme

Android 11 destekler sağlayıcı anlık görüntüler sağlar. Bu, kullanıcılarınızdan bağımsız olarak vendor.img Android sürümünü belirtin. Varsayılan bir VNDK anlık görüntüsü cihazlara yüklenebilen ve paylaşılan kitaplık dosyaları (.so) daha sonra çalışma zamanında tedarikçi C++ ikili programlarından bağlantı kuruldu. Diğerlerine göre yüklemek için başlık dosyaları ve dosyalar gibi ek yapılara tıklayın.

Yerel bir kaynaktan bu tür yapıları (VNDK anlık görüntüsüyle birlikte) oluşturmak için aşağıdaki komutu kullanın.

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

Bu komut, şunun altında android-vndk-$(TARGET_ARCH).zip dosya oluşturur: $DIST_DIR. Aşağıdaki örnek, bir arm64 VNDK anlık görüntüsü ZIP dosyasıdır nasıl oluşturabileceğinizi anlatacağım. Kalın karakterlerle gösterilen dosyalar, normal VNDK'ya yeni eklenen dosyalardır anlık görüntü (Şekil 1'de gösterilmektedir) ve JSON dosyalarını ( cflags) ve dışa aktarılan tüm başlık dosyaları.

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

VNDK anlık görüntülerini yükle

VNDK anlık görüntüleri, /prebuilts/vndk/vVER, burada: VER, VNDK anlık görüntüsünün sürümüne eşit (ilgili Android sürümünün SDK sürümünü takip eder). Örneğin, örneğin, Android 8.1 VNDK anlık görüntüsünün 27 sürümü vardır.

Update.py komut dosyasını kullanma

update.py komut dosyası (/development/vndk/snapshot/update.py), kaynak ağacına önceden oluşturulmuş bir VNDK anlık görüntüsü ekleme. Otomatik olarak algılar derlemelerini sağlar ve Android.bp gelir sağladı. Bu komut dosyası aşağıdaki görevleri yerine getirir:

  1. /prebuilts/vndk/vVER ürününde yeni Git dalı oluşturmak için repo start kullanılır.
  2. VNDK anlık görüntü derleme yapılarını getirir ve açar.
  3. Derleme dosyalarını otomatik olarak oluşturmak için gen_buildfiles.py komutunu çalıştırır (Android.bp).
  4. Önceden oluşturulmuş kitaplıkları doğrulamak için check_gpl_license.py komutunu çalıştırır Genel Kamu Lisansı (GPL) kapsamında lisanslı kaynaklar; geçerli kaynak ağacını kullanır.
  5. Yeni değişiklikleri uygulamak için git commit kullanır.

Yerel olarak oluşturulan VNDK anlık görüntülerini kullanma

Yerel olarak oluşturulan VNDK anlık görüntülerini de kullanabilirsiniz. --local seçeneği belirtildiğinde, update.py komut dosyası VNDK anlık görüntüsünü getirir belirtilen yerel dizinden (Android yerine) derleme sunucusu) ise android-vndk-$(TARGET_ARCH).zip dosyalarını içeren (development/vndk/snapshot/build.sh üzerinden) oluşturuldu. Şununla --local seçeneğinde, update.py komut dosyası GPL'yi atlar lisans kontrolü ve git commit adım.

Sözdizimi:

python update.py VER --local local_path

Android 8.1 VNDK anlık görüntüsünü yerel derlemeyle güncellemek için örnek komut /path/to/local/dir içindeki yapılar:

python update.py 27 --local /path/to/local/dir

Yerel olarak oluşturulmuş VNDK anlık görüntüsünün örnek dizin yapısı:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
. Yapılar VNDK_SNAPSHOT_BUILD_ARTIFACTS=true.

VNDK anlık görüntülerini yükleme

Sistem görüntüsü, derleme sırasında BOARD_VNDK_VERSION içindeki bilgiler, PRODUCT_EXTRA_VNDK_VERSIONS ve ro.vndk.version. Önceden oluşturulmuş VNDK'dan hangi VNDK anlık görüntülerinin yükleneceğini kontrol edebilirsiniz anlık görüntü dizinleri (örneğin, /prebuilts/vndk/v29 veya /prebuilts/vndk/v30) aşağıdaki seçeneklerden birini kullanabilirsiniz.

  • 1. Seçenek: BOARD_VNDK_VERSION. Şunu kullanın: mevcut tedarikçi modüllerini oluşturmak için anlık görüntü modüllerini Satıcı modülleri için gerekli olan anlık görüntü modüllerini
  • 2. Seçenek: PRODUCT_EXTRA_VNDK_VERSIONS. Geçerli satıcı modüllerinden bağımsız olarak VNDK anlık görüntü modüllerini yükleyin. Bu işlem, Birini başka bir kanala bağlamadan PRODUCT_EXTRA_VNDK_VERSIONS modüllerini de oluşturabilirsiniz.

BOARD_VNDK_VERSION olarak ayarla

BOARD_VNDK_VERSION, tedarikçi firmanın mevcut VNDK sürümünü gösterir gerekli olduğunu açıkladık. BOARD_VNDK_VERSION için /prebuilts/vndk dizininde mevcut VNDK anlık görüntü sürümü, BOARD_VNDK_VERSION içinde belirtilen VNDK anlık görüntüsü yüklendi. Eğer Dizinde VNDK anlık görüntüsü bulunmuyor. Bir yapı hatası oluşur.

BOARD_VNDK_VERSION tanımlanması, VNDK modüllerinin de yüklendi. Şurada tanımlanan VNDK anlık görüntü sürümüne sahip tedarikçi modülleri bağlantısı: Derleme zamanında BOARD_VNDK_VERSION (bu, mevcut derlemeyi oluşturmaz) VNDK modüllerinde değiştirme). Şuradan tam kaynak ağacını indirirken: depolanıyorsa hem sistem hem de tedarikçi kaynakları aynı Android'i temel alır kullanabilirsiniz.

Ayarla: PRODUCT_Extra_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS, kontrol edilecek ek VNDK sürümlerini listeler yüklendi. Normalde mevcut durum için bir VNDK anlık görüntüsünün olması yeterlidir satıcı bölümü Ancak bazı durumlarda, anlık görüntülere yer verir. Örneğin, GSI'nın kullandığı birden fazla anlık görüntü ve tek bir sistem görüntüsüne sahip birden fazla tedarikçi firma sürümünü desteklemelidir. Ayarlayarak PRODUCT_EXTRA_VNDK_VERSIONS, VNDK anlık görüntüsünü yükleyebilirsiniz modüllerini (BOARD_VNDK_VERSION) VNDK sürümüne ek olarak sunar.

PRODUCT_EXTRA_VNDK_VERSIONS için belirli bir sürüm listesi varsa derleme sistemi, tablodaki sürüm listesinin önceden oluşturulmuş anlık görüntülerini prebuilts/vndk dizini. Derleme sistemi listelenen tüm bu anlık görüntü dosyalarını her bir VNDK APEX'e yükler (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER Eksik sürümler yapı hatası oluşturur.

VNDK modülleri, derleme sırasında tedarikçi modülleriyle bağlantı oluşturmaz, ancak Tedarikçi bölümündeki tedarikçi modüller için yüklü VNDK sürümleri. PRODUCT_EXTRA_VNDK_VERSIONS geçerli yalnızca BOARD_VNDK_VERSION tanımlıysa.

PLATFORM_VNDK_VERSION

PLATFORM_VNDK_VERSION, geçerli VNDK için VNDK sürümünü tanımlar modüllerin kullanılabilmesidir. Değer otomatik olarak ayarlanır:

  • Yayınlamadan önce PLATFORM_VNDK_VERSION şu şekilde ayarlandı: PLATFORM_VERSION_CODENAME.
  • Sürümde PLATFORM_SDK_VERSION, şuraya kopyalanır: PLATFORM_VNDK_VERSION.

Android sürümü yayınlandıktan sonra, mevcut VNDK kitaplıkları VNDK APEX'e yüklendi (/system/apex/com.android.vndk.vVER), burada VER, şurada depolanan sürümdür: PLATFORM_VNDK_VERSION.

BOARD_VNDK_VERSION, current olarak ayarlandığında PLATFORM_VNDK_VERSION ro.vndk.version içinde depolanıyor, Aksi takdirde BOARD_VNDK_VERSION, ro.vndk.version. PLATFORM_VNDK_VERSION şuna ayarlandı: Android kullanıma sunulduğunda SDK sürümü; yayınlanmadan önce, alfa-sayısal Android kod adı PLATFORM_VNDK_VERSION için kullanılır.

VNDK sürüm ayarlarının özeti

Tabloda, VNDK sürüm ayarları özetlenmektedir.

Tedarikçi
Derleme
Pano
Sürüm
SDK
Sürümü
Platform
Sürümü
Sürüm
Mülkü
Dizini Yükle
Mevcut VNDK modülleri current Önce CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
Sonra SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
Önceden oluşturulmuş anlık görüntü modülleri Anlık görüntü için VNDK_VER
Önce veya Sonra CODE_NAME
veya SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • Kart sürümü (BOARD_VNDK_VERSION). VNDK gerekir. Şu durumda current olarak ayarlayın: satıcı modülleri mevcut sistem modüllerine bağlanabilir.
  • Platform Sürümü (PLATFORM_VNDK_VERSION). Mevcut sistem modüllerinin oluşturmakta olduğu VNDK sürümü. Yalnızca şu durumlarda oluşturulur: BOARD_VNDK_VERSION, geçerli değere eşit.
  • Sürüm Özelliği (ro.vndk.version). Özellik satıcı.img'deki ikili programların ve kitaplıkların gerektirdiği VNDK sürümünü belirten gerekir. vendor.img konumunda depolanıyor. /vendor/default.prop.