এমুলেটর বহুমুখী নেটওয়ার্কিং ক্ষমতা প্রদান করে যা আপনি আপনার অ্যাপের জন্য জটিল মডেলিং এবং পরীক্ষার পরিবেশ সেট আপ করতে ব্যবহার করতে পারেন। এই পৃষ্ঠাটি এমুলেটর নেটওয়ার্ক আর্কিটেকচার এবং ক্ষমতার পরিচয় দেয়।
নেটওয়ার্ক ঠিকানা স্থান
এমুলেটরের প্রতিটি উদাহরণ একটি ভার্চুয়াল রাউটার বা ফায়ারওয়াল পরিষেবার পিছনে চলে যা এটিকে আপনার ডেভেলপমেন্ট মেশিন নেটওয়ার্ক ইন্টারফেস এবং সেটিংস এবং ইন্টারনেট থেকে বিচ্ছিন্ন করে। একটি এমুলেটেড ডিভাইস নেটওয়ার্কে আপনার ডেভেলপমেন্ট মেশিন বা অন্যান্য এমুলেটর দৃষ্টান্ত সনাক্ত করতে পারে না। এটি সনাক্ত করে যে এটি একটি রাউটার বা ফায়ারওয়ালের সাথে ইথারনেটের মাধ্যমে সংযুক্ত।
প্রতিটি উদাহরণের জন্য ভার্চুয়াল রাউটার 10.0.2/24 নেটওয়ার্ক ঠিকানা স্থান পরিচালনা করে। রাউটার দ্বারা পরিচালিত সমস্ত ঠিকানা 10.0.2 আকারে। xx , যেখানে xx একটি সংখ্যা। এই স্থানের মধ্যে ঠিকানাগুলি নিম্নরূপ এমুলেটর বা রাউটার দ্বারা পূর্ব-বরাদ্দ করা হয়:
নেটওয়ার্ক ঠিকানা | বর্ণনা |
---|---|
10.0.2.1 | রাউটার বা গেটওয়ে ঠিকানা |
10.0.2.2 | আপনার হোস্ট লুপব্যাক ইন্টারফেসের বিশেষ উপনাম (আপনার ডেভেলপমেন্ট মেশিনে 127.0.0.1) |
10.0.2.3 | প্রথম DNS সার্ভার |
10.0.2.4 / 10.0.2.5 / 10.0.2.6 | ঐচ্ছিক দ্বিতীয়, তৃতীয় এবং চতুর্থ DNS সার্ভার |
10.0.2.15 | ইথারনেট ব্যবহার করে সংযুক্ত থাকাকালীন অনুকরণ করা ডিভাইস নেটওয়ার্ক |
10.0.2.16 | Wi-Fi ব্যবহার করে সংযুক্ত থাকাকালীন অনুকরণ করা ডিভাইস নেটওয়ার্ক |
127.0.0.1 | অনুকরণ করা ডিভাইস লুপব্যাক ইন্টারফেস |
সমস্ত চলমান এমুলেটর দৃষ্টান্ত দ্বারা একই ঠিকানা অ্যাসাইনমেন্ট ব্যবহার করা হয়। এর মানে হল যে যদি আপনার মেশিনে দুটি দৃষ্টান্ত একই সাথে চলছে, প্রতিটির নিজস্ব রাউটার থাকবে এবং এর পিছনে, প্রতিটির আইপি ঠিকানা থাকবে 10.0.2.15। দৃষ্টান্তগুলি একটি রাউটার দ্বারা বিচ্ছিন্ন হয় এবং একই নেটওয়ার্কে একে অপরকে সনাক্ত করতে পারে না। কিভাবে এমুলেটর দৃষ্টান্তগুলিকে TCP/UDP-এর মাধ্যমে যোগাযোগ করতে দেওয়া যায় সে সম্পর্কে তথ্যের জন্য, আন্তঃসংযোগ এমুলেটর দৃষ্টান্ত সম্পর্কে বিভাগটি দেখুন।
আপনার ডেভেলপমেন্ট মেশিনে ঠিকানা 127.0.0.1 এমুলেটরের লুপব্যাক ইন্টারফেসের সাথে মিলে যায়। আপনার ডেভেলপমেন্ট মেশিন লুপব্যাক ইন্টারফেসে চলমান পরিষেবাগুলি অ্যাক্সেস করতে, পরিবর্তে বিশেষ ঠিকানা 10.0.2.2 ব্যবহার করুন।
একটি এমুলেটেড ডিভাইসের আগে থেকে বরাদ্দ করা ঠিকানাগুলি অ্যান্ড্রয়েড এমুলেটরের জন্য নির্দিষ্ট এবং বাস্তব ডিভাইসগুলিতে খুব আলাদা হতে পারে (যা সম্ভবত একটি রাউটার বা ফায়ারওয়ালের পিছনে নেটওয়ার্ক ঠিকানা অনুবাদ করা হতে পারে)।
স্থানীয় নেটওয়ার্কিং সীমাবদ্ধতা
একটি এমুলেটরে চলমান Android অ্যাপগুলি আপনার ওয়ার্কস্টেশনে উপলব্ধ নেটওয়ার্কের সাথে সংযোগ করতে পারে৷ যাইহোক, অ্যাপগুলি সরাসরি হার্ডওয়্যারের সাথে নয়, এমুলেটরের মাধ্যমে সংযোগ করে এবং এমুলেটর আপনার ওয়ার্কস্টেশনে একটি সাধারণ অ্যাপের মতো কাজ করে। এটি কিছু সীমাবদ্ধতার কারণ হতে পারে:
- অনুকরণ করা ডিভাইসের সাথে যোগাযোগ আপনার মেশিনে চলমান একটি ফায়ারওয়াল প্রোগ্রাম দ্বারা অবরুদ্ধ হতে পারে।
- অনুকরণ করা ডিভাইসের সাথে যোগাযোগ অন্য (শারীরিক) ফায়ারওয়াল বা রাউটার দ্বারা ব্লক করা হতে পারে যেখানে আপনার মেশিন সংযুক্ত আছে।
এমুলেটরের ভার্চুয়াল রাউটারটি অনুকরণ করা ডিভাইসের পক্ষে সমস্ত আউটবাউন্ড TCP এবং UDP সংযোগ এবং বার্তাগুলি পরিচালনা করতে সক্ষম হওয়া উচিত, যদি আপনার ডেভেলপমেন্ট মেশিন নেটওয়ার্ক পরিবেশ এটি করতে দেয়। পোর্ট নম্বর বা রেঞ্জগুলিতে কোনও অন্তর্নির্মিত সীমাবদ্ধতা নেই, শুধুমাত্র আপনার হোস্ট অপারেটিং সিস্টেম এবং নেটওয়ার্ক দ্বারা আরোপিত।
পরিবেশের উপর নির্ভর করে, এমুলেটর অন্যান্য প্রোটোকল সমর্থন করতে সক্ষম নাও হতে পারে (যেমন ICMP, "পিং" এর জন্য ব্যবহৃত)। বর্তমানে, এমুলেটরটি IGMP বা মাল্টিকাস্ট সমর্থন করে না।
নেটওয়ার্ক পুনর্নির্দেশ ব্যবহার করুন
ভার্চুয়াল রাউটারের পিছনে একটি এমুলেটর উদাহরণের সাথে যোগাযোগ করতে, ভার্চুয়াল রাউটারে নেটওয়ার্ক পুনর্নির্দেশ সেট আপ করুন। ক্লায়েন্টরা তখন রাউটারে একটি নির্দিষ্ট গেস্ট পোর্টের সাথে সংযোগ করতে পারে, যখন রাউটার সেই পোর্ট থেকে এবং ইমুলেটেড ডিভাইস হোস্ট পোর্টে ট্রাফিককে নির্দেশ করে।
নেটওয়ার্ক পুনঃনির্দেশ সেট আপ করতে, এমুলেটর উদাহরণে হোস্ট এবং গেস্ট পোর্ট এবং ঠিকানাগুলির একটি ম্যাপিং তৈরি করুন। নেটওয়ার্ক পুনঃনির্দেশ সেট আপ করার দুটি উপায় আছে: এমুলেটর কনসোল কমান্ড ব্যবহার করে এবং Android ডিবাগ ব্রিজ ( adb
) টুল ব্যবহার করে, যেমনটি নিম্নলিখিত বিভাগে বর্ণিত হয়েছে।
এমুলেটর কনসোলের মাধ্যমে পুনর্নির্দেশ সেট আপ করুন
প্রতিটি এমুলেটর ইন্সট্যান্স একটি কন্ট্রোল কনসোল প্রদান করে যেটির সাথে আপনি সংযোগ করতে পারেন এবং সেই দৃষ্টান্তের জন্য নির্দিষ্ট কমান্ড ইস্যু করতে পারেন। একটি এমুলেটর দৃষ্টান্তের জন্য প্রয়োজনীয় পুনর্নির্দেশ সেট আপ করতে redir
কনসোল কমান্ডটি ব্যবহার করুন।
প্রথমে, লক্ষ্য এমুলেটর উদাহরণের জন্য কনসোল পোর্ট নম্বর নির্ধারণ করুন। উদাহরণ স্বরূপ, প্রথম এমুলেটর ইন্সট্যান্স চালু করার কনসোল পোর্ট নম্বর হল 5554। এরপর, টার্গেট এমুলেটর ইনস্ট্যান্সের কনসোলের সাথে সংযোগ করুন, নিম্নরূপ তার কনসোল পোর্ট নম্বর উল্লেখ করুন:
telnet localhost 5554
একবার সংযুক্ত হয়ে গেলে, আপনি পুনঃনির্দেশ সেট আপ করার আগে আপনাকে অবশ্যই প্রমাণীকরণ করতে হবে। এটি কীভাবে করবেন সে সম্পর্কে বিস্তারিত জানার জন্য একটি কনসোল সেশন শুরু এবং বন্ধ করুন দেখুন। একবার প্রমাণীকরণ হয়ে গেলে, পুনঃনির্দেশের সাথে কাজ করতে redir
কমান্ডটি ব্যবহার করুন।
একটি পুনঃনির্দেশ যোগ করতে, ব্যবহার করুন:
redir add <protocol>:<host-port>:<guest-port>
যেখানে <protocol>
হয় tcp
বা udp
, এবং <host-port>
এবং <guest-port>
আপনার মেশিন এবং এমুলেটেড সিস্টেমের মধ্যে ম্যাপিং সেট করে।
উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি একটি পুনঃনির্দেশ সেট আপ করে যা 127.0.0.1:5000 এ আপনার হোস্ট (ডেভেলপমেন্ট) মেশিনে সমস্ত ইনকামিং TCP সংযোগগুলি পরিচালনা করে এবং 10.0.2.15:6000 এ এমুলেটেড সিস্টেমের মাধ্যমে তাদের পাস করে:
redir add tcp:5000:6000
একটি পুনঃনির্দেশ মুছে ফেলতে, redir del
কমান্ডটি ব্যবহার করুন। একটি নির্দিষ্ট উদাহরণের জন্য সমস্ত পুনঃনির্দেশ তালিকাভুক্ত করতে, redir list
ব্যবহার করুন। এই এবং অন্যান্য কনসোল কমান্ড সম্পর্কে আরও তথ্যের জন্য, এমুলেটর কনসোল কমান্ড পাঠান দেখুন।
মনে রাখবেন যে পোর্ট নম্বরগুলি আপনার স্থানীয় পরিবেশ দ্বারা সীমাবদ্ধ। এর সাধারণত মানে হল যে আপনি বিশেষ প্রশাসকের সুবিধা ছাড়া 1024 এর অধীনে হোস্ট পোর্ট নম্বর ব্যবহার করতে পারবেন না। এছাড়াও, আপনি একটি হোস্ট পোর্টের জন্য একটি পুনঃনির্দেশ সেট আপ করতে সক্ষম হবেন না যা আপনার মেশিনে অন্য একটি প্রক্রিয়া দ্বারা ইতিমধ্যে ব্যবহার করা হচ্ছে। সেই ক্ষেত্রে, redir
সেই প্রভাবে একটি ত্রুটি বার্তা তৈরি করে।
অ্যাডবি এর মাধ্যমে পুনর্নির্দেশ সেট আপ করুন
অ্যান্ড্রয়েড ডিবাগ ব্রিজ ( adb
) টুল পোর্ট ফরওয়ার্ডিং প্রদান করে, আপনার জন্য নেটওয়ার্ক পুনঃনির্দেশ সেট আপ করার একটি বিকল্প উপায়। আরও তথ্যের জন্য, adb
ডকুমেন্টেশনে পোর্ট ফরওয়ার্ডিং সেট আপ দেখুন।
মনে রাখবেন যে adb
বর্তমানে adb
সার্ভার বন্ধ করা ছাড়া একটি পুনঃনির্দেশ অপসারণের উপায় অফার করে না।
এমুলেটর DNS সেটিংস কনফিগার করুন
স্টার্টআপে, এমুলেটর আপনার সিস্টেম বর্তমানে ব্যবহার করছে এমন DNS সার্ভারের তালিকা পড়ে। এটি তারপর এই তালিকায় চারটি পর্যন্ত সার্ভারের আইপি ঠিকানা সংরক্ষণ করে এবং প্রয়োজন অনুসারে অনুকরণ করা ঠিকানা 10.0.2.3, 10.0.2.4, 10.0.2.5 এবং 10.0.2.6 এ তাদের উপনাম সেট আপ করে।
Linux এবং macOS-এ, এমুলেটর /etc/resolv.conf
ফাইলটি পার্স করে DNS সার্ভারের ঠিকানাগুলি পায়। Windows-এ, এমুলেটর GetNetworkParams()
API-তে কল করে ঠিকানাগুলি পায়। মনে রাখবেন যে সাধারণত এর মানে হল যে এমুলেটর আপনার "হোস্ট" ফাইলের বিষয়বস্তু উপেক্ষা করে ( Linux/macOS-এ /etc/hosts
, Windows-এ %WINDOWS%/system32/HOSTS
)।
কমান্ড লাইন থেকে এমুলেটর শুরু করার সময়, আপনি -dns-server <serverList>
বিকল্পটি ব্যবহার করার জন্য DNS সার্ভারের ঠিকানা ম্যানুয়ালি নির্দিষ্ট করতে ব্যবহার করতে পারেন, যেখানে <serverList>
সার্ভারের নাম বা IP ঠিকানাগুলির একটি কমা-বিভক্ত তালিকা। আপনি যদি অনুকরণ করা নেটওয়ার্কে DNS রেজোলিউশন সমস্যার সম্মুখীন হন (উদাহরণস্বরূপ, একটি "অজানা হোস্ট ত্রুটি" বার্তা যা ওয়েব ব্রাউজার ব্যবহার করার সময় প্রদর্শিত হয়) আপনি এই বিকল্পটি দরকারী বলে মনে করতে পারেন৷
একটি প্রক্সি সহ এমুলেটর ব্যবহার করুন
অনেক কর্পোরেট নেটওয়ার্কে, ইন্টারনেটের সাথে সরাসরি সংযোগ নেটওয়ার্ক প্রশাসকদের দ্বারা প্রত্যাখ্যান করা হয়। পরিবর্তে, ইন্টারনেট সংযোগ অবশ্যই একটি নির্দিষ্ট প্রক্সির মধ্য দিয়ে যেতে হবে। একটি প্রক্সি প্রয়োজনীয়তা সহ একটি নেটওয়ার্কে ইন্টারনেট অ্যাক্সেস করতে, এমুলেটরকে জানতে হবে যে একটি প্রক্সি আছে এবং এটির সাথে সংযোগ করতে হবে।
HTTP এর প্রকৃতির কারণে, একটি সরাসরি ওয়েব সার্ভার সংযোগ এবং একটি প্রক্সির মাধ্যমে সংযোগের ফলে বিভিন্ন GET অনুরোধ আসে। এমুলেটর প্রক্সির সাথে কথা বলার আগে ভার্চুয়াল ডিভাইস থেকে GET অনুরোধগুলি স্বচ্ছভাবে পুনর্লিখন করে যাতে এটি কাজ করে।
যদি আপনার এমুলেটরকে একটি প্রক্সি সার্ভারের মাধ্যমে ইন্টারনেট অ্যাক্সেস করতে হয়, আপনি এমুলেটরের বর্ধিত নিয়ন্ত্রণ স্ক্রীন থেকে একটি কাস্টম HTTP প্রক্সি কনফিগার করতে পারেন:
- এমুলেটর খোলার সাথে, আরও ক্লিক করুন
.
- সেটিংস এবং প্রক্সিতে ক্লিক করুন।
- আপনার HTTP প্রক্সি সেটিংস সংজ্ঞায়িত করুন।
![](https://developer.android.com/static/studio/images/run/emulator-proxy-settings_2x.png?authuser=4&hl=bn)
বিকল্পভাবে, এমুলেটর শুরু করার সময় আপনি -http-proxy <proxy>
বিকল্পের সাহায্যে কমান্ড লাইন থেকে একটি প্রক্সি কনফিগার করতে পারেন। এই ক্ষেত্রে, এই ফর্ম্যাটে <proxy>
-এ প্রক্সি তথ্য নির্দিষ্ট করুন:
http://<machineName>:<port>
বা
http://<username>:<password>@<machineName>:<port>
-http-proxy
বিকল্পটি এমুলেটরকে সমস্ত বহির্গামী TCP সংযোগের জন্য নির্দিষ্ট HTTP বা HTTPS প্রক্সি ব্যবহার করতে বাধ্য করে। UDP-এর জন্য পুনঃনির্দেশ সমর্থিত নয়।
বিকল্পভাবে, আপনি <proxy>
এর জন্য যে মানটি ব্যবহার করতে চান তার সাথে আপনি পরিবেশ পরিবর্তনশীল http_proxy
সংজ্ঞায়িত করতে পারেন। এই ক্ষেত্রে, আপনাকে -http-proxy
কমান্ডে <proxy>
এর জন্য একটি মান নির্দিষ্ট করতে হবে না—এমুলেটরটি স্টার্টআপের সময় http_proxy
এনভায়রনমেন্ট ভেরিয়েবলের মান পরীক্ষা করে এবং স্বয়ংক্রিয়ভাবে এর মান ব্যবহার করে, যদি এটি সংজ্ঞায়িত করা হয়।
আপনি প্রক্সি সংযোগ সমস্যা নির্ণয় করতে -debug-proxy
বিকল্পটি ব্যবহার করতে পারেন।
আন্তঃসংযোগ এমুলেটর উদাহরণ
একটি এমুলেটর দৃষ্টান্ত অন্যটির সাথে যোগাযোগ করতে দিতে, নীচে বর্ণিত হিসাবে নেটওয়ার্ক পুনর্নির্দেশ সেট আপ করুন।
অনুমান করুন যে আপনার পরিবেশটি নিম্নরূপ উপস্থাপন করা হয়েছে:
- একটি আপনার উন্নয়ন মেশিন.
- B হল আপনার প্রথম এমুলেটর উদাহরণ, A এ চলছে।
- C হল আপনার দ্বিতীয় এমুলেটর উদাহরণ, A-তেও চলছে।
আপনি যদি B-তে একটি সার্ভার চালাতে চান যার সাথে C সংযোগ করবে, এটি নিম্নরূপ সেট আপ করুন:
- B-এ সার্ভার সেট আপ করুন, 10.0.2.15:<serverPort> শুনে।
- B কনসোলে, A:localhost:<localPort> থেকে B:10.0.2.15:<serverPort> এ একটি পুনর্নির্দেশ সেট আপ করুন।
- C-তে, ক্লায়েন্টকে 10.0.2.2:<localPort>-এর সাথে সংযুক্ত করুন।
উদাহরণস্বরূপ, আপনি যদি একটি HTTP সার্ভার চালাতে চান, <serverPort>
80 হিসাবে এবং <localPort>
8080 হিসাবে নির্বাচন করুন:
- B 10.0.2.15:80 এ শুনবে।
- B কনসোলে,
redir add tcp:8080:80.
- C 10.0.2.2:8080 এর সাথে সংযোগ করে।
অন্য এমুলেটর দৃষ্টান্তে একটি ভয়েস কল বা SMS পাঠান
এমুলেটর স্বয়ংক্রিয়ভাবে সিমুলেটেড ভয়েস কল এবং এসএমএস বার্তাগুলিকে এক দৃষ্টান্ত থেকে অন্যটিতে ফরোয়ার্ড করে। একটি ভয়েস কল বা এসএমএস পাঠাতে, এমুলেটরগুলির একটি থেকে যথাক্রমে ডায়ালার অ্যাপ বা এসএমএস অ্যাপ ব্যবহার করুন।
অন্য এমুলেটর উদাহরণে একটি সিমুলেটেড ভয়েস কল শুরু করতে:
- আসল এমুলেটর দৃষ্টান্তে ডায়ালার অ্যাপটি চালু করুন।
ডায়াল করার জন্য নম্বর হিসাবে, লক্ষ্য উদাহরণের কনসোল পোর্ট নম্বর লিখুন।
আপনি টার্গেট ইনস্ট্যান্সের কনসোল পোর্ট নম্বর নির্ধারণ করতে পারেন এর উইন্ডো শিরোনাম চেক করে, যদি এটি একটি পৃথক উইন্ডোতে চলছে, কিন্তু যদি এটি একটি টুল উইন্ডোতে চলছে না। কনসোল পোর্ট নম্বরটি "Android Emulator (<port>)" হিসেবে রিপোর্ট করা হয়েছে।
বিকল্পভাবে,
adb devices
কমান্ড চলমান ভার্চুয়াল ডিভাইস এবং তাদের কনসোল পোর্ট নম্বরগুলির একটি তালিকা প্রিন্ট করে। আরও তথ্যের জন্য, ডিভাইসের জন্য ক্যোয়ারী দেখুন।- ডায়াল বোতামে ক্লিক করুন। টার্গেট এমুলেটর ইনস্ট্যান্সে একটি নতুন ইনবাউন্ড কল উপস্থিত হয়।
অন্য এমুলেটর উদাহরণে একটি এসএমএস বার্তা পাঠাতে:
- এসএমএস অ্যাপ চালু করুন, যদি পাওয়া যায়।
- এসএমএস ঠিকানা হিসাবে লক্ষ্য এমুলেটর উদাহরণের কনসোল পোর্ট নম্বর নির্দিষ্ট করুন।
- বার্তা টেক্সট লিখুন.
- বার্তা পাঠান। বার্তা টার্গেট এমুলেটর উদাহরণে বিতরণ করা হয়।
আপনি একটি ইনকামিং ভয়েস কল বা এসএমএস অনুকরণ করতে একটি এমুলেটর কনসোলের সাথে সংযোগ করতে পারেন৷ আরও তথ্যের জন্য, টেলিফোনি এমুলেশন এবং এসএমএস এমুলেশন দেখুন।