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 deTARGET_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.
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:
-
/prebuilts/vndk/v VER
, yeni Git dalı oluşturmak içinrepo start
kullanır. - VNDK anlık görüntü derleme yapıtlarını getirir ve sıkıştırır.
- Derleme dosyalarını (
Android.bp
) otomatik olarak oluşturmak içingen_buildfiles.py
dosyasını çalıştırır. - 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. - 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ğlanabiliyorsacurrent
olarak ayarlayın. - Platform Sürümü (
PLATFORM_VNDK_VERSION
). Mevcut sistem modüllerinin oluşturduğu VNDK sürümü. YalnızcaBOARD_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
adresindekivendor.img
dosyasında saklanır.