Cuttlefish के लिए डिफ़ॉल्ट WebRTC ब्राउज़र इंटरफ़ेस में एक कंट्रोल पैनल शामिल होता है. इससे वर्चुअल डिवाइस के साथ इंटरैक्ट करने के ज़्यादा तरीके मिलते हैं.
कंट्रोल पैनल में, सामान्य फ़िज़िकल डिवाइस के बटन की तरह काम करने वाले डिफ़ॉल्ट बटन होते हैं. जैसे, पावर बटन या आवाज़ कम या ज़्यादा करने वाले बटन. साथ ही, इसमें डिवाइस को घुमाने का विकल्प भी होता है.
कस्टम कार्रवाइयां
कंट्रोल पैनल को अपनी पसंद के मुताबिक बनाया जा सकता है. इसमें ऐसे बटन जोड़े जा सकते हैं जिनकी मदद से, वर्चुअल डिवाइस को अपने फ़िज़िकल डिवाइस की तरह इस्तेमाल किया जा सके. यह आपके डिवाइस की खास सुविधाओं को टेस्ट करने के लिए काम आता है. जैसे, हार्डवेयर बटन या खास जेस्चर, जो ओएस में कोई खास कार्रवाई ट्रिगर करता है. कस्टम बटन का इस्तेमाल करके, QA पर फ़ोकस करने वाली ज़्यादा सुविधाओं को चालू किया जा सकता है. जैसे, डिवाइस की बैटरी कम होने पर ओएस का व्यवहार.
Cuttlefish के डिफ़ॉल्ट कंट्रोल पैनल में, कस्टम कार्रवाइयों को "प्लग इन" करने की सुविधा शामिल होती है. इसके लिए, Cuttlefish के मुख्य AOSP प्रोजेक्ट में बदलाव करने की ज़रूरत नहीं होती. कस्टम कार्रवाइयों का इस्तेमाल शुरू करने के लिए, आपके वर्चुअल डिवाइस में सिर्फ़ एक कॉन्फ़िगरेशन फ़ाइल होनी चाहिए. कस्टम ऐक्शन की कॉन्फ़िगरेशन फ़ाइल का यह उदाहरण देखें.
एक JSON फ़ाइल बनाएं, जिसमें आपके डिवाइस की कस्टम कार्रवाइयों के बारे में बताया गया हो. इस फ़ाइल को अपनी किसी भी डायरेक्ट्री में रखा जा सकता है. इस फ़ाइल की संरचना के बारे में ADB शेल और ऐक्शन सर्वर सेक्शन में बताया गया है.
अपने JSON कॉन्फ़िगरेशन के लिए
prebuilt_etc_hostमॉड्यूल बनाएं. पक्का करें कि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) होती है.कस्टम कार्रवाई को सिम्युलेट करने के लिए, आने वाले इवेंट पर कार्रवाई करें.