VNDK Anlık Görüntüleri Oluşturma

VNDK anlık görüntüsü, bir Android sürümüne yönelik bir VNDK çekirdeği ve VNDK-SP kitaplıkları kümesidir. Yalnızca system.img dosyası, vendor.img dosyasının ihtiyaç duyduğu ilgili VNDK anlık görüntüsünü içeriyorsa sistem bölümünü yükseltebilirsiniz.

Resmi VNDK anlık görüntüleri, Android derleme sunucusunda otomatik olarak oluşturulur ve Android kaynak ağacının /prebuilts/vndk dosyasına eklenir. Geliştirme amacıyla VNDK anlık görüntülerini yerel olarak oluşturabilirsiniz. VNDK anlık görüntüleri arm, arm64, x86 ve x86_64 TARGET_ARCH çeşitleri için desteklenir.

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

Android derleme sunucusu, aşağıdaki derleme parametrelerini ve derleme komutlarını kullanarak derleme yapıtları ve VNDK anlık görüntü dosyaları oluşturur.

Parametreleri oluştur

Yapı 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) hedef kemerleriyle aynıdır ( arm , arm64 , x86 , x86_64 ).
  • TARGET_ARCH_VARIANT . Snapshot v28 (Android 9) ve üzeri için yukarıda listelenen popüler yapılandırmaları içerir.

Komutlar oluştur

Resmi anlık görüntüler için Android 9 ve üzeri, vndk.mk dosyasında bir VNDK anlık görüntüsü oluşturup $DIST_DIR dizinine çıkaran örnek bir hedef ( vndk ) içerir. Anlık görüntü ZIP dosyası android-vndk-$(TARGET_ARCH).zip biçimini kullanır. Örneğin:

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

Android derleme sunucusu, desteklenen tüm Arch çeşitlerini aşağıdaki komutla oluşturmak için build.sh betiğini kullanır.

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

Bir Android sürümü için VNDK anlık görüntüsü, o sürümün yayın dalından oluşturulur.

Yerel olarak inşa etmek

Geliştirme sırasında aşağıdaki komutlarla yerel bir kaynak ağacından VNDK anlık görüntüleri oluşturabilirsiniz.

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

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

Anlık görüntü dosyaları

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

  • VNDK-core ve VNDK-SP paylaşılan kitaplıklarının satıcı çeşidi.
    • LL-NDK paylaşımlı kütüphaneleri geriye dönük olarak uyumlu oldukları için gerekli değildir.
    • 64 bitlik hedefler için hem TARGET_ARCH hem de TARGET_2ND_ARCH kitaplıkları oluşturulur ve dahil edilir.
  • VNDK-core, VNDK-SP, LL-NDK ve VNDK-özel kitaplıkların listesi [vndkcore|vndksp|llndk|vndkprivate].libraries.txt adresindedir.
  • Lisans dosyaları.
  • module_paths.txt . GPL projelerinin belirli bir Android kaynak ağacında yayınlanmış kaynaklara sahip olup olmadığını kontrol etmek için gerekli olan tüm VNDK kitaplıklarının modül yollarını kaydeder.

Belirli bir VNDK anlık görüntü ZIP dosyası için, android-vndk-$(TARGET_ARCH).zip , VNDK önceden oluşturulmuş kitaplıkları, ABI bitliğine göre arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) adlı ayrı dizinlerde gruplanır. Örneğin, android-vndk-arm64.zip için 64 bitlik kütüphaneler arch-arm64-armv8-a altına, 32 bitlik kütüphaneler ise arch-arm-armv8-a altına yerleştirilir. Aşağıdaki örnek, bir arm64 ( TARGET_ARCH=arm64 ) VNDK anlık görüntü ZIP dosyası ( android-vndk-arm64.zip ) için dizin yapısını gösterir.

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

Satıcı anlık görüntüleri için oluşturma

Android 11, kaynak ağaçtaki Android sürümünden bağımsız olarak vendor.img oluşturmanıza olanak tanıyan satıcı anlık görüntülerini destekler. Varsayılan bir VNDK anlık görüntüsü, cihazlara yüklenebilen ve ardından çalışma zamanında satıcı C++ ikili dosyalarından bağlanabilen paylaşılan kitaplık dosyalarını ( .so ) içerir. Bu VNDK anlık görüntüsüne karşı derleme yapmak için başlık dosyaları ve dışa aktarılan bayraklar gibi ek yapılara ihtiyacınız vardır.

Yerel bir kaynak ağacından bu tür yapıtları (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, $DIST_DIR altında android-vndk-$(TARGET_ARCH).zip dosyalarını oluşturur. Aşağıdaki örnek, yapı yapılarını içeren bir arm64 VNDK anlık görüntüsü ZIP dosyasıdır. Kalın harflerle yazılmış dosyalar normal VNDK anlık görüntüsüne (Şekil 1'de gösterilmektedir) yeni eklenen dosyalardır ve JSON dosyalarını (her kitaplığın cflags saklayan) ve dışa aktarılan tüm başlık dosyalarını içerir.

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ükleme

VNDK anlık görüntüleri kaynak ağacında /prebuilts/vndk/v VER altında kontrol edilir; burada VER , VNDK anlık görüntüsünün sürümüne eşittir (ilgili Android sürümünün SDK sürümünü takip eder). Örneğin, Android 8.1 VNDK anlık görüntüsünün 27 sürümü vardır.

update.py betiğini kullanma

update.py betiği ( /development/vndk/snapshot/update.py ), kaynak ağaca önceden oluşturulmuş bir VNDK anlık görüntüsünü ekleme işlemini otomatikleştirir. Derleme yapıtlarını otomatik olarak algılar ve oluşturulan Android.bp dosyasındaki ilişkili özellikleri uygun şekilde doldurur. Bu komut dosyası aşağıdaki görevleri gerçekleştirir:

  1. /prebuilts/vndk/v VER , yeni Git dalı oluşturmak için repo start kullanır.
  2. VNDK anlık görüntü derleme yapıtlarını getirir ve sıkıştırır.
  3. Derleme dosyalarını ( Android.bp ) otomatik olarak oluşturmak için gen_buildfiles.py dosyasını çalıştırır.
  4. Genel Kamu Lisansı (GPL) kapsamında lisanslanan önceden oluşturulmuş kitaplıkların geçerli kaynak ağacında yayımlanan kaynaklara sahip olduğunu doğrulamak için check_gpl_license.py dosyasını çalıştırır.
  5. Yeni değişiklikleri gerçekleştirmek için git commit kullanır.

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

Yerel olarak oluşturulmuş VNDK anlık görüntülerini de kullanabilirsiniz. --local seçeneği belirtildiğinde, update.py betiği, development/vndk/snapshot/build.sh oluşturulan android-vndk-$(TARGET_ARCH).zip dosyalarını içeren belirtilen yerel dizinden (Android derleme sunucusu yerine) VNDK anlık görüntü derleme yapıtlarını getirir. development/vndk/snapshot/build.sh . --local seçeneği kullanıldığında, update.py betiği GPL lisans kontrolünü ve git commit adımlarını atlar.

Sözdizimi:

python update.py VER --local local_path

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

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

Yerel olarak oluşturulmuş bir 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ıtlar VNDK_SNAPSHOT_BUILD_ARTIFACTS=true ile oluşturulmuşsa yerel derleme yapıtları otomatik olarak eklenir.

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

Sistem görüntüsü, BOARD_VNDK_VERSION , PRODUCT_EXTRA_VNDK_VERSIONS ve ro.vndk.version içindeki bilgileri kullanarak derleme sırasında VNDK anlık görüntü kitaplıklarını yükler. Aşağıdaki seçeneklerden birini kullanarak, önceden oluşturulmuş VNDK anlık görüntü dizinlerinden (örneğin, /prebuilts/vndk/v29 veya /prebuilts/vndk/v30 ) hangi VNDK anlık görüntülerinin yükleneceğini kontrol edebilirsiniz.

  • Seçenek 1: BOARD_VNDK_VERSION . Geçerli satıcı modüllerini oluşturmak için anlık görüntü modüllerini kullanın ve yalnızca satıcı modülleri için gerekli olan anlık görüntü modüllerini yükleyin.
  • 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, PRODUCT_EXTRA_VNDK_VERSIONS listelenen önceden oluşturulmuş VNDK anlık görüntülerini, derleme sırasında başka herhangi bir modüle bağlamadan yükler.

BOARD_VNDK_VERSION ayarı

BOARD_VNDK_VERSION mevcut satıcı modüllerinin oluşturulması gereken VNDK sürümünü gösterir. BOARD_VNDK_VERSION /prebuilts/vndk dizininde kullanılabilir bir VNDK anlık görüntüsü sürümü varsa, BOARD_VNDK_VERSION belirtilen VNDK anlık görüntüsü yüklenir. VNDK anlık görüntüsü dizinde mevcut değilse bir derleme hatası oluşur.

BOARD_VNDK_VERSION tanımlanması aynı zamanda VNDK modüllerinin kurulmasına da olanak sağlar. Satıcı modülleri, derleme sırasında BOARD_VNDK_VERSION tanımlanan VNDK anlık görüntü sürümüne bağlanır (bu, sistem kaynağında mevcut VNDK modüllerini oluşturmaz). Kaynak ağacının tamamını bir depodan indirirken hem sistem hem de satıcı kaynakları aynı Android sürümünü temel alır.

product_EXTRA_VNDK_VERSIONS ayarı

PRODUCT_EXTRA_VNDK_VERSIONS kurulacak ekstra VNDK sürümlerini listeler. Normalde geçerli satıcı bölümü için bir VNDK anlık görüntüsünün olması yeterlidir. Ancak bazı durumlarda tek bir sistem görüntüsüne birden fazla anlık görüntü eklemeniz gerekebilir. Örneğin, GSI, tek bir sistem görüntüsüyle birden fazla satıcı sürümünü desteklemek için birden fazla anlık görüntüye sahiptir. PRODUCT_EXTRA_VNDK_VERSIONS ayarını yaparak, BOARD_VNDK_VERSION içindeki VNDK sürümüne ek olarak VNDK anlık görüntü modüllerini de yükleyebilirsiniz.

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

VNDK modülleri, oluşturma sırasında satıcı modüllerine bağlanmaz ancak satıcı bölümündeki satıcı modülleri yüklü VNDK sürümlerinden birini gerektiriyorsa çalışma zamanında kullanılabilir. PRODUCT_EXTRA_VNDK_VERSIONS yalnızca BOARD_VNDK_VERSION tanımlanmışsa geçerlidir.

PLATFORM_VNDK_VERSION

PLATFORM_VNDK_VERSION sistem kaynağındaki mevcut VNDK modülleri için VNDK sürümünü tanımlar. Değer otomatik olarak ayarlanır:

  • Yayınlanmadan önce PLATFORM_VNDK_VERSION , PLATFORM_VERSION_CODENAME olarak ayarlandı.
  • Yayınlandığında PLATFORM_SDK_VERSION , PLATFORM_VNDK_VERSION kopyalanır.

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

BOARD_VNDK_VERSION current olarak ayarlandığında, PLATFORM_VNDK_VERSION ro.vndk.version saklanır, aksi halde BOARD_VNDK_VERSION ro.vndk.version saklanır. PLATFORM_VNDK_VERSION , Android yayınlandığında SDK sürümüne ayarlanmıştır; yayınlanmadan önce, PLATFORM_VNDK_VERSION için alfasayısal Android kod adı kullanılıyordu.

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

Aşağıdaki tablo VNDK sürüm ayarlarını özetlemektedir.

SATICI
İnşa etmek
Pano
Sürüm
SDK'sı
Serbest bırakmak
platformu
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.v CODE_NAME
Sonrasında SDK_VER SDK_VER /system/apex/com.android.vndk.v SDK_VER
Önceden oluşturulmuş anlık görüntü modülleri VNDK_VER
anlık görüntü için
Önce ya da sonra CODE_NAME
veya SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.v VNDK_VER
  • Anakart Sürümü ( BOARD_VNDK_VERSION ). Satıcı modüllerinin oluşturulması için gereken VNDK sürümü. Satıcı modülleri mevcut sistem modüllerine bağlanabiliyorsa current olarak ayarlayın.
  • Platform Sürümü ( PLATFORM_VNDK_VERSION ). Mevcut sistem modüllerinin oluşturduğu VNDK sürümü. Yalnızca BOARD_VNDK_VERSION akıma eşit olduğunda oluşturulur.
  • Sürüm Özelliği ( ro.vndk.version ). Satıcı.img dosyasındaki ikili dosyalar ve kitaplıkların çalıştırılması için gereken VNDK sürümünü belirten özellik. /vendor/default.prop adresindeki vendor.img dosyasında saklanır.