ตั้งค่า IDE สำหรับการพัฒนา SDV

Android Studio for Platform (ASfP) เป็นสภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบรวม (IDE) ที่แนะนำสำหรับการพัฒนาแพลตฟอร์ม Software-Defined Vehicle (SDV) ของ Android Automotive OS (AAOS) ASfP รองรับทุกภาษาที่แพลตฟอร์ม SDV ของ AAOS ใช้ รวมถึง Rust สำหรับแพ็กเกจบริการ SDV

หน้านี้ครอบคลุมเฉพาะการตั้งค่าที่เจาะจงสำหรับ SDV เท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์และเวิร์กโฟลว์ทั่วไปของ ASfP ได้ที่ Android Studio for Platform

ASfP ทำงานบน Linux 64 บิตที่มี CPU x86-64 เท่านั้น คุณสามารถใช้เครื่องมือนี้ในเวิร์กสเตชัน Linux ในเครื่องหรือในระบบคลาวด์ก็ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าระบบคลาวด์ได้ที่การพัฒนาในระบบคลาวด์

ติดตั้ง ASfP

ASfP จะใช้ขนาดฮีปสูงสุด 30 GB เป็นค่าเริ่มต้น การจัดทำดัชนีการชำระเงินของแพลตฟอร์มใช้หน่วยความจำจำนวนมาก โดยเฉพาะเมื่อคุณเรียกใช้อุปกรณ์ Cuttlefish แบบหลาย VM ในเครื่องเดียวกันด้วย จำกัดขอบเขตโปรเจ็กต์ไว้ที่ไดเรกทอรีที่คุณทำงานอยู่ และปรับขนาดฮีปสูงสุดในการตั้งค่าหน่วยความจำ ASfP หากจำเป็น

ASfP รองรับการอัปเดตใน IDE โดยอัตโนมัติ ดูข้อมูลเพิ่มเติมได้ที่อัปเดต Android Studio สำหรับแพลตฟอร์ม ดูข้อมูลเพิ่มเติมเกี่ยวกับการดาวน์โหลดและติดตั้ง ASfP รวมถึงการตรวจสอบข้อกำหนดของระบบได้ที่ติดตั้ง Android Studio for Platform

สร้างโปรเจ็กต์ SDV

เริ่มต้น ซิงค์ และสร้างการชำระเงิน SDV ของ AAOS ก่อนเริ่ม ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าการชำระเงินได้ที่ตำแหน่งโค้ดและดาวน์โหลด สร้าง และเรียกใช้

หากต้องการสร้างโปรเจ็กต์ SDV ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างโปรเจ็กต์ใหม่ใน ASfP และเลือกรูทของ Checkout AAOS SDV เป็น Checkout ของที่เก็บ ดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนของวิซาร์ดได้ที่หัวข้อสร้างหรือนำเข้าโปรเจ็กต์
  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 sdv_core_cf-aosp_current-userdebug system/software_defined_vehicle/middleware, system/software_defined_vehicle/automotive_services, device/google/sdv
    เกตเวย์ SDV ใน 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
    ความปลอดภัยของจอแสดงผลใน IVI ของ SDV sdv_ivi_cf_ds-aosp_current-userdebug packages/apps/Car/DriverUI, packages/services/display_safety/service

    หากการชำระเงินใช้ไฟล์ Manifest 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 Host Orchestrator หากไม่มี Orchestrator ของโฮสต์ ASfP จะแสดงวิธีการตั้งค่า

หากต้องการสร้างอุปกรณ์ SDV ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกเครื่องมือ > โปรแกรมจัดการอุปกรณ์ คลิก + แล้วเลือกสร้างอุปกรณ์ Cuttlefish
  2. หากต้องการสร้างการตั้งค่า VM หลายรายการ ให้เลือกจากการกำหนดค่า Canonical แล้วสร้างหรือนำเข้าการกำหนดค่าสำหรับการตั้งค่า เช่น SDV Core ที่มี SDV IVI หรือ SDV Media ที่มี SDV IVI สำหรับความปลอดภัยในการแสดงผล หากต้องการสร้าง VM รายการเดียว ให้เลือกจากการชำระเงินซอร์สทรี Android ในเครื่องแทน

หากต้องการดูจอแสดงผล VM ทั้งหมดในหน้าจอเดียวและเข้าถึงตัวเลือกอุปกรณ์เพิ่มเติม ให้ใช้หน้าต่างเครื่องมือ Cuttlefish หากต้องการเปิด ให้เลือกไอคอน ... ในแผงด้านข้าง แล้วเลือก Cuttlefish หรือค้นหา Cuttlefish ในความช่วยเหลือ > ค้นหาการดำเนินการ นอกจากนี้ คุณยังดูจอแสดงผลแต่ละจอได้ในอุปกรณ์ที่ทำงานอยู่ เนื่องจาก SDV Core ทำงานโดยไม่มีจอแสดงผล ให้ใช้ Logcat และเทอร์มินัลเพื่อตรวจสอบ

แก้ไขข้อบกพร่องและทดสอบ

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 Language Server (vsidl-lsp) ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่าแคตตาล็อกสำหรับ Language Server ได้ที่การอัปเดตแคตตาล็อกอัตโนมัติและการผสานรวม LSP เมื่อแคตตาล็อกมีไฟล์ CATALOG_UPDATE เครื่องมือแก้ไขจะมีฟีเจอร์ต่อไปนี้สำหรับไฟล์ .vsidl

  • การตรวจสอบแบบเรียลไทม์: เครื่องมือแก้ไขจะไฮไลต์คีย์เวิร์ด VSIDL และแสดงข้อผิดพลาดทางไวยากรณ์ ประเภทที่ยังไม่ได้รับการแก้ไข และข้อผิดพลาดในการตรวจสอบ VSIDLC ในหน้าต่างปัญหา ดูข้อมูลเพิ่มเติมเกี่ยวกับกฎการตรวจสอบและรหัสข้อผิดพลาดได้ที่ข้อกำหนดภาษา VSIDL
  • การเติมข้อความอัตโนมัติและเอกสารประกอบ: คุณสามารถกด Ctrl+Space เพื่อดูคำแนะนำเกี่ยวกับคีย์เวิร์ด ข้อความ บริการ หัวข้อ และช่อง และกด Ctrl+Q เพื่อดูความคิดเห็นเกี่ยวกับเอกสารประกอบ
  • การไปยังส่วนต่างๆ และการจัดรูปแบบ: คุณสามารถกด Ctrl+B เพื่อไปยังคำจำกัดความของ .vsidl หรือ .proto, กด Alt+Shift+F7 เพื่อค้นหาการอ้างอิง, กด Ctrl+F12 เพื่อดูโครงสร้างไฟล์ และกด Ctrl+Alt+L เพื่อจัดรูปแบบไฟล์

เพิ่มบริบท SDV สำหรับผู้ช่วย AI

ASfP มี AI ใน Android Studio และ Agent ในตัวพร้อมเครื่องมือบิลด์และเครื่องมือ atest ของ Soong ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์ AI ของ ASfP ได้ที่ทำความรู้จัก Android Studio for Platform หากต้องการช่วยให้ผู้ช่วย AI ทำตามรูปแบบ SDV ให้เพิ่มไฟล์ AGENTS.md ลงในรูทของแคตตาล็อก VSIDL ดูข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ Agent ได้ที่ปรับแต่ง 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.