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 deTARGET_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.

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:
/prebuilts/vndk/vVER
dosyasında, yeni Git dalı oluşturmak içinrepo start
kullanılır.- VNDK anlık görüntü derleme yapılarını getirir ve arşivlerini açar.
- Derleme dosyalarını otomatik olarak oluşturmak için
gen_buildfiles.py
'yi çalıştırır (Android.bp
). - 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. - 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)
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ı kurabiliyorsacurrent
olarak ayarlayın. - Platform Sürümü (
PLATFORM_VNDK_VERSION
). Mevcut sistem modüllerinin derlediği VNDK sürümü. YalnızcaBOARD_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
tarihindevendor.img
'te depolandı.