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

VNDK anlık görüntüsü, bir Android sürümü için VNDK-core ve VNDK-SP kitaplıkları grubudur. system.img, vendor.img tarafından ihtiyaç duyulan ilgili VNDK anlık görüntüsünü içeriyorsa yalnızca sistem bölümünü yükseltebilirsiniz.

Resmi VNDK anlık görüntüleri Android derleme sunucusunda otomatik olarak derlenir ve Android kaynak ağacının /prebuilts/vndk bölümüne kaydedilir. 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 türleri için desteklenir.

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

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

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) hedef mimarileri ile aynıdır (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT. 28 numaralı anlık görüntü sürümü (Android 9) ve sonraki sürümler için yukarıda listelenen popüler yapılandırmaları içerir.

Derleme komutları

Android 9 ve sonraki sürümlerde, resmi anlık görüntüler için vndk.mk içinde bir VNDK anlık görüntüsünü derleyip $DIST_DIR'e gönderen örnek bir hedef (vndk) bulunur. Anlık görüntü ZIP dosyası android-vndk-$(TARGET_ARCH).zip biçimini kullanır. Örnek:

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

Android derleme sunucusu, aşağıdaki komutla desteklenen tüm mimari türlerini derlemek için build.sh komut dosyasını kullanır.

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

Bir Android sürümünün VNDK anlık görüntüsü, ilgili sürümün sürüm dalından oluşturulur.

Yerel olarak derleme

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

  • Desteklenen tüm mimarileri aynı anda derlemek için aşağıdaki derleme komut dosyasını (build.sh) çalıştırı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ı

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

  • VNDK-core ve VNDK-SP paylaşılan kitaplıklarının tedarikçi varyantı.
    • LL-NDK paylaşılan kitaplıkları geriye dönük uyumlu olduğundan gerekli değildir.
    • 64 bit 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-private kitaplıklarının listesi [vndkcore|vndksp|llndk|vndkprivate].libraries.txt adresindedir.
  • Lisans dosyaları.
  • module_paths.txt. Tüm VNDK kitaplıklarının modül yollarını kaydeder. Bu, GPL projelerinin belirli bir Android kaynak ağacında yayınlanmış kaynaklara sahip olup olmadığını kontrol etmek için gereklidir.

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

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

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

Android 11, kaynak ağacındaki Android sürümünden bağımsız olarak vendor.img derlemenizi sağlayan tedarikçi firma anlık görüntülerini destekler. Varsayılan VNDK anlık görüntüsü, cihazlara yüklenebilecek ve ardından çalışma zamanında tedarikçi C++ ikili dosyalarından bağlanabilecek paylaşılan kitaplık dosyalarını (.so) içerir. Bu VNDK anlık görüntüsüne uygun derleme yapmak için başlık dosyaları ve dışa aktarılan işaretler gibi ek yapı öğelerine ihtiyacınız vardır.

Yerel bir kaynak ağacından 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, $DIST_DIR altında android-vndk-$(TARGET_ARCH).zip dosyası oluşturur. Aşağıdaki örnek, derleme yapılarını içeren bir arm64 VNDK anlık görüntü ZIP dosyasıdır. Kalın olarak yazılmış dosyalar, normal VNDK anlık görüntüsüne (Şekil 1'de gösterilmiştir) yeni eklenen dosyalardır ve JSON dosyalarını (her kitaplığın cflags'ünü depolayan) ve tüm dışa aktarılan 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, /prebuilts/vndk/vVER altındaki kaynak ağacında kontrol edilir. Burada VER, VNDK anlık görüntüsünün sürümüne (ilgili Android sürümünün SDK sürümüne göre) eşittir. Örneğin, Android 8.1 VNDK anlık görüntüsünde 27 sürümü bulunur.

update.py komut dosyasını kullanma

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

  1. /prebuilts/vndk/vVER dosyasında, 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 arşivlerini açar.
  3. Derleme dosyalarını otomatik olarak oluşturmak için gen_buildfiles.py'yi çalıştırır (Android.bp).
  4. Genel Kamu Lisansı (GPL) kapsamında lisanslanan önceden derlenmiş kitaplıkların mevcut kaynak ağacında yayınlanmış kaynaklara sahip olduğunu doğrulamak için check_gpl_license.py'ü çalıştırır.
  5. Yeni değişiklikleri kaydetmek 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ı, development/vndk/snapshot/build.sh'den oluşturulan android-vndk-$(TARGET_ARCH).zip dosyalarını içeren VNDK anlık görüntü derleme yapılarını belirtilen yerel dizinden (Android derleme sunucusunun yerine) getirir. --local seçeneğiyle update.py komut dosyası, GPL lisans kontrolünü ve git commit adımlarını atlar.

Söz dizimi:

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 derleme 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)
Öğeler VNDK_SNAPSHOT_BUILD_ARTIFACTS=true ile oluşturulduysa yerel derleme yapıları 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 VNDK anlık görüntü kitaplıklarını derleme zamanında yükler. Aşağıdaki seçeneklerden birini kullanarak önceden oluşturulmuş VNDK anlık görüntü dizinlerinden (ör. /prebuilts/vndk/v29 veya /prebuilts/vndk/v30) hangi VNDK anlık görüntülerinin yükleneceğini kontrol edebilirsiniz.

  • 1. Seçenek: BOARD_VNDK_VERSION. Mevcut tedarikçi modüllerini oluşturmak için anlık görüntü modüllerini kullanın ve yalnızca tedarikçi modülleri için gereken anlık görüntü modüllerini yükleyin.
  • 2. Seçenek: PRODUCT_EXTRA_VNDK_VERSIONS. Mevcut tedarikçi firma modüllerinden bağımsız olarak VNDK anlık görüntü modüllerini yükleyin. Bu işlem, PRODUCT_EXTRA_VNDK_VERSIONS bölümünde listelenen önceden oluşturulmuş VNDK anlık görüntülerini derleme sırasında başka modüllere bağlamadan yükler.

BOARD_VNDK_VERSION ayarlama

BOARD_VNDK_VERSION, mevcut tedarikçi modüllerinin derlenmesi için gereken VNDK sürümünü gösterir. BOARD_VNDK_VERSION dizininde /prebuilts/vndk dizininde kullanılabilen bir VNDK anlık görüntü sürümü varsa BOARD_VNDK_VERSION dizininde belirtilen VNDK anlık görüntüsü yüklenir. VNDK anlık görüntüsü dizinde yoksa derleme hatası oluşur.

BOARD_VNDK_VERSION tanımlandığında VNDK modüllerinin de yüklenmesi sağlanır. Tedarikçi modülleri, derleme sırasında BOARD_VNDK_VERSION içinde tanımlanan VNDK anlık görüntü sürümüyle bağlantı kurar (bu işlem, sistem kaynağındaki mevcut VNDK modüllerini oluşturmaz). Bir depodan kaynak ağacının tamamı indirilirken hem sistem hem de tedarikçi kaynakları aynı Android sürümünü temel alır.

PRODUCT_EXTRA_VNDK_VERSIONS ayarlama

PRODUCT_EXTRA_VNDK_VERSIONS, yüklenecek ek VNDK sürümlerini listeler. Normalde mevcut tedarikçi firma bölümü için bir VNDK anlık görüntüsüne sahip olmak 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 resmiyle birden fazla tedarikçi sürümünü desteklemek için birden fazla anlık görüntüye sahiptir. PRODUCT_EXTRA_VNDK_VERSIONS değerini ayarlayarak BOARD_VNDK_VERSION'teki VNDK sürümüne ek olarak VNDK anlık görüntü modüllerini de yükleyebilirsiniz.

PRODUCT_EXTRA_VNDK_VERSIONS'te belirli bir sürüm listesi varsa derleme sistemi, prebuilts/vndk dizininde 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.vVER) yükler. Eksik sürümler derleme hatası oluşturur.

VNDK modülleri derleme sırasında tedarikçi modülleriyle bağlantı kurmaz ancak tedarikçi bölümündeki tedarikçi 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ından önce PLATFORM_VNDK_VERSION, PLATFORM_VERSION_CODENAME olarak ayarlanır.
  • Sürüm yayınlandığında PLATFORM_SDK_VERSION, PLATFORM_VNDK_VERSION'e kopyalanır.

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

BOARD_VNDK_VERSION current olarak ayarlandığında PLATFORM_VNDK_VERSION ro.vndk.version'da, aksi takdirde BOARD_VNDK_VERSION ro.vndk.version'da saklanır. PLATFORM_VNDK_VERSION, Android yayınlandığında SDK sürümüne ayarlanır; yayınlanmadan önce PLATFORM_VNDK_VERSION için alfanümerik Android kod adı kullanılır.

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

Tabloda VNDK sürüm ayarları özetlenmiştir.

Tedarikçi
Yapı
Pano
Sürüm
SDK
Sürüm
Platform
Sürümü
Sürüm
Mülk
Dizin Yükleme
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 VNDK_VER
anlık görüntü için
Önce veya Sonra CODE_NAME
veya SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • Yönetim Kurulu Sürümü (BOARD_VNDK_VERSION). Tedarikçi modüllerinin derlenmesi için gereken VNDK sürümü. Tedarikçi modülleri mevcut sistem modülleriyle bağlantı kurabiliyorsa current olarak ayarlayın.
  • Platform Sürümü (PLATFORM_VNDK_VERSION). Mevcut sistem modüllerinin derlediği VNDK sürümü. Yalnızca BOARD_VNDK_VERSION şu anki değere eşit olduğunda oluşturulur.
  • Sürüm Mülkü (ro.vndk.version). vendor.img'deki ikili dosyaların ve kitaplıkların çalışması için gereken VNDK sürümünü belirten mülk. /vendor/default.prop tarihinde vendor.img'te depolandı.