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

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

هر فایل باینری میزبان سرور اکشن باید مراحل زیر را انجام دهد:

  1. یک شماره توصیفگر فایل سوکت را به عنوان اولین و تنها آرگومان برنامه بپذیرید.

    این سوکت توسط launch_cvd با استفاده از socketpair با دامنه AF_LOCAL ، نوع SOCK_STREAM و پروتکل 0 ایجاد شده است.

  2. در یک حلقه، سعی کنید ۱۲۸ بایت از سوکت را بخوانید. این بایت‌ها شامل رویدادهای فشردن دکمه هستند که توسط کلاینت WebRTC با فرمت command:state ارسال می‌شوند. command مطابق با پیکربندی JSON است و state وضعیت فشردن دکمه ( down یا up ) است.

  3. برای شبیه‌سازی اقدام سفارشی، بر اساس رویدادهای ورودی عمل کنید.