Menggunakan VHAL dengan klien native

VHAL mendukung klien Java dan native. Car Service adalah satu-satunya klien Java untuk VHAL. Untuk aplikasi mobil, gunakan Car API (misalnya, CarPropertyManager) untuk mengakses properti VHAL, bukan berkomunikasi langsung dengan VHAL. Faktanya, SELinux memblokir akses langsung. Untuk mengetahui detailnya, lihat dokumentasi Car API di Indeks Paket.

Untuk klien native, mulai Android 13, gunakan libvhalclient, bukan terhubung langsung dengan VHAL. Library ini adalah library klien yang mengekspos satu antarmuka umum, IVhalClient.h untuk implementasi AIDL dan HIDL VHAL. Contoh berikut menunjukkan cara membuat klien native VHAL dan menggunakannya untuk mendapatkan nomor Identifikasi Kendaraan (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 Anda 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)