החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
שימוש ב-VHAL עם הלקוח המקורי
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
VHAL תומך בלקוחות Java ובלקוחות מקומיים. Car Service הוא הלקוח היחיד של VHAL ב-Java. באפליקציות לרכב, משתמשים בממשקי ה-API לרכב (לדוגמה, CarPropertyManager
) כדי לגשת למאפייני VHAL במקום לתקשר ישירות עם VHAL. למעשה, SELinux חוסם גישה ישירה. פרטים נוספים זמינים במסמכי העזרה של Car API בחבילת המסמכים.
בלקוחות מקומיים, החל מ-Android 13, צריך להשתמש ב-libvhalclient
במקום להתחבר ישירות ל-VHAL. זוהי ספריית לקוח שמציגה ממשק משותף אחד, 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)
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-26 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-26 (שעון UTC)."],[],[],null,["# Use VHAL with the native client\n\nVHAL supports Java and native clients. Car Service is the only\nJava client for VHAL. For car apps, use the Car APIs (for example,\n[`CarPropertyManager`](https://developer.android.com/reference/android/car/hardware/property/CarPropertyManager))\nto access VHAL properties instead of directly communicating with\nthe VHAL. In fact, SELinux blocks direct access. For details, see the Car API documentation at\n[Package Index](https://developer.android.com/reference/android/car/packages).\n\nFor native clients, starting with Android 13, use\n[`libvhalclient`](https://android.googlesource.com/platform/packages/services/Car/+/refs/heads/android16-release/cpp/vhal/client/) instead of directly\nconnecting with VHAL. This is a client library that exposes one common interface,\n`IVhalClient.h` for AIDL and HIDL VHAL implementations. The following example shows\nhow to create a VHAL native client and use it to get a Vehicle Identification Number (VIN) number: \n\n```c++\n#include \u003cIVhalClient.h\u003e\n#include \u003cVehicleHalTypes.h\u003e\n#include \u003cVehicleUtils.h\u003e\n\nusing ::aidl::android::hardware::automotive::vehicle::VehicleProperty;\nusing ::android::frameworks::automotive::vhal::IVhalClient;\nusing ::android::hardware::automotive::vehicle::toInt;\n\nint main(int argc, char** argv) {\n auto vhalClient = IVhalClient::tryCreate();\n if (vhalClient == nullptr) {\n // handle error.\n return -1;\n }\n auto result = vhalClient-\u003egetValueSync(\n *vhalClient-\u003ecreateHalPropValue(toInt(VehicleProperty::INFO_VIN)));\n // Use result\n\n return 0;\n}\n```\n\nYou must configure SELinux policy to allow your native client to access VHAL. For example: \n\n```text\n# Define my domain\ntype my_native_daemon, domain;\n\n# Define the exec file type.\ntype my_native_daemon_exec, exec_type, file_type, system_file_type;\n\n# Initialize domain.\ninit_daemon_domain(my_native_daemon)\n\n# Allow using hwbinder for HIDL VHAL, not required if AIDL is used.\nhwbinder_use(my_native_daemon)\n# Allow using binder for AIDL VHAL\nbinder_use(my_native_daemon)\n# Allow my_native_daemon to be a VHAL client.\nhal_client_domain(my_native_daemon, hal_vehicle)\n```\n\n\u003cbr /\u003e"]]