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