إعداد بيئة تطوير متكاملة (IDE) لتطوير SDV

استوديو Android for Platform (ASfP) هو بيئة التطوير المتكاملة (IDE) المقترَحة لتطوير منصة المركبات المعرَّفة بالبرامج (SDV) في نظام التشغيل Android Automotive‏ (AAOS). يتوافق ASfP مع جميع اللغات التي تستخدمها منصة SDV في نظام التشغيل Android Automotive، بما في ذلك لغة Rust لحِزم خدمات SDV.

تتناول هذه الصفحة الإعدادات الخاصة بمركبات SDV فقط. لمزيد من المعلومات حول الميزات وسير العمل العامة في ASfP، يُرجى الاطّلاع على "استوديو Android" للمنصة.

لا تعمل ASfP إلا على نظام التشغيل Linux‏ 64 بت مع وحدات المعالجة المركزية x86-64. يمكنك استخدامه على محطة عمل Linux محلية أو في السحابة الإلكترونية. لمزيد من المعلومات حول إعداد السحابة الإلكترونية، يُرجى الاطّلاع على التطوير في السحابة الإلكترونية.

تثبيت ASfP

يبلغ الحد الأقصى التلقائي لحجم الذاكرة المؤقتة في ASfP‏ 30 غيغابايت. تستهلك فهرسة عملية الدفع في النظام الأساسي قدرًا كبيرًا من الذاكرة، خاصةً عند تشغيل أجهزة Cuttlefish متعددة الأجهزة الافتراضية على الجهاز نفسه. احرص على أن يقتصر نطاق مشروعك على الأدلة التي تعمل عليها، وعدِّل الحد الأقصى لحجم الذاكرة المؤقتة في إعدادات ذاكرة ASfP إذا لزم الأمر.

تتيح ASfP التحديثات التلقائية داخل بيئة التطوير المتكاملة (IDE). لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحديث استوديو Android for Platform. لمزيد من المعلومات حول تنزيل ASfP وتثبيته والتحقّق من متطلبات النظام، يُرجى الاطّلاع على تثبيت Android Studio for Platform.

إنشاء مشروع SDV

يجب إعداد عملية الدفع في SDV لنظام التشغيل AAOS ومزامنتها وإنشاؤها قبل البدء. لمزيد من المعلومات حول إعداد عملية الدفع، يُرجى الاطّلاع على موقع الرمز والتنزيل والإنشاء والتشغيل.

لإنشاء مشروع SDV، اتّبِع الخطوات التالية:

  1. أنشئ مشروعًا جديدًا في ASfP واختَر جذر عملية سحب SDV في AAOS كعملية سحب المستودع. لمزيد من المعلومات حول خطوات المعالج، يُرجى الاطّلاع على إنشاء مشروع أو استيراده.
  2. بعد أن تنشئ ASfP المشروع، انقر على ASfP >‏ Project >‏ Open Config لفتح ملف .asfp-project.
  3. استبدِل محتوى الملف بالمثال التالي، ثم اضبط repo على مسار صفحة الدفع:

    repo: /path/to/sdv_source
    lunch: sdv_core_cf-aosp_current-userdebug
    directories:
      include:
        -   system/software_defined_vehicle/samples
    other_languages:
      -   rust
    
  4. عدِّل lunch وdirectories للمنطقة التي تعمل فيها. للحفاظ على سرعة الفهرسة والمزامنة، يجب تضمين الأدلة التي تعدّلها بشكل نشط فقط. يسرد الجدول التالي أهداف SDV والأدلة الشائعة:

    التركيز على تطوير SDV هدف واحد (lunch) موصى بها directories
    حِزم خدمات SDV sdv_core_cf-aosp_current-userdebug دليل حِزم وكتالوج الخدمات، مثل system/software_defined_vehicle/samples
    دمج منصة SDV Core sdv_core_cf-aosp_current-userdebug system/software_defined_vehicle/middleware وsystem/software_defined_vehicle/automotive_services وdevice/google/sdv
    ‫SDV Gateway على SDV IVI sdv_ivi_cf-aosp_current-userdebug system/software_defined_vehicle/sdv_gateway وsystem/software_defined_vehicle/samples/sdv_gateway وpackages/services/Car
    ميزة "أمان العرض" على وسائط SDV sdv_media_har_cf-aosp_current-userdebug packages/services/display_safety، device/google/sdv_display_safety
    Display Safety on SDV IVI sdv_ivi_cf_ds-aosp_current-userdebug packages/apps/Car/DriverUI، packages/services/display_safety/service

    إذا كانت عملية الدفع تستخدم بيان trunk_staging، استبدِل -aosp_current-userdebug بـ -trunk_staging-userdebug. لتصفُّح رمز النظام الأساسي الأصلي أيضًا، أضِف cpp إلى other_languages. لمزيد من المعلومات حول جميع خيارات الضبط، يُرجى الاطّلاع على مَعلمات الضبط.

  5. لتطبيق التغييرات، اختَر ASfP > مزامنة > مزامنة المشروع. لمزيد من المعلومات حول أوضاع المزامنة (المزامنة الكاملة والمزامنة الجزئية والمزامنة بدون إنشاء) وتصدير أو استيراد نماذج .asfp-project القابلة للمشاركة لفريقك، يُرجى الاطّلاع على أوضاع المزامنة ونافذة أدوات Soong ونماذج المشاريع القابلة للمشاركة (التصدير والاستيراد).

نشر حِزم خدمات SDV

يتضمّن ASfP مكوّنًا إضافيًا لـ SDV ينشر ملف APEX يحتوي على حِزم الخدمات مباشرةً على جهاز SDV قيد التشغيل. يكون المكوّن الإضافي غير مفعَّل تلقائيًا. لاستخدامها، يجب تفعيل المكوّن الإضافي SDV من خلال الإعدادات > المكوّنات الإضافية. لمزيد من المعلومات حول حِزم APEX، يُرجى الاطّلاع على إنشاء حِزم الخدمات ونشرها.

تعتمد طريقة النشر على ما إذا كان ملف APEX متوفّرًا على الجهاز:

  • إذا كان APEX مثبّتًا، يمكنك نشر التغييرات مباشرةً من ASfP.
  • إذا كان ملف APEX جديدًا، يجب إعادة إنشاء صورة النظام وإعادة تشغيلها أولاً، أو استخدام صورة نظام تتضمّن المفتاح المستخدَم لتوقيع ملف APEX. بعد ذلك، يمكنك نشر التطبيق من ASfP.

لنشر حزمة APEX لحزمة خدمات، اتّبِع الخطوات التالية:

  1. شغِّل جهاز SDV باستخدام المكوّن الإضافي Cuttlefish. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تشغيل أجهزة SDV على Cuttlefish.
  2. افتح ملف apex/Android.bp لحزمة الخدمة وانقر على رمز تشغيل في الهامش بجانب مجموعة apex {.
  3. في القائمة التي تظهر، اختَر تشغيل "نشر APEX_NAME". يمكنك أيضًا إنشاء ملف APEX بدون نشره أو تغيير إعدادات التشغيل من القائمة نفسها.

تشغيل أجهزة SDV على Cuttlefish

يتضمّن ASfP مكوّنًا إضافيًا لـ Cuttlefish ينشئ أجهزة Cuttlefish محلية ويشغّلها. يتطلّب المكوّن الإضافي أداة تنسيق مضيف Cuttlefish. إذا لم يكن منسّق المضيف متاحًا، سيعرض ASfP تعليمات لإعداده.

لإنشاء جهاز SDV، اتّبِع الخطوات التالية:

  1. اختَر الأدوات > أداة إدارة الأجهزة، وانقر على +، ثم اختَر إنشاء جهاز Cuttlefish.
  2. لإنشاء إعدادات متعددة للأجهزة الافتراضية، اختَر من الإعدادات الأساسية وأنشئ أو استورِد إعداداتك، مثل SDV Core مع SDV IVI أو SDV Media مع SDV IVI لميزة "أمان العرض". لإنشاء جهاز افتراضي واحد، اختَر من عملية سحب شجرة مصدر Android المحلية بدلاً من ذلك.

لعرض جميع شاشات الأجهزة الافتراضية على شاشة واحدة والوصول إلى خيارات إضافية للأجهزة، استخدِم نافذة أدوات Cuttlefish. لفتحها، انقر على الرمز ... في اللوحة الجانبية واختَر Cuttlefish، أو ابحث عن Cuttlefish في مساعدة > البحث عن إجراء. يمكنك أيضًا الاطّلاع على شاشات العرض الفردية في الأجهزة قيد التشغيل. بما أنّ SDV Core يعمل بدون شاشة، استخدِم Logcat وTerminal لفحصه.

تصحيح الأخطاء والاختبار

يتضمّن ASfP مصحِّح أخطاء LLDB مدمجًا لرموز C++‎ وRust. لمزيد من المعلومات حول تصحيح الأخطاء والاختبار في ASfP، يُرجى الاطّلاع على تصحيح أخطاء رمز النظام الأساسي وتصحيح أخطاء رمز Rust واختبار رمز النظام الأساسي باستخدام أداة atest وتصحيح أخطاء أهداف cc_test وrust_test ضمن LLDB.

عند إرفاق برنامج تصحيح الأخطاء بحزمة خدمات، يجب إرفاقه بالعملية التي تستضيفه. تستخدم أسماء العمليات تنسيق <bundle_name>:<instance_name>، مثل OrchestratorSampleRustServiceBundle:sample-main-no-conditions. يسرد الأمر التالي العمليات المطابقة ومعرّفات العمليات الخاصة بها:

adb shell ps -A | grep <bundle_name>

لمزيد من المعلومات حول سير عمل تصحيح أخطاء SDV، مثل الاتصال بأجهزة متعددة وعرض السجلّات، يُرجى الاطّلاع على تصحيح أخطاء SDV.

تعديل ملفات VSIDL

تتضمّن ASfP خادم لغة VSIDL (vsidl-lsp). لمزيد من المعلومات حول كيفية إعداد الكتالوج لخادم اللغة، يُرجى الاطّلاع على التحديثات التلقائية للكتالوج والتكامل مع LSP. عندما يتضمّن الكتالوج ملف CATALOG_UPDATE، يوفّر المحرِّر الميزات التالية لملفات .vsidl:

  • التحقّق المباشر: يميّز المحرّر الكلمات الرئيسية في VSIDL ويعرض أخطاء في البنية وأنواع غير محلولة وأخطاء في التحقّق من VSIDLC في نافذة المشاكل. لمزيد من المعلومات حول قواعد التحقّق ورموز الخطأ، يُرجى الاطّلاع على مواصفات لغة VSIDL.
  • الإكمال التلقائي والتوثيق: يمكنك الضغط على Ctrl+Space للحصول على اقتراحات بشأن الكلمات الرئيسية والرسائل والخدمات والمواضيع والقنوات، والضغط على Ctrl+Q لعرض تعليقات التوثيق.
  • التنقّل والتنسيق: يمكنك الضغط على Ctrl+B للانتقال إلى تعريفات .vsidl أو .proto، وAlt+Shift+F7 للعثور على المراجع، وCtrl+F12 لعرض بنية الملف، وCtrl+Alt+L لتنسيق الملف.

إضافة سياق SDV للمساعدين المستندين إلى الذكاء الاصطناعي

يتضمّن ASfP الذكاء الاصطناعي في "استوديو Android" ووكيل مدمج مع أداة الإنشاء Soong وأدوات atest. لمزيد من المعلومات حول ميزات الذكاء الاصطناعي في ASfP، يُرجى الاطّلاع على التعرّف على Android Studio for Platform. لمساعدة مساعد الذكاء الاصطناعي في اتّباع قواعد SDV، أضِف ملف AGENTS.md إلى جذر كتالوج VSIDL. لمزيد من المعلومات حول ملفات الوكلاء، يُرجى الاطّلاع على المقالة تخصيص Gemini باستخدام ملفات AGENTS.md.

المثال التالي هو نقطة بداية يمكنك تكييفها مع الكتالوج الخاص بك:

# AAOS SDV service catalog rules

- Implement SDV service bundles in Rust under `services/<BundleName>/src/`.
- Keep `.proto` files limited to Protobuf `message`, `enum`, and `service` definitions. Define service bundles, APEX packaging, VM placement, and SOME/IP mappings in `.vsidl` files.
- Regenerate middleware with `vsidlc` after you change `.vsidl` or `.proto` files, and leave generated files unmodified.
- Use `PascalCase` for service bundle names and lowercase `kebab-case` for topic and channel names.
- Run `vsidlc --explain <CODE>` to look up a VSIDLC error code.