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. Tatsächlich blockiert SELinux den direkten Zugriff. Weitere Informationen finden Sie in der Car API-Dokumentation im Paketindex.
Verwenden Sie für native Clients ab Android 13 libvhalclient
, anstatt direkt eine Verbindung zu VHAL herzustellen. Dies ist eine Clientbibliothek, die eine gemeinsame Schnittstelle, IVhalClient.h
, für AIDL- und HIDL-VHAL-Implementierungen bereitstellt. Im folgenden Beispiel wird gezeigt, wie Sie einen nativen VHAL-Client erstellen und damit eine Fahrzeugidentifikationsnummer (Vehicle Identification Number, VIN) 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)