VHAL জাভা এবং নেটিভ ক্লায়েন্ট সমর্থন করে। কার সার্ভিস হলো VHAL-এর একমাত্র জাভা ক্লায়েন্ট। গাড়ির অ্যাপের জন্য, সরাসরি VHAL-এর সাথে যোগাযোগ না করে, এর প্রোপার্টিগুলো অ্যাক্সেস করতে কার এপিআই (যেমন, CarPropertyManager ) ব্যবহার করুন। প্রকৃতপক্ষে, SELinux সরাসরি অ্যাক্সেস ব্লক করে। বিস্তারিত জানতে, প্যাকেজ ইনডেক্স- এ কার এপিআই ডকুমেন্টেশন দেখুন।
অ্যান্ড্রয়েড ১৩ থেকে শুরু করে নেটিভ ক্লায়েন্টদের জন্য, সরাসরি VHAL-এর সাথে সংযোগ করার পরিবর্তে libvhalclient ব্যবহার করুন। এটি একটি ক্লায়েন্ট লাইব্রেরি যা AIDL এবং HIDL VHAL ইমপ্লিমেন্টেশনের জন্য IVhalClient.h নামক একটি সাধারণ ইন্টারফেস প্রদান করে। নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি 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; }
আপনার নেটিভ ক্লায়েন্টকে VHAL অ্যাক্সেস করার অনুমতি দেওয়ার জন্য আপনাকে অবশ্যই SELinux পলিসি কনফিগার করতে হবে। উদাহরণস্বরূপ:
# 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)