แผงควบคุมหมึกกระดอง

อินเทอร์เฟซเบราว์เซอร์ WebRTC เริ่มต้นสำหรับ Cuttlefish มีแผงควบคุมที่ช่วยให้สามารถโต้ตอบกับอุปกรณ์เสมือนได้มากขึ้น

แผงควบคุมมีปุ่มเริ่มต้นเพื่อจำลองการดําเนินการทั่วไปของอุปกรณ์ เช่น ปุ่มเปิด/ปิดหรือปุ่มปรับระดับเสียง รวมถึงการหมุนอุปกรณ์

การทำงานที่กำหนดเอง

คุณสามารถปรับแต่งแผงควบคุมเพื่อเพิ่มปุ่มอื่นๆ ที่ช่วยให้การจําลองอุปกรณ์เสมือนจริงทํางานได้ใกล้เคียงกับอุปกรณ์จริงมากขึ้น ซึ่งมีประโยชน์สำหรับการทดสอบฟีเจอร์เฉพาะของอุปกรณ์ เช่น ปุ่มฮาร์ดแวร์หรือท่าทางสัมผัสพิเศษที่เรียกให้ระบบปฏิบัติการดำเนินการอย่างใดอย่างหนึ่ง นอกจากนี้ คุณยังใช้ปุ่มที่กำหนดเองเพื่อเปิดใช้การทดสอบฟีเจอร์ที่เน้น QA มากขึ้นได้ด้วย เช่น ลักษณะการทำงานของระบบปฏิบัติการเมื่อแบตเตอรี่ของอุปกรณ์เหลือน้อย

แผงควบคุมเริ่มต้นของ Cuttlefish จะรองรับการใช้งานที่กําหนดเองแบบ "เสียบ" ได้โดยไม่จําเป็นต้องแก้ไขโปรเจ็กต์หลักของ Cuttlefish AOSP อุปกรณ์เสมือนต้องมีไฟล์การกําหนดค่าขั้นต่ำเท่านั้นจึงจะเริ่มใช้การดําเนินการที่กำหนดเองได้ ดูตัวอย่างไฟล์การกําหนดค่าการดําเนินการที่กําหนดเองนี้

  1. สร้างไฟล์ JSON ที่กำหนดการดำเนินการที่กำหนดเองของอุปกรณ์ คุณสามารถใส่ไฟล์นี้ไว้ในไดเรกทอรีใดก็ได้ที่คุณเป็นเจ้าของ โครงสร้างของไฟล์นี้อธิบายไว้ในส่วน ADB shell และ Action Server

  2. สร้างโมดูล prebuilt_etc_host สำหรับการกำหนดค่า JSON ตรวจสอบว่า sub_dir เท่ากับ cvd_custom_action_config

    prebuilt_etc_host {
        // Use any name you choose.
        name: "my_custom_action_config.json",
        src: "my_custom_action_config.json",
        // Always use this sub_dir.
        sub_dir: "cvd_custom_action_config",
    }
    
  3. ตั้งค่าตัวแปรบิลด์การกำหนดค่า Soong ในไฟล์สร้างผลิตภัณฑ์ของอุปกรณ์เพื่อกำหนดค่าแพ็กเกจโฮสต์อุปกรณ์เสมือนเพื่อรวมไฟล์การกำหนดค่าการดำเนินการแบบกำหนดเอง

    # Set these variables exactly as shown here to enable the host package to see
    # your custom config module name.
    SOONG_CONFIG_NAMESPACES += cvd
    SOONG_CONFIG_cvd += custom_action_config
    
    # Set this value to the name of your JSON module.
    SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
    

การดำเนินการที่กำหนดเองมี 2 วิธีดังนี้

  • คำสั่งเชลล์ ADB
  • เซิร์ฟเวอร์การดำเนินการ

ไฟล์การกําหนดค่า JSON สามารถกําหนดอินสแตนซ์ของการใช้งานแต่ละประเภทได้หลายรายการ

คำสั่ง Shell ของ ADB

คุณกำหนดปุ่มเดียวที่จะนำมาใช้ได้โดยการเรียกใช้คำสั่ง adb shell เพียงคำสั่งเดียว เช่น ข้อมูลโค้ด JSON ต่อไปนี้ระบุปุ่มเดียวที่เปิดหน้าเว็บ

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

ช่องต่างๆ มีดังนี้

  • shell_command: คําสั่งที่จะเรียกใช้ใน adb shell เมื่อมีการกดปุ่ม
  • button: ออบเจ็กต์ปุ่มเดียวที่มีฟิลด์ย่อยต่อไปนี้
    • command: ชื่อที่ไม่ซ้ำกันของปุ่มนี้
    • title: ชื่อข้อความแสดงแทนสำหรับปุ่มนี้
    • icon_name: ชื่อไอคอนจาก https://material.io/resources/icons

เซิร์ฟเวอร์การดำเนินการ

เซิร์ฟเวอร์การดำเนินการช่วยให้คุณควบคุมลักษณะการทํางานของการดำเนินการได้มากขึ้น เซิร์ฟเวอร์การดำเนินการคือไบนารีของโฮสต์ที่คอยตรวจจับเหตุการณ์การกดปุ่มจาก WebRTC โดยใช้คู่ซ็อกเก็ต WebRTC จะส่งต่อเหตุการณ์ไปยังเซิร์ฟเวอร์การดำเนินการ จากนั้นเซิร์ฟเวอร์การดำเนินการจะเลือกวิธีใช้การดำเนินการ

เซิร์ฟเวอร์การดำเนินการช่วยให้มีการควบคุมที่มีประสิทธิภาพมากขึ้น เช่น การรักษาสถานะ (เช่น สำหรับเหตุการณ์แบบสลับได้) หรือแม้กระทั่งการเรียกใช้ "เมตาการดำเนินการ" เช่น การหยุดทำงานของอุปกรณ์ปัจจุบัน การเปิดใช้อุปกรณ์เพิ่มเติม หรือการเริ่มใช้ส่วนขยายเบราว์เซอร์สำหรับบันทึกหน้าจอ ขีดจำกัดอยู่ที่สิ่งที่คุณตัดสินใจนำไปใช้ภายในไบนารีของโฮสต์เท่านั้น

ข้อมูลโค้ด JSON ต่อไปนี้จะกำหนดเซิร์ฟเวอร์การดำเนินการที่คอยฟังเหตุการณ์บนปุ่ม 2 ปุ่ม

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

ฟิลด์ดังกล่าวมีดังนี้

  • server: ชื่อโมดูลไบนารีของโฮสต์
  • buttons: อาร์เรย์ของปุ่มที่มีช่องย่อยเหมือนกับด้านบน

หลังจากอัปเดตการกำหนดค่า JSON ให้ต่อท้ายชื่อของโมดูลเซิร์ฟเวอร์การดำเนินการในตัวแปรบิลด์การกำหนดค่า Soong cvd_custom_action_servers เช่น

# Append to this variable exactly as shown here.
SOONG_CONFIG_cvd += custom_action_servers

# Append the name of your action server(s) to this variable.
SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server

ไบนารีของโฮสต์เซิร์ฟเวอร์การดำเนินการแต่ละรายการควรดำเนินการตามขั้นตอนต่อไปนี้

  1. ยอมรับหมายเลขตัวระบุไฟล์ซ็อกเก็ตเป็นอาร์กิวเมนต์โปรแกรมแรกและอาร์กิวเมนต์เดียว

    ซ็อกเก็ตนี้สร้างขึ้นโดย launch_cvd โดยใช้ socketpair ที่มีโดเมน AF_LOCAL ประเภท SOCK_STREAM และโปรโตคอล 0

  2. ในลูป ให้พยายามอ่าน 128 ไบต์จากซ็อกเก็ต ไบต์เหล่านี้ประกอบด้วยเหตุการณ์การกดปุ่มที่ส่งโดยไคลเอ็นต์ WebRTC ในรูปแบบ command:state command คือค่าที่ระบุไว้ในการกำหนดค่า JSON และ state คือสถานะการกดปุ่ม (down หรือ up)

  3. ดำเนินการกับเหตุการณ์ที่เข้ามาเพื่อจำลองการดำเนินการที่กำหนดเอง