কাটলফিশ নিয়ন্ত্রণ প্যানেল

Cuttlefish-এর জন্য ডিফল্ট WebRTC ব্রাউজার ইন্টারফেসে একটি নিয়ন্ত্রণ প্যানেল রয়েছে যা ভার্চুয়াল ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার আরও উপায় সক্ষম করে।

কন্ট্রোল প্যানেলে সাধারণ শারীরিক ডিভাইসের ক্রিয়াগুলি যেমন পাওয়ার বোতাম বা ভলিউম বোতাম, সেইসাথে ডিভাইস ঘূর্ণন অনুকরণ করার জন্য ডিফল্ট বোতামগুলি রয়েছে৷

কাস্টম অ্যাকশন

আপনি আরও বোতাম যোগ করতে কন্ট্রোল প্যানেলটি কাস্টমাইজ করতে পারেন যা আপনার ভার্চুয়াল ডিভাইসটিকে আপনার শারীরিক ডিভাইসকে আরও ঘনিষ্ঠভাবে অনুকরণ করতে দেয়। এটি আপনার ডিভাইসের অনন্য বৈশিষ্ট্যগুলি পরীক্ষা করার জন্য উপযোগী, যেমন একটি হার্ডওয়্যার বোতাম বা বিশেষ অঙ্গভঙ্গি যা OS এ একটি অনন্য ক্রিয়া ট্রিগার করে৷ ডিভাইসটির ব্যাটারি কম থাকলে আপনার OS-এর আচরণের মতো আরও QA-কেন্দ্রিক বৈশিষ্ট্যগুলি পরীক্ষা করতে আপনি কাস্টম বোতামগুলিও ব্যবহার করতে পারেন।

ডিফল্ট Cuttlefish কন্ট্রোল প্যানেলে প্রধান Cuttlefish 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. আপনার কাস্টম অ্যাকশন কনফিগার ফাইল অন্তর্ভুক্ত করার জন্য ভার্চুয়াল ডিভাইস হোস্ট প্যাকেজ কনফিগার করতে আপনার ডিভাইসের পণ্য মেকফাইলে 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 config বিল্ড ভেরিয়েবল 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. প্রথম এবং একমাত্র প্রোগ্রাম আর্গুমেন্ট হিসাবে একটি সকেট ফাইল বর্ণনাকারী নম্বর গ্রহণ করুন।

    এই সকেটটি AF_LOCAL ডোমেনের সাথে socketpair ব্যবহার করে launch_cvd দ্বারা তৈরি করা হয়েছে, SOCK_STREAM টাইপ করুন এবং প্রোটোকল 0।

  2. একটি লুপে, সকেট থেকে 128 বাইট পড়ার চেষ্টা করুন। এই বাইটে WebRTC ক্লায়েন্টের দ্বারা পাঠানো বোতাম প্রেস ইভেন্ট থাকে ফরম্যাট command:statecommand JSON কনফিগারেশনে দেওয়া হয়েছে এবং state হল বোতাম প্রেস স্টেট ( down বা up )।

  3. কাস্টম অ্যাকশন অনুকরণ করতে ইনকামিং ইভেন্টগুলিতে কাজ করুন।

,

Cuttlefish-এর জন্য ডিফল্ট WebRTC ব্রাউজার ইন্টারফেসে একটি নিয়ন্ত্রণ প্যানেল রয়েছে যা ভার্চুয়াল ডিভাইসের সাথে ইন্টারঅ্যাক্ট করার আরও উপায় সক্ষম করে।

কন্ট্রোল প্যানেলে সাধারণ শারীরিক ডিভাইসের ক্রিয়াগুলি যেমন পাওয়ার বোতাম বা ভলিউম বোতাম, সেইসাথে ডিভাইস ঘূর্ণন অনুকরণ করার জন্য ডিফল্ট বোতামগুলি রয়েছে৷

কাস্টম অ্যাকশন

আপনি আরও বোতাম যোগ করতে কন্ট্রোল প্যানেল কাস্টমাইজ করতে পারেন যা আপনার ভার্চুয়াল ডিভাইসটিকে আপনার শারীরিক ডিভাইসকে আরও ঘনিষ্ঠভাবে অনুকরণ করতে দেয়। এটি আপনার ডিভাইসের অনন্য বৈশিষ্ট্যগুলি পরীক্ষা করার জন্য দরকারী, যেমন একটি হার্ডওয়্যার বোতাম বা বিশেষ অঙ্গভঙ্গি যা OS এ একটি অনন্য ক্রিয়া ট্রিগার করে৷ ডিভাইসটির ব্যাটারি কম থাকলে আপনার OS-এর আচরণের মতো আরও QA-কেন্দ্রিক বৈশিষ্ট্যগুলি পরীক্ষা করতে আপনি কাস্টম বোতামগুলিও ব্যবহার করতে পারেন।

ডিফল্ট Cuttlefish কন্ট্রোল প্যানেলে প্রধান Cuttlefish 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. আপনার কাস্টম অ্যাকশন কনফিগার ফাইল অন্তর্ভুক্ত করার জন্য ভার্চুয়াল ডিভাইস হোস্ট প্যাকেজ কনফিগার করতে আপনার ডিভাইসের পণ্য মেকফাইলে 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 config বিল্ড ভেরিয়েবল 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. প্রথম এবং একমাত্র প্রোগ্রাম আর্গুমেন্ট হিসাবে একটি সকেট ফাইল বর্ণনাকারী নম্বর গ্রহণ করুন।

    এই সকেটটি AF_LOCAL ডোমেনের সাথে socketpair ব্যবহার করে launch_cvd দ্বারা তৈরি করা হয়েছে, SOCK_STREAM টাইপ করুন এবং প্রোটোকল 0।

  2. একটি লুপে, সকেট থেকে 128 বাইট পড়ার চেষ্টা করুন। এই বাইটে WebRTC ক্লায়েন্টের দ্বারা পাঠানো বোতাম প্রেস ইভেন্ট থাকে ফরম্যাট command:statecommand JSON কনফিগারেশনে দেওয়া হয়েছে এবং state হল বোতাম প্রেস স্টেট ( down বা up )।

  3. কাস্টম অ্যাকশন অনুকরণ করতে ইনকামিং ইভেন্টগুলিতে কাজ করুন।