Vendor Native Development Kit (VNDK) memerlukan beberapa perubahan pada codebase untuk memisahkan masalah antara vendor dan sistem. Gunakan panduan berikut untuk mengaktifkan VNDK dalam codebase vendor/OEM.
Library sistem build
Sistem build berisi beberapa jenis objek, termasuk library (bersama, statis, atau header) dan biner.
Gambar 1. Library sistem build.
- Library
coredigunakan oleh image sistem, pada image sistem. Library ini tidak dapat digunakan olehvendor,vendor_available,vndk, atauvndk-splibrary.cc_library { name: "libThatIsCore", ... }
- Library
vendor-only(atauproprietary) digunakan oleh image vendor, pada image vendor.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- Library
vendor_availabledigunakan oleh image vendor, pada image vendor (mungkin berisi duplikatcore).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- Library
vndkdigunakan oleh image vendor, pada image sistem.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- Library
vndk-spdigunakan 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
llndkdigunakan oleh image sistem dan vendor.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
Jika lib ditandai sebagai vendor_available:true, lib akan di-build dua kali:
- Sekali untuk platform (dan dengan demikian diinstal ke
/system/lib) - Sekali untuk vendor (dan dengan demikian diinstal ke
/vendor/libatau VNDK APEX)
Versi vendor lib di-build dengan -D__ANDROID_VNDK__.
Komponen sistem pribadi yang mungkin berubah secara signifikan pada versi Android mendatang dinonaktifkan dengan flag ini. Selain itu, library yang berbeda mengekspor kumpulan header yang berbeda (seperti liblog). Opsi khusus untuk varian target vendor dapat ditentukan dalam file Android.bp di:
target: { vendor: { … } }Mengaktifkan VNDK untuk codebase
Untuk mengaktifkan VNDK untuk codebase:
- Tentukan kelayakan dengan menghitung ukuran partisi
vendor.imgdansystem.imgyang diperlukan. - Aktifkan
BOARD_VNDK_VERSION=current. Anda dapat menambahkan keBoardConfig.mkatau mem-build komponen dengannya secara langsung (misalnya,m -j BOARD_VNDK_VERSION=current MY-LIB).
Setelah mengaktifkan BOARD_VNDK_VERSION=current, sistem build akan menerapkan 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
coredimiliki olehvendor, komponen tersebut dapat ditandai sebagaivendor_availableatauvendor. - Perubahan yang membuat objek inti menjadi bagian dari
vndkdapat di-upstream ke Google.
Selain itu, jika komponen core memiliki dependensi pada komponen vendor, komponen vendor harus dijadikan komponen core atau dependensi harus dihapus dengan cara lain (misalnya, dengan menghapus dependensi atau dengan memindahkan dependensi ke komponen vendor).
Mengelola header
Dependensi header global harus dihapus agar sistem build mengetahui apakah akan mem-build header dengan atau tanpa -D__ANDROID_VNDK__.
Misalnya, header libutils seperti utils/StrongPointer.h 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 header ini, lakukan salah satu hal berikut:
- Hapus dependensi ke
private/android_filesystem_config.hdengan mengganti semua makroAID_*dengan panggilangetgrnam/getpwnamjika memungkinkan. Misalnya:(uid_t)AID_WIFImenjadigetpwnam("wifi")->pw_uid.(gid_t)AID_SDCARD_Rmenjadigetgrnam("sdcard_r")->gr_gid.
private/android_filesystem_config.h. - Untuk AIS yang di-hardcode, sertakan
cutils/android_filesystem_config.h.