Tedarikçi Yerel Geliştirme Kiti (VNDK), tedarikçi ve sistem arasındaki endişeleri ayırmak için kod tabanında çeşitli değişiklikler yapılmasını gerektirir. Tedarikçi/OEM kod tabanında VNDK'yı 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ürlerini içerir.

1. şekil. Sistem kitaplıkları oluşturun.
core
kitaplıkları, sistem görüntüsünde sistem görüntüsü tarafından 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ı, satıcı resminde satıcı resmi tarafından kullanılır.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
vendor_available
kitaplıkları, tedarikçi resminde ve tedarikçi resminde (core
öğesinin kopyalarını içerebilir) kullanılıyor.cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
vndk
kitaplıkları, sistem görüntüsünde satıcı görüntüsü tarafından kullanılır.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
vndk-sp
kitaplıkları, satıcı resmi 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 satıcı 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 oluşturulur:
- Platform için bir kez (bu nedenle
/system/lib
'ya 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 grubu (ör. liblog
) dışa aktarır. Bir hedefin satıcı varyantına özgü seçenekler, Android.bp
dosyasında 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
öğesine ekleyebilir veya doğrudan bileşenler 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ı zorunlu kılar.
Bağımlılıkları yönetme
vndk
'de veya vendor
nesnesi olarak bulunmayan bir core
bileşenine bağlı olan bir vendor
nesnesi, aşağıdaki seçeneklerden biri kullanılarak çözülmelidir:
- Bağımlılık kaldırılabilir.
core
bileşenivendor
'ye aitsevendor_available
veyavendor
olarak işaretlenebilir.- Temel nesneyi
vndk
'nın parçası haline getiren bir değişiklik Google'a gönderilebilir.
Ayrıca, bir core
bileşeninin bir vendor
bileşenine bağımlılıkları varsa vendor
bileşeni core
bileşenine dönüştürülmeli 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 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ının kaldırılması gerekir.
Örneğin, utils/StrongPointer.h
gibi libutils üstbilgilerine, üstbilgi kitaplığı libutils_headers
kullanılarak erişilebilir.
Bazı başlıklar (ör. unistd.h
) artık geçişli olarak dahil edilemez ancak yerel olarak dahil edilebilir.
Son olarak, private/android_filesystem_config.h
adresinin herkese açık kısmı cutils/android_filesystem_config.h
adresine taşındı. Bu başlıkları yönetmek için aşağıdakilerden birini yapın:
- Mümkünse tüm
private/android_filesystem_config.h
makrolarınıgetgrnam
/getpwnam
çağrılarıyla değiştirerekprivate/android_filesystem_config.h
bağımlılığını kaldırın.AID_*
Ö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
öğesini ekleyin.