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

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

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

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

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

تتضمن لوحة تحكم 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 : كائن ذو زر واحد يحتوي على الحقول الفرعية التالية:

خادم العمل

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