لوحة التحكّم في Cuttlefish

تتضمّن واجهة متصفّح WebRTC التلقائية لواجهة Cuttlefish لوحة تحكّم تتيح المزيد من الطرق للتفاعل مع الجهاز الافتراضي.

تتضمّن لوحة التحكّم أزرارًا تلقائية لمحاكاة إجراءات الجهاز المادية المألوفة، مثل زر التشغيل أو أزرار مستوى الصوت، بالإضافة إلى إمكانية تدوير الجهاز.

الإجراءات المخصّصة

يمكنك تخصيص لوحة التحكّم لإضافة المزيد من الأزرار التي تسمح لجهازك الافتراضي بمحاكاة جهازك الفعلي بشكلٍ أقرب. يكون ذلك مفيدًا لاختبار الميزات الفريدة لجهازك، مثل زرّ جهاز أو إيماءة خاصة تؤدي إلى تنفيذ إجراء فريد في نظام التشغيل. يمكنك أيضًا استخدام الأزرار المخصّصة ل تفعيل اختبار المزيد من الميزات التي تركّز على تأكيد الجودة، مثل سلوك نظام التشغيل عندما يكون مستوى شحن البطارية في الجهاز منخفضًا.

تتضمّن لوحة التحكّم التلقائية في Cuttlefish ميزة "التوصيل" بإجراءات customized بدون الحاجة إلى تعديل مشروع 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 في ملف 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
    

تتوفّر طريقتان متوافقتان لتنفيذ إجراء مخصّص:

  • أمر 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: عنصر زر واحد يتضمّن الحقول الفرعية التالية:

خادم الإجراءات

تسمح لك خوادم الإجراءات بمزيد من التحكّم في سلوك إجراءاتك. "خادم الإجراء" هو برنامج ثنائي مضيف يستمع إلى أحداث الضغط على الأزرار من 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. اتّخاذ إجراء بشأن الأحداث الواردة لمحاكاة الإجراء المخصّص