پنل کنترل سگ ماهی

رابط پیش‌فرض مرورگر 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
    

دو روش پشتیبانی شده برای اجرای یک اقدام سفارشی وجود دارد:

  • دستور پوسته 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، نام ماژول سرور اکشن را به متغیر ساخت پیکربندی 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. روی رویدادهای دریافتی برای شبیه سازی اقدام سفارشی عمل کنید.