VNDK memerlukan beberapa perubahan pada basis kode untuk memisahkan masalah antara vendor dan sistem. Gunakan panduan berikut untuk mengaktifkan VNDK di basis kode vendor/OEM.
Membangun perpustakaan sistem
Sistem build berisi beberapa jenis objek termasuk perpustakaan (bersama, statis, atau header) dan biner.
- perpustakaan
core
digunakan oleh citra sistem, pada citra sistem. Pustaka ini tidak dapat digunakan oleh pustakavendor
,vendor_available
,vndk
, atauvndk-sp
.cc_library { name: "libThatIsCore", ... }
- perpustakaan
vendor-only
(atauproprietary
) digunakan oleh gambar vendor, pada gambar vendor.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- pustaka
vendor_available
digunakan oleh image vendor, pada image vendor (mungkin berisi duplikatcore
).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- Pustaka
vndk
digunakan oleh image vendor, pada image sistem.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- Pustaka
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, } ... }
- Pustaka
llndk
digunakan oleh image sistem dan vendor.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
Saat lib ditandai sebagai vendor_available:true
, lib tersebut dibuat dua kali:
- Sekali untuk platform (dan kemudian diinstal ke
/system/lib
) - Sekali untuk vendor (dan kemudian diinstal ke
/vendor/lib
atau VNDK APEX)
Lib versi vendor dibuat dengan -D__ANDROID_VNDK__
. Komponen sistem pribadi yang mungkin berubah secara signifikan di versi Android mendatang dinonaktifkan dengan tanda ini. Selain itu, perpustakaan yang berbeda mengekspor kumpulan header yang berbeda (seperti liblog
). Opsi khusus untuk varian vendor target dapat ditentukan dalam file Android.bp
di:
target: { vendor: { … } }
Mengaktifkan VNDK untuk basis kode
Untuk mengaktifkan VNDK untuk basis kode:
- Tentukan kelayakan dengan menghitung ukuran partisi
vendor.img
dansystem.img
yang diperlukan. - Aktifkan
BOARD_VNDK_VERSION=current
. Anda dapat menambahkan keBoardConfig.mk
atau membuat komponen secara langsung (misalnya,m -j BOARD_VNDK_VERSION=current MY-LIB
).
Setelah mengaktifkan BOARD_VNDK_VERSION=current
, sistem build menerapkan persyaratan dependensi dan header berikut.
Mengelola ketergantungan
Objek vendor
yang bergantung pada komponen core
yang tidak ada di vndk
atau sebagai objek vendor
harus diselesaikan menggunakan salah satu opsi berikut:
- Ketergantungan tersebut dapat dihilangkan.
- Jika komponen
core
dimiliki olehvendor
, maka dapat ditandai sebagaivendor_available
atauvendor
. - Perubahan yang menjadikan objek inti sebagai bagian dari
vndk
dapat di-upstream ke Google.
Selain itu, jika komponen core
mempunyai ketergantungan pada komponen vendor
, maka komponen vendor
tersebut harus dijadikan komponen core
atau ketergantungan tersebut harus dihilangkan dengan cara lain (misalnya dengan menghilangkan ketergantungan atau dengan memindahkan ketergantungan tersebut ke dalam komponen vendor
. ).
Mengelola header
Ketergantungan header global harus dihapus agar sistem build mengetahui apakah akan membuat header dengan atau tanpa -D__ANDROID_VNDK__
. Misalnya, header libutils seperti utils/StrongPointer.h
masih dapat diakses menggunakan perpustakaan header libutils_headers
.
Beberapa header (seperti unistd.h
) tidak lagi dapat disertakan secara transitif namun dapat disertakan secara lokal.
Terakhir, bagian publik dari private/android_filesystem_config.h
telah dipindahkan ke cutils/android_filesystem_config.h
. Untuk mengelola header ini, lakukan salah satu hal berikut:
- Hapus ketergantungan pada
private/android_filesystem_config.h
dengan mengganti semua makroAID_*
dengan panggilangetgrnam
/getpwnam
jika memungkinkan. Misalnya:-
(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 dengan kode keras, sertakan
cutils/android_filesystem_config.h
.