تتضمن واجهة متصفح WebRTC الافتراضية لـ Cuttlefish لوحة تحكم تتيح المزيد من الطرق للتفاعل مع الجهاز الظاهري.
تتميز لوحة التحكم بأزرار افتراضية لمحاكاة إجراءات الجهاز الفعلية الشائعة مثل زر الطاقة أو أزرار الصوت، بالإضافة إلى تدوير الجهاز.
الإجراءات المخصصة
يمكنك تخصيص لوحة التحكم لإضافة المزيد من الأزرار التي تسمح لجهازك الافتراضي بمحاكاة جهازك الفعلي بشكل أوثق. يعد هذا مفيدًا لاختبار الميزات الفريدة لجهازك، مثل زر الجهاز أو الإيماءة الخاصة التي تؤدي إلى إجراء فريد في نظام التشغيل. يمكنك أيضًا استخدام الأزرار المخصصة لتمكين اختبار المزيد من الميزات التي تركز على ضمان الجودة مثل سلوك نظام التشغيل لديك عندما تكون بطارية الجهاز منخفضة.
تتضمن لوحة تحكم Cuttlefish الافتراضية دعمًا للإجراءات المخصصة "المكونات الإضافية" دون الحاجة إلى تعديل مشروع Cuttlefish AOSP الرئيسي . يحتاج جهازك الظاهري إلى تضمين الحد الأدنى فقط من ملف التكوين لبدء استخدام الإجراءات المخصصة. راجع هذا المثال لملف تكوين الإجراء المخصص .
قم بإنشاء ملف JSON يحدد الإجراءات المخصصة لجهازك. يمكنك وضع هذا الملف في أي دليل تملكه. تم توضيح بنية هذا الملف في قسمي ADB Shell و Action server .
قم بإنشاء وحدة
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", }
قم بتعيين متغيرات إنشاء تكوين 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
يجب على كل مضيف ثنائي لخادم الإجراء تنفيذ الخطوات التالية:
قبول رقم واصف ملف مأخذ التوصيل كوسيطة البرنامج الأولى والوحيدة.
يتم إنشاء هذا المقبس بواسطة
launch_cvd
باستخدامsocketpair
مع المجالAF_LOCAL
، والنوعSOCK_STREAM
، والبروتوكول 0.في حلقة، حاول قراءة 128 بايت من مأخذ التوصيل. تحتوي هذه البايتات على أحداث الضغط على الزر التي يرسلها عميل WebRTC بالتنسيق
command:state
. يكونcommand
كما هو منصوص عليه في تكوين JSON،state
هي حالة الضغط على الزر (down
أوup
).التعامل مع الأحداث الواردة لمحاكاة الإجراء المخصص.