อินเทอร์เฟซเบราว์เซอร์ WebRTC เริ่มต้นสำหรับ Cuttlefish มีแผงควบคุมที่ช่วยให้มีวิธีโต้ตอบกับอุปกรณ์เสมือนจริงได้มากขึ้น
แผงควบคุมมีปุ่มเริ่มต้นเพื่อจำลองการทำงานของอุปกรณ์จริงที่ใช้กันทั่วไป เช่น ปุ่มเปิด/ปิดหรือปุ่มปรับระดับเสียง รวมถึงการหมุนอุปกรณ์
การทำงานที่กำหนดเอง
คุณสามารถปรับแต่งแผงควบคุมเพื่อเพิ่มปุ่มต่างๆ ที่ช่วยให้อุปกรณ์เสมือนเลียนแบบอุปกรณ์จริงได้มากขึ้น ซึ่งมีประโยชน์สำหรับการทดสอบฟีเจอร์เฉพาะของอุปกรณ์ เช่น ปุ่มกดหรือท่าทางสัมผัสพิเศษที่ทริกเกอร์การทำงานที่ไม่ซ้ำกันในระบบปฏิบัติการ นอกจากนี้ คุณยังใช้ปุ่มที่กำหนดเองเพื่อเปิดใช้การทดสอบฟีเจอร์ที่เน้นการประกันคุณภาพมากขึ้น เช่น ลักษณะการทำงานของระบบปฏิบัติการเมื่อแบตเตอรี่ของอุปกรณ์เหลือน้อย
แผงควบคุม Cuttlefish เริ่มต้นรองรับการ "เสียบ" การทำงานที่กำหนดเอง โดยไม่ต้องแก้ไขโปรเจ็กต์ Cuttlefish AOSP หลัก อุปกรณ์เสมือนจริงของคุณต้องมีเพียงไฟล์การกำหนดค่าขั้นต่ำเพื่อเริ่มใช้การทำงานที่กำหนดเอง ดูไฟล์การกำหนดค่าการทำงานที่กำหนดเองตัวอย่างนี้
สร้างไฟล์ JSON ที่กำหนดการทำงานที่กำหนดเองของอุปกรณ์ คุณสามารถวางไฟล์นี้ไว้ในไดเรกทอรีใดก็ได้ที่คุณเป็นเจ้าของ โครงสร้างของไฟล์นี้อธิบายไว้ในส่วน ADB Shell และ เซิร์ฟเวอร์การทำงาน
สร้างโมดูล
prebuilt_etc_hostสำหรับการกำหนดค่า JSON ตรวจสอบว่าsub_dirเท่ากับcvd_custom_action_configprebuilt_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", }ตั้งค่าตัวแปรการสร้างการกำหนดค่า Soong ในไฟล์ Product Makefile ของอุปกรณ์เพื่อกำหนดค่าแพ็กเกจโฮสต์ของอุปกรณ์เสมือนจริงให้รวมไฟล์การกำหนดค่าการทำงานที่กำหนดเอง
# 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 Shell
- เซิร์ฟเวอร์การทำงาน
ไฟล์การกำหนดค่า JSON สามารถกำหนดอินสแตนซ์หลายรายการของการติดตั้งใช้งานแต่ละประเภท
คำสั่ง ADB Shell
คุณสามารถกำหนดปุ่มเดียวที่ติดตั้งใช้งานโดยการเรียกใช้คำสั่ง 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
ไบนารีโฮสต์ของเซิร์ฟเวอร์การทำงานแต่ละรายการควรทำตามขั้นตอนต่อไปนี้
ยอมรับหมายเลขตัวบอกไฟล์ซ็อกเก็ตเป็นอาร์กิวเมนต์โปรแกรมแรกและอาร์กิวเมนต์เดียว
launch_cvdสร้างซ็อกเก็ตนี้โดยใช้socketpairที่มีโดเมนAF_LOCAL, ประเภทSOCK_STREAMและโปรโตคอล 0ในลูป ให้พยายามอ่าน 128 ไบต์จากซ็อกเก็ต ไบต์เหล่านี้มีเหตุการณ์การกดปุ่มที่ไคลเอ็นต์ WebRTC ส่งในรูปแบบ
command:statecommandเป็นไปตามที่ระบุในการกำหนดค่า JSON และstateคือสถานะการกดปุ่ม (downหรือup)ดำเนินการกับเหตุการณ์ที่เข้ามาเพื่อจำลองการทำงานที่กำหนดเอง