VNDK, satıcı ve sistem arasındaki endişeleri ayırmak için kod tabanında birkaç değişiklik yapılmasını gerektirir. Satıcı/OEM kod tabanında VNDK'yi etkinleştirmek için aşağıdaki kılavuzu kullanın.
Sistem kitaplıkları oluşturun
Derleme sistemi, kitaplıklar (paylaşılan, statik veya başlık) ve ikili dosyalar dahil olmak üzere çeşitli nesne türleri içerir.
-
core
kütüphaneler sistem görüntüsündeki 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
ait (veyaproprietary
) kitaplıklar satıcı görüntüsü tarafından satıcı görüntüsünde kullanılır.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
-
vendor_available
kitaplıkları satıcı görüntüsü tarafından satıcı görüntüsünde kullanılır (core
kopyalarını içerebilir).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
-
vndk
kitaplıkları, sistem görüntüsündeki 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ı görüntüsü tarafından ve ayrıca sistem görüntüsü tarafından dolaylı olarak 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ı görüntüleri 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:
- Bir kez platform için (ve böylece
/system/lib
yüklendi) - Satıcı için bir kez (ve dolayısıyla
/vendor/lib
veya VNDK APEX'e yüklendi)
Kitaplıkların satıcı sürümleri -D__ANDROID_VNDK__
ile oluşturulmuştur. Android'in gelecek sürümlerinde önemli ölçüde değişebilecek özel sistem bileşenleri bu bayrakla devre dışı bırakılır. Ek olarak, farklı kitaplıklar farklı başlık kümelerini ( liblog
gibi) dışa aktarır. Bir hedefin satıcı değişkenine özgü seçenekler, bir Android.bp
dosyasında şu şekilde belirtilebilir:
target: { vendor: { … } }
Kod tabanı için VNDK'yi etkinleştirme
Bir kod tabanı için VNDK'yı etkinleştirmek için:
-
vendor.img
vesystem.img
bölümlerinin gerekli boyutlarını hesaplayarak uygunluğu belirleyin. -
BOARD_VNDK_VERSION=current
etkinleştirin.BoardConfig.mk
ekleyebilir veya doğrudan onunla 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 gereksinimlerini zorunlu kılar.
Bağımlılıkları yönetme
vndk
veya vendor
nesnesi olarak bulunmayan bir core
bileşene bağımlı olan bir vendor
nesnesi, aşağıdaki seçeneklerden biri kullanılarak çözümlenmelidir:
- Bağımlılık kaldırılabilir.
-
core
bileşenvendor
aitsevendor_available
veyavendor
olarak işaretlenebilir. - Çekirdek nesneyi
vndk
parçası haline getiren bir değişiklik Google'a aktarılabilir.
Ayrıca, bir core
bileşenin bir vendor
bileşenine bağımlılıkları varsa, vendor
bileşeninin bir core
bileşen haline getirilmesi veya bağımlılığın başka bir şekilde kaldırılması gerekir (örneğin, bağımlılığın kaldırılması veya bağımlılığın bir vendor
bileşenine taşınması). ).
Başlıkları yönetme
Derleme sisteminin üstbilgileri -D__ANDROID_VNDK__
ile mi yoksa onsuz mu oluşturacağını bilmesini sağlamak için genel başlık bağımlılıkları kaldırılmalıdır. Örneğin, utils/StrongPointer.h
gibi libutils başlıklarına libutils_headers
başlık kütüphanesi kullanılarak hâlâ erişilebilir.
Bazı başlıklar ( unistd.h
gibi) artık geçişli olarak eklenemez ancak yerel olarak dahil edilebilir.
Son olarak, private/android_filesystem_config.h
dosyasının genel kısmı cutils/android_filesystem_config.h
dosyası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ştirerek,private/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
dosyasına bakın. -
- Sabit kodlu AIS için
cutils/android_filesystem_config.h
dosyasını ekleyin.