رابط کاربری پیشفرض مرورگر WebRTC برای Cuttlefish شامل یک پنل کنترل است که روشهای بیشتری برای تعامل با دستگاه مجازی را فراهم میکند.
پنل کنترل دارای دکمههای پیشفرض برای شبیهسازی عملکردهای رایج دستگاه فیزیکی مانند دکمه پاور یا دکمههای تنظیم صدا و همچنین چرخش دستگاه است.
اقدامات سفارشی
شما میتوانید پنل کنترل را سفارشی کنید تا دکمههای بیشتری اضافه کنید که به دستگاه مجازی شما اجازه میدهد تا دستگاه فیزیکی شما را دقیقتر شبیهسازی کند. این برای آزمایش ویژگیهای منحصر به فرد دستگاه شما، مانند یک دکمه سختافزاری یا حرکت ویژهای که یک عمل منحصر به فرد را در سیستم عامل فعال میکند، مفید است. همچنین میتوانید از دکمههای سفارشی برای فعال کردن آزمایش ویژگیهای متمرکز بر QA مانند رفتار سیستم عامل خود در هنگام کم بودن باتری دستگاه استفاده کنید.
کنترل پنل پیشفرض Cuttlefish شامل پشتیبانی از «وصل کردن» اقدامات سفارشی بدون نیاز به تغییر پروژه اصلی Cuttlefish AOSP است . دستگاه مجازی شما برای شروع استفاده از اقدامات سفارشی، فقط به یک فایل پیکربندی حداقلی نیاز دارد. به این مثال از فایل پیکربندی اقدام سفارشی مراجعه کنید.
یک فایل 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 را در فایل ساخت محصول دستگاه خود تنظیم کنید تا بسته میزبان دستگاه مجازی را طوری پیکربندی کنید که فایل پیکربندی اکشن سفارشی شما را شامل شود.
# 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
دو روش پشتیبانی شده برای پیادهسازی یک اقدام سفارشی وجود دارد:
- دستور پوسته ADB
- سرور اکشن
فایل پیکربندی JSON شما میتواند چندین نمونه از هر نوع پیادهسازی را تعریف کند.
دستور پوسته 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 زیر یک سرور اکشن را تعریف میکند که به رویدادهای روی دو دکمه گوش میدهد:
{
"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، نام ماژول action server را به متغیر ساخت پیکربندی 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 ایجاد شده است.در یک حلقه، سعی کنید ۱۲۸ بایت از سوکت را بخوانید. این بایتها شامل رویدادهای فشردن دکمه هستند که توسط کلاینت WebRTC با فرمت
command:stateارسال میشوند.commandمطابق با پیکربندی JSON است وstateوضعیت فشردن دکمه (downیاup) است.برای شبیهسازی اقدام سفارشی، بر اساس رویدادهای ورودی عمل کنید.