از VHAL با مشتری اصلی استفاده کنید

VHAL از جاوا و کلاینت های بومی پشتیبانی می کند. Car Service تنها مشتری جاوا برای VHAL است. برای برنامه‌های خودرو، به‌جای برقراری ارتباط مستقیم با VHAL، از Car API (مثلا CarPropertyManager ) برای دسترسی به ویژگی‌های VHAL استفاده کنید. در واقع SELinux دسترسی مستقیم را مسدود می کند. برای جزئیات، به مستندات Car API در Package Index مراجعه کنید.

برای مشتریان بومی، با شروع اندروید 13، به جای اتصال مستقیم با VHAL، از libvhalclient استفاده کنید. این یک کتابخانه مشتری است که یک رابط مشترک به نام IVhalClient.h را برای پیاده سازی های AIDL و HIDL VHAL در معرض دید قرار می دهد. مثال زیر نحوه ایجاد یک کلاینت بومی 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 را پیکربندی کنید تا به مشتری بومی شما اجازه دسترسی به 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)