Vendor Native Development Kit (VNDK) memerlukan beberapa perubahan pada codebase untuk memisahkan kekhawatiran antara vendor dan sistem. Gunakan panduan berikut untuk mengaktifkan VNDK di vendor/OEM saat ini.
Membangun library sistem
Sistem build berisi beberapa jenis objek termasuk library (bersama, statis, atau header) dan biner.
Gambar 1. Bangun library sistem.
- Library
core
digunakan oleh image sistem, pada image sistem. Ini library tidak dapat digunakan olehvendor
,vendor_available
,vndk
, atauvndk-sp
library.cc_library { name: "libThatIsCore", ... }
- Library
vendor-only
(atauproprietary
) digunakan oleh gambar vendor, pada gambar vendor.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- Library
vendor_available
digunakan oleh image vendor, di vendor gambar (mungkin berisi duplikat daricore
).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- Library
vndk
digunakan oleh image vendor, di image sistem.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- Library
vndk-sp
digunakan oleh image vendor, dan juga oleh image sistem secara tidak langsung.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
- Library
llndk
digunakan oleh image sistem dan vendor.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
Jika library ditandai sebagai vendor_available:true
, library tersebut telah dibuat
dua kali:
- Sekali untuk platform (dan diinstal ke
/system/lib
) - Sekali untuk vendor (dan dengan demikian diinstal ke
/vendor/lib
atau VNDK APEX)
Versi vendor library dibuat dengan -D__ANDROID_VNDK__
.
Komponen sistem pribadi yang mungkin berubah secara signifikan dalam versi mendatang
Android dinonaktifkan dengan tanda ini. Selain itu, pustaka yang berbeda mengekspor
kumpulan header yang berbeda (seperti liblog
). Opsi khusus untuk
varian vendor dari target dapat ditentukan dalam file Android.bp
dalam:
target: { vendor: { … } }
Mengaktifkan VNDK untuk codebase
Untuk mengaktifkan VNDK untuk codebase:
- Tentukan kelayakan dengan menghitung ukuran yang diperlukan
Partisi
vendor.img
dansystem.img
. - Aktifkan
BOARD_VNDK_VERSION=current
. Anda dapat menambahkan keBoardConfig.mk
atau buat komponen dengannya secara langsung (misalnya,m -j BOARD_VNDK_VERSION=current MY-LIB
).
Setelah mengaktifkan BOARD_VNDK_VERSION=current
, sistem build
memberlakukan persyaratan dependensi dan header berikut.
Mengelola dependensi
Objek vendor
yang bergantung pada komponen core
yang tidak ada di vndk
atau sebagai objek vendor
harus diselesaikan menggunakan salah satu opsi berikut:
- Dependensi dapat dihapus.
- Jika komponen
core
dimiliki olehvendor
, komponen tersebut dapat ditandai sebagaivendor_available
atauvendor
. - Perubahan yang menjadikan objek inti sebagai bagian dari
vndk
mungkin di-upstream ke Google.
Selain itu, jika komponen core
memiliki dependensi pada
Komponen vendor
, komponen vendor
harus dibuat
ke dalam komponen core
atau dependensi harus
dihapus dengan cara lain (misalnya, dengan menghapus dependensi atau dengan memindahkan
dependensi ke dalam komponen vendor
).
Kelola header
Dependensi header global harus dihapus agar sistem build mengetahuinya
apakah akan membuat header dengan atau tanpa -D__ANDROID_VNDK__
.
Misalnya, header libutils seperti utils/StrongPointer.h
dapat
masih dapat diakses menggunakan library header
libutils_headers
.
Beberapa header (seperti unistd.h
) tidak dapat lagi disertakan secara transitif
tetapi dapat disertakan secara lokal.
Terakhir, bagian publik dari private/android_filesystem_config.h
telah dipindahkan ke cutils/android_filesystem_config.h
. Untuk mengelola
{i>header<i} ini, lakukan salah satu hal berikut:
- Hapus dependensi untuk
private/android_filesystem_config.h
dengan mengganti semuaAID_*
makro dengangetgrnam
/ Panggilangetpwnam
jika memungkinkan. Contoh:(uid_t)AID_WIFI
menjadigetpwnam("wifi")->pw_uid
.(gid_t)AID_SDCARD_R
menjadigetgrnam("sdcard_r")->gr_gid
.
private/android_filesystem_config.h
. - Untuk AIS hard code, sertakan
cutils/android_filesystem_config.h
.