VNDK anlık görüntüleri, sistem ve tedarikçi firma resimleri Android'in farklı sürümlerinden derlendiğinde bile tedarikçi firma resimlerine doğru VNDK kitaplıklarını sağlamak için bir sistem resmi tarafından kullanılabilir. VNDK anlık görüntüsü oluşturmak için VNDK kitaplıklarının anlık görüntü olarak yakalanması ve bir sürüm numarasıyla işaretlenmesi gerekir. Satıcı resmi, satıcı resmindeki modüller için gerekli ABI'leri sağlayan belirli bir VNDK sürümüne bağlanabilir. Ancak aynı VNDK sürümünde VNDK kitaplıkları ABI kararlı olmalıdır.
VNDK anlık görüntü tasarımı, mevcut sistem görüntüsünden VNDK anlık görüntüsünün önceden oluşturulmuş sürümlerini oluşturma ve bu önceden oluşturulmuş kitaplıkları daha yeni bir Android sürümünün sistem bölümüne yükleme yöntemlerini içerir.
VNDK kitaplıkları hakkında
Android 8.0'da kullanıma sunulan HIDL-HAL'ler, sistem ve tedarikçi bölümleri için ayrı yükseltmeler yapılmasına olanak tanır. VNDK, tedarikçi koduyla bağlantı kurabileceği kitaplık gruplarını (VNDK-core, VNDK-SP ve LL-NDK) tanımlar ve tedarikçi firmaların VNDK grubunda olmayan kitaplıkları kullanmasını engeller. Sonuç olarak, sistem görüntüsünde uygun VNDK grupları tedarikçi görüntüsüne sağlanırsa tedarikçi görüntüsünü derleyip çalıştırabilirsiniz.
VNDK-core
VNDK-core kitaplık grubu /system/lib[64]/vndk-${VER}
'e yüklenir ve yalnızca API düzeyi ${VER}
'a eşit olan tedarikçi firma süreçleri tarafından kullanılabilir. Sistem işlemleri bu kitaplıkları kullanamaz ve bunun yerine /system/lib[64]
'e yüklenen kitaplıkları kullanmalıdır. Her işlem için katı bir ad alanı kısıtlaması olduğundan VNDK çekirdek kitaplıkları çift yüklemeye karşı korunur.
VNDK-core'a kitaplık eklemek için Android.bp
bölümüne aşağıdakileri ekleyin:
vendor_available: true, vndk: { enabled: true, },
VNDK-SP
VNDK-SP kitaplıkları /system/lib[64]/vndk-sp-${VER}
içine yüklenir ve tedarikçi firma işlemleri ile sistem işlemleri tarafından kullanılabilir (tedarikçi firma bölümüne yüklenen SP-HAL kitaplıkları aracılığıyla). VNDK-SP kitaplıkları çift yüklenebilir.
VNDK-SP'ye kitaplık eklemek için Android.bp
bölümüne aşağıdakileri ekleyin:
vendor_available: true, vndk: { enabled: true, support_system_process: true, },
LL-NDK
LL-NDK kitaplıkları /system/lib[64]
'e yüklenir. Tedarikçi modülleri, LL-NDK kitaplıklarının önceden seçilmiş sembollerine erişmek için LL-NDK stub kitaplıklarını kullanabilir. Tedarikçi modüllerinin eski sürümlerinin LL-NDK kitaplıklarının yeni sürümlerini kullanabilmesi için LL-NDK kitaplıklarının geriye dönük uyumlu ve ABI açısından kararlı olması gerekir.
LL-NDK'nın ABI kararlı özellikleri nedeniyle, VNDK anlık görüntüsünün eski tedarikçi firma resimleri için LL-NDK kitaplıklarını içermesi gerekmez.
VNDK anlık görüntüleri hakkında
Android 8.1, kaynak kodundan derlenmiş VNDK kitaplıklarını içeriyordu. Ancak Android'in sonraki sürümlerinde, her VNDK sürümü eski bir tedarikçi görüntüsüne bağlantı oluşturmak için anlık görüntü olarak yakalanmalı ve ön derleme olarak sağlanmalıdır.
Android 9'dan itibaren Android'in yeni sürümleri, Android kaynak kodundaki eski sürümler için VNDK-core ve VNDK-SP dizinlerinin en az bir anlık görüntüsünü içerecektir. Gerekli anlık görüntüler derleme zamanında /system/lib[64]/vndk-${VER}
ve /system/lib[64]/vndk-sp-${VER}
'e (tedarikçi bölümü tarafından kullanılabilen dizinler) yüklenir. Burada ${VER}
, VNDK anlık görüntüsünün sürüm adını temsil eden dize değişkenidir.
VNDK anlık görüntü kitaplıkları her VNDK sürümü için farklı olabileceğinden VNDK anlık görüntüsü, etc/ld.config.${VER}.txt
, /etc/llndk.libraries.${VER}.txt
ve /etc/vndksp.libraries.${VER}.txt
olarak yüklenen bağlayıcı ad alanı yapılandırmalarını da içerir.
Örnek: Sistem ve tedarikçi firma resimlerini yükseltme
Anlık görüntü gerekmez; VNDK anlık görüntüleri için ek yapılandırma olmadan derleyin.
Örnek: Yalnızca sistem resmini yükseltme
Sistem görüntüsünde tedarikçi firma resmi için VNDK anlık görüntüsünü ve bağlayıcı ad alanı yapılandırma dosyalarını içermelidir. Bağlantılayıcı ad alanı yapılandırma dosyaları, /system/lib[64]/vndk-${VER}
ve /system/lib[64]/vndk-sp-${VER}
'te VNDK kitaplıklarını arayacak şekilde otomatik olarak yapılandırılır.

Örnek: Sistem resmini yükseltme, küçük tedarikçi resmi değişikliği
VNDK anlık görüntüsüne göre tedarikçi firma resmi oluşturma henüz desteklenmediğinden, tedarikçi firma resmini orijinal kaynak koduyla ayrı olarak oluşturmanız ve ardından sistem resmini önceki örnekte açıklandığı gibi yükseltmeniz gerekir.
VNDK anlık görüntü mimarisi
Android 9 sistem görüntüsünü Android 8.1 tedarikçi görüntüsüyle uyumlu hale getirmek için Android 8.1 tedarikçi görüntüsüyle eşleşen VNDK anlık görüntüsü, Android 9 sistem görüntüsüyle birlikte sağlanmalıdır (aşağıda gösterildiği gibi):

VNDK anlık görüntü tasarımı aşağıdaki yöntemleri içerir:
- VNDK-core ve VNDK-SP kitaplıkları için anlık görüntü oluşturma. Android 9, mevcut VNDK derlemesinin anlık görüntüsünü almak için kullanabileceğiniz bir komut dosyası içerir. Bu komut dosyası,
/system/lib[64]/vndk-28
ve/system/lib[64]/vndk-sp-28
'daki, mevcut kaynakla oluşturulan tüm kitaplıkları VNDK anlık görüntüsü olarak paketler. Burada28
, Android 9'un VNDK sürümüdür. Anlık görüntü, bağlayıcı ad alanı yapılandırma dosyalarını da (/etc/ld.config.28.txt
,/etc/llndk.libraries.28.txt
ve/etc/vndksp.libraries.28.txt
) içerir. Oluşturulan anlık görüntü, daha yeni Android sürümlerinde (Android 9'dan sonraki sürümler) kullanılır. - Önceden oluşturulmuş VNDK-core ve VNDK-SP kitaplıklarını bir anlık görüntüden yükleme. Android 9'da VNDK anlık görüntüsü, önceden derlenmiş bir VNDK çekirdek kitaplığı ve VNDK-SP kitaplığı grubunun yanı sıra bağlayıcı ad alanı yapılandırma dosyalarını içerir. Yüklenecek VNDK anlık görüntü sürümlerinin listesini sağladığınızda sistem görüntüsü, derleme sırasında VNDK anlık görüntü kitaplıklarını
/system/lib[64]/vndk-${VER}
ve/system/lib[64]/vndk-sp-${VER}
dizinlerine, bu VNDK anlık görüntülerinin bağlayıcı ad alanı yapılandırma dosyalarını ise/etc
dizinine yükler.
VNDK sürümlendirme
Her Android sürümünde yalnızca bir VNDK anlık görüntüsü bulunur ve SDK sürümü VNDK sürümü olarak kullanılır (yani VNDK sürümünün tam sayı bir değeri vardır (ör. Android 8.1 için 27)). Android sürümü yayınlandığında VNDK sürümü düzeltilir. Tedarikçi bölümü tarafından kullanılan VNDK sürümü, ro.vndk.version
mülkünde otomatik olarak saklanır ve çalışma zamanında okunabilir. Bu sürüm daha sonra bazı kitaplıklar için tedarikçi VNDK sürümünü ve ad alanı yapılandırması için VNDK anlık görüntü sürümünü belirlemek amacıyla kullanılır.
VNDK kitaplıkları oluşturma
make vndk
komutu, bağımlılıklar ve ad alanı yapılandırma dosyaları da dahil olmak üzere vndk:
{ enabled: true, … }
içeren kitaplıklar oluşturur. BOARD_VNDK_VERSION := current
ayarlanırsa bu kitaplıklar make
komutuyla oluşturulur.
Bu derleme, VNDK kitaplıklarını anlık görüntüden yüklemediği için yüklenen VNDK kitaplıkları ABI kararlı değildir. Ancak bir Android sürümü yayınlandığında, mevcut VNDK sürümünün ABI'si sabitlenir. Bu noktada, ABI'de meydana gelen herhangi bir kesinti bir derleme hatasıdır. Bu nedenle, Android sürümündeki yamalar VNDK kitaplıklarının ABI'sini değiştirmemelidir.