تحدّد البرمجيات الوسيطة للغة تعريف واجهة خدمات المركبات (VSIDL) مجموعة من مكتبات Rust التي تنشئ طبقة تجريدية فوق حزمة بروتوكولات الاتصال الخاصة بالمركبات المحدّدة بالبرامج (SDV) لتبسيط استخدام منظومة SDV المتكاملة. توفر البرامج الوسيطة طريقة موحَّدة لتتواصل الخدمات وتتفاعل مع بعضها. يستخدم كلّ من الرمز الذي تم إنشاؤه بواسطة VSIDLC والرمز المخصّص هاتين المكتبتين.
يتحقّق مترجم لغة تعريف واجهة خدمات المركبات (VSIDLC) من صحة التعريفات، وينشئ ملفات إصدار (Android.bp) تحتوي على أهداف genrule لإنتاج رمز برمجي للبرمجيات الوسيطة بلغة Rust أثناء عملية التصميم، كما ينشئ إعدادات نشر من ملفات VSIDL وprotobuf في فهرس. يعرض الشكل 1
المدخلات إلى VSIDLC والمخرجات التي تم إنشاؤها بواسطة VSIDLC:
الشكل 1: مُدخلات ومُخرجات VSIDLC
في ما يلي شرح للرسم التخطيطي:
كبيانات إدخال، عليك تقديم الملفات التالية المنظَّمة ضمن أدلة تُعرف باسم الفهارس:
- تحتوي ملفات Proto (التي تحمل الامتداد
.proto) على بنى بيانات يتم تبادلها بين وحدات الخدمة المحدّدة بواسطة VSIDL. - تحدّد ملفات VSIDL (بالامتداد
.vsidl) حِزم الخدمات ووحدات الخدمة وملكية نوع الوحدة. - تحدّد ملفات
Android.bpفي كل دليل من أدلة الكتالوجrust_protobufأهداف الإنشاء لجميع ملفات proto ضِمن الكتالوج. تستخدم VSIDLCcrate_nameالمحدّدة في هذه الاستهدافات للإشارة إلى أنواع رسائل protobuf التي تم إنشاؤها في Rust.
- تحتوي ملفات Proto (التي تحمل الامتداد
يمكنك تشغيل VSIDLC لإنشاء الملفات التالية:
يتم إنشاء ملفات
Android.bpداخل مجلد كل حزمة خدمة. في حال ضبط--genrule، ستنشئ هذه الاستهدافات ملفات Rust حديثة أثناء عملية التصميم وتتضمّن تبعيات مكتبةrust_protobufاللازمة.يتم إنشاء ملفات
service_bundle.rsلكل حزمة خدمات، وتحتوي علىstructالرئيسية ووظائف التفاعل مع مكونات البرامج الوسيطة.يتم إنشاء ملفات
lib.rsلكل خدمة RPC يملكها حزمة، ويتم وضعها في مجلد فرعي يحمل اسم خدمة RPC. وتشمل هذه الملفات ما يلي:تنفِّذ سمة
Interfaceقواعد المنطق من جهة الخادم.تُجري بنية
Clientعمليات استدعاء لخدمة RPC.يتم إنشاء ملفات
diagnostics.rsإذا كانdiagnostics_declarationمتوفّرًا في ملف VSIDL، ما يوفّر عمليات الربط اللازمة لتشخيص الأخطاء المستند إلى UDS.يتم إنشاء إعدادات النشر والأمان عند استخدام العلامة
--apex. يتم وضعها في الدليلَينapex/وconfigs/، وتشمل ملفات.textprotoالخاصة بالتنسيق وسياسات الأمان (الأذونات) المطلوبة للتواصل بين الخدمات.يتم إنشاء نموذج أولي للخدمة عند استخدام العلامة
--services. يتم وضع هذا الملف في دليلservices/ويحتوي على هيكل تطبيق Rust، بما في ذلك ملفmain.rs، لبدء عملية التنفيذ.
تشغيل VSIDLC
لتشغيل VSIDLC، اتّبِع الخطوات التالية:
إذا لم تكن قد أعددت بيئتك، شغِّل
source build/envsetup.sh.نفِّذ الأمر التالي لإنشاء VSIDLC:
m vsidlcتأكَّد من أنّ دليل كتالوج VSIDL يحتوي على ملفات الإصدار وprotobuf وVSIDL اللازمة.
نفِّذ الأمر
vsidlc:vsidlc -c path_to_catalog -o output_directory -pالمكان:
- تحدّد
-c path_to_catalogالمسار إلى دليل الفهرس الرئيسي. - يحدّد
-o output_directoryالدليل الرئيسي الذي يتم فيه إنشاء دليل الإخراجgenerated_rs. - (اختياري) تنشئ
--apexعناصر تنظيم وضبط الأمان. - (اختياري) ينشئ
--servicesهيكلاً لتطبيق Rust سريع البدء. - (اختياري) يحذف
-pالأدلة الحالية التي تم إنشاؤها (مثلgenerated_rs، وإذا كان ذلك منطبقًا،apexأوconfigsأوservices) قبل إنشاء ملفات جديدة. - (اختياري) يؤدي
--genruleإلى إنشاءAndroid.bpgenrules بدلاً من رمز Rust. تنشئ genrules رمز Rust اللازم أثناء التنفيذ عند تشغيلmلتجنُّب وضع العناصر التي تم إنشاؤها تحت التحكّم في الإصدار.
يتم إنشاء دليل
generated_rsيحتوي علىAndroid.bpوملفات البرامج الوسيطة التي تم إنشاؤها. يتم تنظيم هذا الدليل ضمن أدلة فرعية تتوافق مع الأسماء المؤهَّلة بالكامل لحِزم الخدمات المحدَّدة.- تحدّد
التعامل مع التبعيات
تنشئ أداة VSIDLC تلقائيًا رمزًا برمجيًا للكتالوج الرئيسي فقط، وليس لكتالوجات التبعية. إذا كان الكتالوج يستخدم أنواعًا أو وحدات خدمة محدّدة في كتالوجات أخرى، حدِّد مسار كل كتالوج تابع باستخدام العلامة -d:
vsidlc -c path_to_catalog -o output_directory -d dep1_path -d dep2_path ...
يجب توفير مسارات للرسم البياني الكامل للاعتمادية، بما في ذلك الاعتماديات المتعدية (الاعتماديات التابعة للاعتماديات). على سبيل المثال، لنفترض أنّ لديك شجرة تبعية الفهرس التالية:
الشكل 2: مثال على شجرة التبعية VSIDLC
لإنشاء برامج وسيطة لكل فهرس في الشجرة، يجب تنفيذ الأوامر التالية:
| قائمة المنتجات المستهدَفة | الطلبات التابعة | الأمر |
|---|---|---|
| قائمة SDV Core | لا ينطبق | vsidlc -o ./generated -c ./path/to/sdv_core_catalog |
| قائمة بيانات التشخيص | قائمة SDV Core | vsidlc -o ./generated -c ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
| كتالوج SOMEIP | قائمة بيانات التشخيص، قائمة SDV Core | vsidlc -o ./generated -c ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
| قائمة المصنّعين الأصليين | قائمة بيانات التشخيص وقائمة SOMEIP وقائمة SDV Core (بشكل متعدٍّ) | vsidlc -o ./generated -c ./path/to/oem_catalog -d ./path/to/someip_catalog -d ./path/to/diagnostics_catalog -d ./path/to/sdv_core_catalog |
تنسيق مخرجات Rust
يستخدم VSIDL تلقائيًا rustfmt لتنسيق مخرجات Rust. لكي يعمل الإعداد التلقائي بشكل صحيح، اضبط متغيّر البيئة $ANDROID_BUILD_TOP أو متغيّري البيئة RUSTFMT_PATH وRUSTFMT_TOML_PATH. لتغيير التنسيق التلقائي الذي تعرضه Rust، استخدِم الخيار --rust-formatter مع pretty-please أو none:
لتغيير تنسيق الإخراج إلى حزمة
prettyplease، استخدِم القيمةpretty-please:vsidlc -c path_to_catalog -o output_directory -p --rust-formatter pretty-pleaseلتغيير تنسيق الإخراج إلى "بلا تنسيق"، استخدِم القيمة
none:vsidlc -c path_to_catalog -o output_directory -p --rust-formatter none
الخطوات التالية
بعد إنشاء البرامج الوسيطة، اطّلِع على تنفيذ منطق نشاطك التجاري.