لوحة تحكم أسماك الحبار

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

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

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

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

تتضمن لوحة التحكم التلقائية لتطبيق حبَّار إمكانية تنفيذ إجراءات مخصّصة "لدمج" بدون الحاجة إلى تعديل مشروع AOSP الرئيسي على حبَّار. يجب أن يتضمّن جهازك الافتراضي الحد الأدنى من ملف الإعدادات لبدء استخدام الإجراءات المخصّصة. يُرجى الاطّلاع على مثال ملف إعداد الإجراء المخصّص هذا.

  1. أنشئ ملف JSON يحدِّد الإجراءات المخصّصة لجهازك. يمكنك وضع هذا الملف في أي دليل تملك إذن الوصول إليه. يتم توضيح بنية هذا الملف في قسمَي ADB Shell وخادم الإجراءات.

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

    # 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 Shell
  • خادم الإجراء

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