يعمل نظام الأنواع في VSIDLC على مستويَين: Protobuf وVSIDL. يتم استخدام Protobuf لتحديد الرسائل التي يتم تبادلها بين الناشر والمشتركين المحددين بواسطة VSIDL. تشير VSIDL إلى الأنواع التي تم تعريفها بواسطة بروتوكول buffer.
توضّح هذه الصفحة كيفية تحديد الرسائل وطُرق استدعاء الإجراء عن بُعد (RPC) والردّ على الطلبات.
تحديد الرسائل
يوضّح هذا القسم كيفية تحديد الرسائل في VSIDL وprotobuf.
يحدّد نموذج الرمز التالي رسالة TirePressure:
syntax = "proto3";
package com.android.sdv.sample.vsidl;
message TirePressure {
uint32 pressure = 1;
}
تحديد خدمات RPC
في مخزن البروتوكولات المؤقتة، تحدّد خدمة استدعاء الإجراء عن بُعد (RPC) مجموعة من الطرق التي يمكن استدعاؤها عن بُعد كما لو كانت عمليات استدعاء دالة محلية. يحدّد المثال التالي أنواع رسائل الطلبات والردود وطريقة خدمة استدعاء الإجراء عن بُعد المستخدَمة لتقديم طلب وتلقّي رد:
syntax = "proto3";
package com.google.sdv;
enum SeatHeatingLevel {
OFF = 0;
LOW = 1;
HIGH = 2;
}
// Request to set seat heating
message SetSeatHeatingRequest {
enum Seat {
DRIVER = 0;
PASSENGER = 1;
}
Seat seat = 1;
SeatHeatingLevel level = 2;
}
// Response to setting seat heating
message SetSeatHeatingResponse {
bool success = 1;
}
// Seat heating service
service SeatHeatingService {
rpc SetSeatHeating (SetSeatHeatingRequest) returns (SetSeatHeatingResponse);
}
المكان:
- يمثّل
serviceمجموعة من طرق RPC ذات الصلة. - يحدّد
rpcطريقة واحدة لاستدعاء الإجراء عن بُعد مع أنواع رسائل الإدخال والإخراج (SetSeatHeatingRequestوSetSeatHeatingResponseعلى التوالي).
ضبط عملية دمج نظام التصميم
لتمكين vsidlc من اكتشاف تعريفات protobuf والسماح لنظام التصميم في Android بتجميعها، يجب تضمين ملف Android.bp في المجلد الأعلى مستوى في دليل الكتالوج.
يجب أن يحدّد هذا الملف هدف rust_protobuf يجمع ملفات protobuf الخاصة بك (مع الامتداد .proto).
يجب أن يكون كل ملف في الكتالوج مضمّنًا في مجموعة ملفات. إذا كانت هناك عدة مجموعات ملفات في ملف Android.bp، سيختار vsidlc المجموعة الأولى.
يعرض المثال التالي استهدافًا نموذجيًا rust_protobuf لكتالوج VSIDL:
rust_protobuf {
name: "liboem_vehicle_messages",
crate_name: "oem_vehicle_messages",
source_stem: "oem_vehicle_messages_source",
protos: [
"**/*.proto",
],
rustlibs: [
"libvsidl_v1_proto_rs",
],
proto_flags: [
"-I external/protobuf/src",
],
apex_available: [
"//apex_available:platform",
"//apex_available:anyapex",
],
vendor_available: true,
product_available: true,
min_sdk_version: "35",
}
filegroup {
name: "catalog_oem_vehicle_messages",
srcs: ["**/*"],
}
المكان:
name: معرّف فريد لهدف الإصدار، ويبدأ عادةً بـlib.-
crate_name: اسم حزمة Rust التي تم إنشاؤها. protos: قائمة بجميع ملفات protobuf في الكتالوج يمكن استخدام أنماط مطابقة عامة مثل**/*.proto.rustlibs: يجب تضمينlibvsidl_v1_proto_rsلتوفير التعليقات التوضيحية والأنواع العادية لـ SDV.-
proto_flags: تُستخدَم لتحديد مسارات التضمين، وغالبًا ما يكون-I external/protobuf/srcمطلوبًا لحلّ أنواع protobuf العادية. - استبدِل
min_sdk_versionبالقيمة"35"(Android 15) لتحديد التوافق مع واجهات برمجة التطبيقات الخاصة بمنصة المركبات المحدّدة البرامج ومتطلبات مجموعة أدوات Rust. filegroup: مطلوبة لاكتشاف العناصر في وقت التصميم. يجب تضمين كل ملف VSIDL وprotobuf وAndroid.bpفيsrcsكي يتمكّن نظام التصميم من نسخها إلى بيئة الاختبار المعزولة الخاصة بالتجميع.
الخطوات التالية
لمواصلة تنفيذ بنية الخدمة، اطّلِع على تحديد بنية الخدمة.