VHAL'ı yerel istemciyle kullanma

VHAL, Java ve yerel istemcileri destekler. Car Service, VHAL için tek Java istemcisidir. Araba uygulamaları için doğrudan VHAL ile iletişim kurmak yerine VHAL özelliklerine erişmek amacıyla Car API'lerini (ör. CarPropertyManager) kullanın. Aslında SELinux doğrudan erişimi engeller. Ayrıntılar için Paket Dizini'ndeki Car API belgelerine bakın.

Android 13'ten itibaren, yerel istemciler için doğrudan VHAL ile bağlantı kurmak yerine libvhalclient kullanın. Bu, AIDL ve HIDL VHAL uygulamaları için IVhalClient.h adlı tek bir ortak arayüz sunan bir istemci kitaplığıdır. Aşağıdaki örnekte, VHAL yerel istemcisinin nasıl oluşturulacağı ve Araç Şase Numarası (VIN) almak için nasıl kullanılacağı gösterilmektedir:

#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 politikasını, yerel istemcinizin VHAL'e erişmesine izin verecek şekilde yapılandırmanız gerekir. Örneğin:

# 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)