از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
از VHAL با مشتری اصلی استفاده کنید
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
VHAL از جاوا و کلاینت های بومی پشتیبانی می کند. Car Service تنها مشتری جاوا برای VHAL است. برای برنامههای خودرو، بهجای برقراری ارتباط مستقیم با VHAL، از Car API (مثلا CarPropertyManager
) برای دسترسی به ویژگیهای VHAL استفاده کنید. در واقع SELinux دسترسی مستقیم را مسدود می کند. برای جزئیات، به مستندات Car API در Package Index مراجعه کنید.
برای مشتریان بومی، با شروع اندروید 13، به جای اتصال مستقیم با VHAL، از libvhalclient
استفاده کنید. این یک کتابخانه مشتری است که یک رابط مشترک به نام 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)
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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"]]