Cuttlefish-এর ডিফল্ট WebRTC ব্রাউজার ইন্টারফেসে একটি কন্ট্রোল প্যানেল রয়েছে, যা ভার্চুয়াল ডিভাইসটির সাথে মিথস্ক্রিয়া করার আরও বিভিন্ন উপায় প্রদান করে।
কন্ট্রোল প্যানেলে পাওয়ার বাটন বা ভলিউম বাটনের মতো সাধারণ ফিজিক্যাল ডিভাইস অ্যাকশন এবং ডিভাইস রোটেশন অনুকরণ করার জন্য ডিফল্ট বাটন রয়েছে।
কাস্টম অ্যাকশন
আপনি কন্ট্রোল প্যানেলটি কাস্টমাইজ করে আরও বাটন যোগ করতে পারেন, যা আপনার ভার্চুয়াল ডিভাইসকে আপনার ফিজিক্যাল ডিভাইসের আরও কাছাকাছি অনুকরণ করতে সাহায্য করে। এটি আপনার ডিভাইসের নিজস্ব ফিচারগুলো পরীক্ষা করার জন্য উপযোগী, যেমন কোনো হার্ডওয়্যার বাটন বা বিশেষ জেসচার যা অপারেটিং সিস্টেমে একটি স্বতন্ত্র অ্যাকশন চালু করে। এছাড়াও, আপনি কাস্টম বাটন ব্যবহার করে কোয়ালিটি অ্যাসিওরেন্স (QA) কেন্দ্রিক ফিচারগুলো পরীক্ষা করতে পারেন, যেমন ডিভাইসের ব্যাটারি কম থাকলে আপনার অপারেটিং সিস্টেমের আচরণ কেমন হয়।
ডিফল্ট কাটলফিশ কন্ট্রোল প্যানেলে মূল কাটলফিশ 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", }আপনার কাস্টম অ্যাকশন কনফিগ ফাইলটি অন্তর্ভুক্ত করার জন্য ভার্চুয়াল ডিভাইস হোস্ট প্যাকেজটি কনফিগার করতে, আপনার ডিভাইসের প্রোডাক্ট মেকফাইলে সুং কনফিগ বিল্ড ভেরিয়েবল সেট করুন।
# 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 প্রোটোকল দিয়ে তৈরি করা হয়েছে।একটি লুপের মধ্যে সকেট থেকে ১২৮ বাইট ডেটা পড়ার চেষ্টা করুন। এই বাইটগুলোতে WebRTC ক্লায়েন্ট দ্বারা প্রেরিত বাটন প্রেস ইভেন্টগুলো
command:stateফরম্যাটে থাকে।commandহলো JSON কনফিগে দেওয়া মান, এবংstateহলো বাটন প্রেসের অবস্থা (downবাup)।কাস্টম অ্যাকশনটি সিমুলেট করতে আগত ইভেন্টগুলোর ওপর কাজ করুন।