VHAL mit dem nativen Client verwenden

VHAL unterstützt Java- und native Clients. Car Service ist der einzige Java-Client für VHAL. Verwenden Sie für Auto-Apps die Car APIs (z. B. CarPropertyManager), um auf VHAL-Eigenschaften zuzugreifen, anstatt direkt mit der VHAL zu kommunizieren. SELinux blockiert den direkten Zugriff. Weitere Informationen finden Sie in der Car API-Dokumentation unter Package Index.

Bei nativen Clients sollte ab Android 13 libvhalclient anstelle einer direkten Verbindung mit VHAL verwendet werden. Dies ist eine Clientbibliothek, die eine gemeinsame Schnittstelle, IVhalClient.h, für AIDL- und HIDL-VHAL-Implementierungen bereitstellt. Das folgende Beispiel zeigt, wie Sie einen nativen VHAL-Client erstellen und damit eine Fahrzeugidentifikationsnummer (FIN) abrufen:

#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;
}

Sie müssen die SELinux-Richtlinie so konfigurieren, dass Ihr nativer Client auf VHAL zugreifen kann. Beispiel:

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