يتوافق VHAL مع برامج Java والبرامج المتوافقة مع الأجهزة. Car Service هو العميل الوحيد
لـ Java في VHAL. بالنسبة إلى تطبيقات السيارات، استخدِم واجهات برمجة تطبيقات السيارات (مثل
CarPropertyManager
)
للوصول إلى سمات VHAL بدلاً من التواصل مباشرةً مع
VHAL. في الواقع، يحظر SELinux الوصول المباشر. لمعرفة التفاصيل، يُرجى الاطّلاع على مستندات Car API على
فهرس الحِزم.
بالنسبة إلى التطبيقات الأصلية، بدءًا من Android 13، استخدِم
libvhalclient
بدلاً من
الاتصال مباشرةً بواجهة برمجة التطبيقات VHAL. هذه مكتبة عملاء تعرض واجهة شائعة واحدة،
IVhalClient.h
لعمليات تنفيذ VHAL في لغة تعريف واجهة نظام Android (AIDL) وHIDL. يوضِّح المثال التالي
كيفية إنشاء عملاء أصليين لواجهة برمجة التطبيقات VHAL واستخدامهم للحصول على رقم تعريف المركبة (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; }
يجب ضبط سياسة SELinux للسماح لعميل Native Client بالوصول إلى VHAL. مثلاً:
# 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)