VHAL mendukung klien Java dan native. Layanan Mobil adalah satu-satunya
klien Java untuk VHAL. Untuk aplikasi mobil, gunakan API Mobil (misalnya,
CarPropertyManager
)
untuk mengakses properti VHAL, bukan berkomunikasi langsung dengan
VHAL. Bahkan, SELinux memblokir akses langsung. Untuk mengetahui detailnya, lihat dokumentasi Car API di
Indeks Paket.
Untuk klien native, mulai Android 13, gunakan
libvhalclient
, bukan langsung
terhubung dengan VHAL. Ini adalah library klien yang mengekspos satu antarmuka umum,
IVhalClient.h
untuk implementasi VHAL AIDL dan HIDL. Contoh berikut menunjukkan
cara membuat klien native VHAL dan menggunakannya untuk mendapatkan nomor Vehicle Identification Number (VIN):
#include <IVhalClient.h> #include <VehicleHalTypes.h> #include <VehicleUtils.h> using ::aidl::android::hardware::automotive::vehicle::VehicleProperty; using ::android::frameworks::automotive::vhal::IVhalClient; using ::android::hardware::automotive::vehicle::toInt; int main(int argc, char** argv) { auto vhalClient = IVhalClient::tryCreate(); if (vhalClient == nullptr) { // handle error. return -1; } auto result = vhalClient->getValueSync( *vhalClient->createHalPropValue(toInt(VehicleProperty::INFO_VIN))); // Use result return 0; }
Anda harus mengonfigurasi kebijakan SELinux untuk mengizinkan klien native mengakses VHAL. Contoh:
# Define my domain type my_native_daemon, domain; # Define the exec file type. type my_native_daemon_exec, exec_type, file_type, system_file_type; # Initialize domain. init_daemon_domain(my_native_daemon) # Allow using hwbinder for HIDL VHAL, not required if AIDL is used. hwbinder_use(my_native_daemon) # Allow using binder for AIDL VHAL binder_use(my_native_daemon) # Allow my_native_daemon to be a VHAL client. hal_client_domain(my_native_daemon, hal_vehicle)