تتضمّن واجهة متصفّح WebRTC التلقائية في Cuttlefish لوحة تحكّم تتيح المزيد من الطرق للتفاعل مع الجهاز الافتراضي.
تتضمّن لوحة التحكّم أزرارًا تلقائية لمحاكاة الإجراءات الشائعة التي يمكن تنفيذها على الأجهزة الفعلية، مثل زر التشغيل أو أزرار مستوى الصوت، بالإضافة إلى تدوير الجهاز.
الإجراءات المخصّصة
يمكنك تخصيص لوحة التحكّم لإضافة المزيد من الأزرار التي تتيح لجهازك الافتراضي محاكاة جهازك الفعلي بشكل أقرب. ويفيد ذلك في اختبار الميزات الفريدة لجهازك، مثل زر الجهاز أو الإيماءة الخاصة التي تؤدي إلى إجراء فريد في نظام التشغيل. يمكنك أيضًا استخدام أزرار مخصّصة لتفعيل اختبار المزيد من الميزات التي تركّز على ضمان الجودة، مثل سلوك نظام التشغيل عندما يكون مستوى شحن البطارية منخفضًا.
تتضمّن لوحة التحكّم التلقائية في Cuttlefish إمكانية "توصيل" إجراءات مخصّصة بدون الحاجة إلى تعديل مشروع AOSP الرئيسي في Cuttlefish. يجب أن يتضمّن جهازك الافتراضي ملف إعدادات بسيطًا فقط لبدء استخدام الإجراءات المخصّصة. اطّلِع على مثال على ملف إعدادات الإجراء المخصّص.
أنشِئ ملف JSON يحدّد الإجراءات المخصّصة لجهازك. يمكنك وضع هذا الملف في أي دليل تملكه. يتم وصف بنية هذا الملف في قسمَي ADB shell وخادم الإجراءات.
أنشئ وحدة
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 shell
- خادم الإجراءات
يمكن أن يحدّد ملف الإعداد بتنسيق JSON عدة مثيلات لكل نوع من أنواع التنفيذ.
أمر ADB shell
يمكنك تحديد زرّ واحد يتم تنفيذه من خلال تنفيذ أمر 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
).اتّخاذ إجراء بشأن الأحداث الواردة لمحاكاة الإجراء المخصّص