Tedarikçi Yerel Geliştirme Kiti (VNDK), tedarikçi ve sistem arasındaki endişeleri ayırmak için kod tabanınızda birkaç değişiklik yapılmasını gerektirir. VNDK'yı bir tedarikçi/OEM kod tabanında etkinleştirmek için aşağıdaki kılavuzu kullanın.
Sistem kitaplıkları oluşturma
Derleme sistemi, kitaplıklar (paylaşılan, statik veya başlık) ve ikili dosyalar dahil olmak üzere çeşitli nesne türleri içerir.

Şekil 1. Sistem kitaplıkları oluşturma
core
kitaplıkları, sistem görüntüsü tarafından sistem görüntüsünde kullanılır. Bu kitaplıklarvendor
,vendor_available
,vndk
veyavndk-sp
kitaplıkları tarafından kullanılamaz.cc_library { name: "libThatIsCore", ... }
vendor-only
(veyaproprietary
) kitaplıkları, tedarikçi firma resmi tarafından tedarikçi firma resminde kullanılır.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
vendor_available
kitaplıkları, tedarikçi firma resminde tedarikçi firma tarafından kullanılır (core
öğelerinin kopyalarını içerebilir).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
vndk
kitaplıkları, sistem görüntüsünde tedarikçi firma görüntüsü tarafından kullanılır.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
vndk-sp
kitaplıkları, tedarikçi firma resmi tarafından ve dolaylı olarak sistem resmi tarafından kullanılır.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
llndk
kitaplıkları hem sistem hem de tedarikçi firma resimleri tarafından kullanılır.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
Bir kitaplık vendor_available:true
olarak işaretlendiğinde iki kez derlenir:
- Platform için bir kez (ve dolayısıyla
/system/lib
'e yüklenir) - Tedarikçi için bir kez (ve bu nedenle
/vendor/lib
veya VNDK APEX'e yüklenir)
Kitaplıkların tedarikçi sürümleri -D__ANDROID_VNDK__
ile oluşturulur.
Android'in gelecekteki sürümlerinde önemli ölçüde değişebilecek özel sistem bileşenleri bu işaretle devre dışı bırakılır. Ayrıca, farklı kitaplıklar farklı bir üstbilgi grubunu (liblog
gibi) dışa aktarır. Bir hedefin tedarikçi varyantına özgü seçenekler, Android.bp
dosyasında aşağıdakiler için belirtilebilir:
target: { vendor: { … } }
Bir kod tabanı için VNDK'yı etkinleştirme
Bir kod tabanı için VNDK'yı etkinleştirmek üzere:
vendor.img
vesystem.img
bölümlerinin gerekli boyutlarını hesaplayarak uygunluğu belirleyin.BOARD_VNDK_VERSION=current
özelliğini etkinleştirin.BoardConfig.mk
'e ekleme yapabilir veya doğrudanBoardConfig.mk
ile bileşen oluşturabilirsiniz (örneğin,m -j BOARD_VNDK_VERSION=current MY-LIB
).
BOARD_VNDK_VERSION=current
etkinleştirildikten sonra derleme sistemi aşağıdaki bağımlılık ve başlık koşullarını uygular.
Bağımlılıkları yönetme
vndk
içinde veya vendor
nesnesi olarak bulunmayan bir core
bileşenine bağlı olan vendor
nesnesi, aşağıdaki seçeneklerden biri kullanılarak çözülmelidir:
- Bağımlılık kaldırılabilir.
core
bileşeninin sahibivendor
isevendor_available
veyavendor
olarak işaretlenebilir.- Temel nesneyi
vndk
'ün bir parçası haline getiren bir değişiklik, Google'a aktarılabilir.
Ayrıca, bir core
bileşeninin vendor
bileşenine bağımlılıkları varsa vendor
bileşeni core
bileşeni haline getirilmeli veya bağımlılık başka bir şekilde kaldırılmalıdır (örneğin, bağımlılık kaldırılarak veya bağımlılık bir vendor
bileşenine taşınarak).
Üstbilgileri yönetme
Derleme sisteminin, başlıkları -D__ANDROID_VNDK__
ile mi yoksa -D__ANDROID_VNDK__
olmadan mı derleyeceğini bilmesi için genel başlık bağımlılıkları kaldırılmalıdır.
Örneğin, utils/StrongPointer.h
gibi libutils üstbilgilerine, üstbilgi kitaplığı libutils_headers
kullanılarak yine erişilebilir.
Bazı üstbilgiler (unistd.h
gibi) artık aktarmalı olarak dahil edilemez ancak yerel olarak dahil edilebilir.
Son olarak, private/android_filesystem_config.h
hesabının herkese açık kısmı cutils/android_filesystem_config.h
hesabına taşındı. Bu üstbilgileri yönetmek için aşağıdakilerden birini yapın:
- Mümkünse tüm
AID_*
makrolarınıgetgrnam
/getpwnam
çağrılarıyla değiştirerekprivate/android_filesystem_config.h
bağımlılığını kaldırın. Örneğin:(uid_t)AID_WIFI
,getpwnam("wifi")->pw_uid
olur.(gid_t)AID_SDCARD_R
,getgrnam("sdcard_r")->gr_gid
olur.
private/android_filesystem_config.h
başlıklı makaleyi inceleyin. - Sabit kodlu AIS için
cutils/android_filesystem_config.h
değerini ekleyin.