कटलफिश नियंत्रण कक्ष

कटलफिश के लिए डिफ़ॉल्ट WebRTC ब्राउज़र इंटरफ़ेस में एक नियंत्रण कक्ष शामिल है जो वर्चुअल डिवाइस के साथ इंटरैक्ट करने के अधिक तरीकों को सक्षम बनाता है।

नियंत्रण कक्ष में सामान्य भौतिक डिवाइस क्रियाओं जैसे पावर बटन या वॉल्यूम बटन, साथ ही डिवाइस रोटेशन का अनुकरण करने के लिए डिफ़ॉल्ट बटन होते हैं।

कस्टम क्रियाएं

आप अधिक बटन जोड़ने के लिए नियंत्रण कक्ष को अनुकूलित कर सकते हैं जो आपके वर्चुअल डिवाइस को आपके भौतिक डिवाइस का अधिक बारीकी से अनुकरण करने की अनुमति देता है। यह आपके डिवाइस के लिए अद्वितीय सुविधाओं का परीक्षण करने के लिए उपयोगी है, जैसे हार्डवेयर बटन या विशेष इशारा जो ओएस में एक अद्वितीय कार्रवाई को ट्रिगर करता है। आप अधिक क्यूए-केंद्रित सुविधाओं का परीक्षण करने में सक्षम करने के लिए कस्टम बटन का भी उपयोग कर सकते हैं जैसे कि डिवाइस की बैटरी कम होने पर आपके ओएस का व्यवहार।

डिफ़ॉल्ट कटलफ़िश नियंत्रण पैनल में मुख्य कटलफ़िश AOSP प्रोजेक्ट को संशोधित करने की आवश्यकता के बिना कस्टम क्रियाओं को "प्लग इन" करने का समर्थन शामिल है। कस्टम क्रियाओं का उपयोग शुरू करने के लिए आपके वर्चुअल डिवाइस में केवल एक न्यूनतम कॉन्फ़िगरेशन फ़ाइल शामिल होनी चाहिए। यह उदाहरण कस्टम एक्शन कॉन्फ़िग फ़ाइल देखें।

  1. एक JSON फ़ाइल बनाएं जो आपके डिवाइस की कस्टम क्रियाओं को परिभाषित करे। आप इस फ़ाइल को अपनी किसी भी निर्देशिका में रख सकते हैं। इस फ़ाइल की संरचना ADB शेल और एक्शन सर्वर अनुभागों में वर्णित है।

  2. अपने 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",
    }
    
  3. अपनी कस्टम एक्शन कॉन्फ़िगरेशन फ़ाइल को शामिल करने के लिए वर्चुअल डिवाइस होस्ट पैकेज को कॉन्फ़िगर करने के लिए अपने डिवाइस के उत्पाद मेकफ़ाइल में सूंग कॉन्फ़िगरेशन बिल्ड वेरिएबल सेट करें।

    # 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
    

कस्टम कार्रवाई लागू करने के लिए दो समर्थित विधियाँ हैं:

  • एडीबी शेल कमांड
  • एक्शन सर्वर

आपकी JSON कॉन्फ़िग फ़ाइल प्रत्येक प्रकार के कार्यान्वयन के कई उदाहरणों को परिभाषित कर सकती है।

एडीबी शेल कमांड

आप एक एकल बटन को परिभाषित कर सकते हैं जिसे एकल 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

प्रत्येक एक्शन सर्वर होस्ट बाइनरी को निम्नलिखित चरण निष्पादित करने चाहिए:

  1. सॉकेट फ़ाइल डिस्क्रिप्टर नंबर को पहले और एकमात्र प्रोग्राम तर्क के रूप में स्वीकार करें।

    यह सॉकेट launch_cvd द्वारा डोमेन AF_LOCAL , प्रकार SOCK_STREAM और प्रोटोकॉल 0 के साथ socketpair का उपयोग करके बनाया गया है।

  2. एक लूप में, सॉकेट से 128 बाइट्स पढ़ने का प्रयास करें। इन बाइट्स में वेबआरटीसी क्लाइंट द्वारा command:state प्रारूप में भेजे गए बटन प्रेस इवेंट शामिल हैं। command JSON कॉन्फ़िगरेशन में दिए गए अनुसार है, और state बटन दबाने की स्थिति ( down या up ) है।

  3. कस्टम कार्रवाई का अनुकरण करने के लिए आने वाली घटनाओं पर कार्य करें।