কোনও মেশিনে অ্যান্ড্রয়েড অ্যাপ্লিকেশন কোড লিখতে এবং অন্যটিতে চালু করা এমুলেটরে দূরবর্তীভাবে এটি ডিবাগ করা সম্ভব? আমি অসুস্থ এবং এমুলেটর থেকে ক্রমাগত আমার ল্যাপটপের সিপিইউর অর্ধেক খাচ্ছি of
উত্তর:
আমি পূর্বে adb connectসিএমএম উল্লিখিত কমান্ডটি চেষ্টা করেছি (বা এমনকি লক্ষ্য করেছি) , তবে আমি নিশ্চিত করতে পারি যে টিসিপি পোর্টগুলি নিজেকে ফরোয়ার্ড করা - যেমন এসএসএইচ-র উপর - ঠিকঠাক কাজ করে।
এমুলেটরটি দুটি টিসিপি পোর্টে উদাহরণস্বরূপ শুনেছে: টেলনেট ইন্টারফেসের জন্য 5554 এবং ডিডিএমএসের মতো সরঞ্জামগুলির সাথে যোগাযোগের জন্য 5555। সুতরাং আপনি সম্ভবত কেবল ফরওয়ার্ডিং পোর্ট 5555 দিয়ে পালিয়ে যেতে পারেন (যদিও আমি উভয়ের সাথে এখনও চেষ্টা করেছি)। প্রতিটি পরবর্তী এমুলেটর পরবর্তী উপলব্ধ এমনকি + বিজোড় পোর্ট নম্বর টিপল নেয় (প্রায় 5580 পর্যন্ত, আমার মনে হয়)।
রেফারেন্সের জন্য, আমি আমার স্থানীয় মেশিনে নিম্নলিখিত পদক্ষেপগুলি করেছি:
ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 myuser@remote-serverkillall adb; adb devicesআমি বিশ্বাস করি যে এমুলেটর শুরুতে কোনও স্থানীয় অ্যাডবি সার্ভারকে অবহিত করার চেষ্টা করে; সুতরাং স্থানীয় 5554+ বন্দরগুলির তদন্ত করতে এটির জন্য অ্যাডবি পুনরায় চালু করা দরকার।
মনে রাখবেন যে localhostssh কমান্ডটি রিমোট মেশিনের স্থানীয় ইন্টারফেসকে বোঝায় ।
adb devicesএকটি নতুন এমুলেটর দেখিয়েছিল - emulator-5554- এবং আমি এটি ব্যবহার করতে পারলাম যেন এটি আমার স্থানীয় মেশিনে চলছে।
killall adbসার্ভারে আপনার খুব দরকার , কারণ এমুলেটরটি একাধিক সংযোগ গ্রহণ করবে না offlineএবং এটি স্থানীয় মেশিনের জন্য হবে ।
এটি আমি উইন্ডোজ এ কীভাবে সমাধান করেছি তা এখানে। আমি বেশ অনেকটা ক্রিস্টোফারের নেতৃত্ব অনুসরণ করেছি, তবে আমি সম্পাদনা করতে পারছি না, তাই একটি নতুন উত্তর করতে হবে।
আমার সমস্যাটি হ'ল এডিবি পাশাপাশি এমুলেটরটি কেবল আমার জন্য 0.07.0 নয়, 127.0.0.1 এ শুনছিল। না হলে আমি টিসিপিমন ব্যবহার করতাম । আমার ধারণা, এটি উইন্ডোজে অন্যরকম, বা এসডির সর্বশেষ সংস্করণগুলির সাথে পরিবর্তিত হয়েছে। (আপনি চেক করতে পারেন netstat -ban।)
আমি এমুলেটর চালিত মেশিনে WinSSHD ইনস্টল করেছি । (আমি বিশ্বাস করি এটিও ফ্রিএসএসএইচডি দিয়ে কাজ করা উচিত, তবে আমি সেখানে কাজ করে লগইন করতে পারি না))
আমি উইন্ডোজ ফায়ারওয়ালে পোর্ট 22 (টিসিপি) খুলেছি। (উইনএসএইচডি আপনার পক্ষে এটি করতে সক্ষম হতে পারে))
আমি উইনএসএইচডি জিইআইতে একটি ভার্চুয়াল অ্যাকাউন্ট তৈরি করেছি।
আমি ডেভলপমেন্ট মেশিন থেকে এমুলেটর মেশিনে একটি নতুন পিটিটিওয়াই সংযোগ তৈরি করেছি এবং নিশ্চিত হয়েছি যে আমি সংযোগ করতে পারব।
তারপরে আমি পিটিটিওয়াই: সংযোগ -> এসএসএইচ -> টানেলগুলিতে টানেলিং সেট আপ করেছি
Source port: 5554
Destination: localhost:5554
Type: Local/Auto
Source port: 5555
Destination: localhost:5555
Type: Local/Auto
(টানেলটি বজায় রাখতে পিটিটিওয়াইকে সংযুক্ত করুন এবং খোলা রাখুন))
এখন আমি রিমোট মেশিনে এমুলেটরটি বের করে দিয়েছি এবং নিশ্চিত করেছিলাম যে এডিবি সেখানে চলছে না।
আমি উন্নয়ন মেশিনে ( adb kill-serverতখন, adb start-server) এডিবি পুনরায় চালু করেছি ।
adb devicesএবং দূরবর্তী এমুলেটর হিসাবে প্রদর্শিত হয়েছিল emulator-5554 device। আমি এখন সরাসরি অ্যাপ্লিকেশনটিকে ডিগ্রি এবং চালিয়ে যেতে পারি সরাসরি Eclipse / ADT থেকে, যেখানে এমুলেটরটি ভার্চুয়াল ডিভাইসের অধীনে প্রদর্শিত হয়েছিল যেন এটি কোনও স্থানীয় এমুলেটর।
আমি বুঝতে পারি এই প্রশ্নটি আসলেই পুরানো, তবে আমি সমস্যাটি কিছুটা ভিন্নভাবে সমাধান করেছি এবং এই তুচ্ছ সমাধানটি বের করতে আমার কিছুটা সময় লেগেছে।
আমি সাধারণত একটি উইন্ডোজ 7 পিসি বা ল্যাপটপ (যেখানে আমি কাজ করছি তার উপর নির্ভর করে) আমার ফ্রন্ট-এন্ড হিসাবে ব্যবহার করি কারণ আমি জিইউআই পছন্দ করি তবে আমি সমস্ত সম্পাদনা / সংকলন / ডিবাগকে হেডলেস উবুন্টু সার্ভারে করতে পছন্দ করি কারণ সমস্ত কারণে কমান্ড-লাইন শক্তি এটি সরবরাহ করে। আমার লক্ষ্য হ'ল প্রতিটি উইন্ডোজ সিস্টেমকে কোনও অতিরিক্ত পরিষেবাদি (যেমন এসএসডি) বা ফায়ারওয়াল গর্ত ছাড়াই যথাসম্ভব পাতলা ক্লায়েন্ট তৈরি করা।
সুতরাং এখানে স্যানারিও:
পূর্বে বর্ণিত সমস্যাটি হ'ল সিস্টেম-এ-তে থাকা এমুলেটর লোকালহোস্টের সাথে আবদ্ধ হয়, বহিরাগত ইথারনেট ইন্টারফেস নয়, সুতরাং সিস্টেম-বিতে অ্যাডবি সিস্টেম-এ-তে এমুলেটরটি অ্যাক্সেস করতে পারে না। সিস্টেম-বিতে আপনার এসএসএইচ সংযোগের জন্য আপনাকে যা করতে হবে তা হ'ল পুটিটিইতে রিমোট পোর্ট ফরওয়ার্ডিং সেটআপ করতে হবে। কৌশলটি হ'ল আপনি যখন দুটি টানেল তৈরি করেন তখন "রিমোট" রেডিও বোতামটি পরীক্ষা করা যাতে সুড়ঙ্গ দিকটি বিপরীত হয় (আপনি যে ক্লায়েন্টটিতে লগ ইন করছেন সেবার থেকে টানেলিং))

শেষ অবধি, এসএসএইচ সংযোগ স্থাপনের পরে সিস্টেম-বিতে "লোকালহোস্ট" এডাবির সাথে সংযুক্ত করুন:
System-B$ adb connect localhost
connected to localhost:5555
System-B$ adb devices
List of devices attached
localhost:5555 device
এখন আপনি ইমেজগুলি / ডিবাগটিকে সাধারণ হিসাবে ডাউনলোড করতে পারেন এবং আপনি যদি ল্যাপটপটি বাইরে নিয়ে যেতে চান এবং কিছুটা কফি পেতে চান তবে ভিন্ন উইন্ডোজ সিস্টেমে স্যুইচ করা তুচ্ছ বিষয়।
এছাড়াও, একইভাবে পোর্ট 5037 টি টানেল করেও আপনি আসলে আপনার অ্যাডাব সার্ভার সংযোগটি ফরোয়ার্ড করতে পারেন যাতে আপনি সিস্টেম-এ ইউএসবির মাধ্যমে একটি সত্যিকারের অ্যান্ড্রয়েড ডিভাইস সংযোগ করতে পারেন এবং এটিতে সিস্টেম-বি থেকে চিত্রগুলি ডাউনলোড করতে পারেন। এটি কাজ করার জন্য, আপনাকে নিশ্চিত করতে হবে যে আপনার এসএসএইচ অধিবেশন শুরুর আগে অ্যাডবি সার্ভারটি সিস্টেম-এ চলছে এবং সিস্টেম-বিতে চলছে না:
প্রথমে সিস্টেম-এ (কমান্ড প্রম্পট) এ অ্যাডবি সার্ভারটি শুরু করুন
C:\> adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
C:\> adb devices
List of devices attached
3435F6E6035B00EC device
এর পরে, সিস্টেম-বিতে অ্যাডবি সার্ভারটি হত্যা করুন
System-B$ adb kill-server
অবশেষে, আপনার ssh সেশনটি সিস্টেম-বিতে পুনরায় চালু করুন এবং যাচাই করুন
System-B$ adb devices
List of devices attached
3435F6E6035B00EC device
আমি এটি করার একটি সহজ উপায় খুঁজে পেয়েছি যদি আপনার দুটি মেশিন একই বেসরকারী নেটওয়ার্কে থাকে এবং তাই এসএসএইচ এনক্রিপশন ব্যবহার করার প্রয়োজন নেই (যা সাধারণ ঘটনা)। এটি কোনও এসএসএইচ টানেলটি দীর্ঘ দীর্ঘ এবং ইনস্টল করা কঠিন হতে পারে বলে সহায়তা করতে পারে। উদাহরণস্বরূপ, প্রথমবারের মতো সাইগউইন / উইন্ডোজের অধীনে এসএসএইচ ডেমন ইনস্টল করার ফলে হাল ছেড়ে দেওয়া হতে পারে (ভাল, আমি ছেড়ে দিয়েছি)।
উইন্ডোজের অধীনে, এরপরে সাইগউইন httpsunnel প্যাকেজটি ইনস্টল করা দরকার । এটি অবশ্যই লিনাক্স / httpsunnel এর অধীনে কাজ করবে তবে আমি চেষ্টা করিনি।
যেকোন একটি মেশিনে এমুলেটরটি চালান (আসুন যাক এর হোস্টের নাম হোস্টইমুলেটর )
অন্যান্য মেশিনে Eclipse শুরু করুন (আসুন যাকে এটিকে হোস্টএক্লিপস বলি )
প্রতিটি মেশিনে একটি সাইগউইন টার্মিনাল খুলুন এবং তারপরে,
উপর HostEmulator , নিম্নলিখিত cygwin কমান্ড লেখার :
hts -F localhost:5554 10000
hts -F localhost:5555 10001
এইচটিএস এর অর্থ এইচটিপি টানেল সার্ভার ।
এই দুটি কমান্ড দুটি অর্ধ-সেতু তৈরি করে যা 10001 এবং 10001 পোর্টগুলি শোনায় এবং এই বন্দরগুলির I / O কে স্থানীয় পোর্টগুলিতে 5554 এবং 5555-এ পুনর্নির্দেশ করে, যা এমুলেটর দ্বারা ব্যবহৃত বন্দরগুলি (প্রকৃতপক্ষে, প্রথম স্তম্ভিত এমুলেটর - যদি আপনি তাদের মধ্যে বেশ কয়েকটি চলমান থাকেন তবে তারা এই পৃষ্ঠার অন্যান্য প্রত্যুত্তরগুলিতে যেমন উচ্চতর বন্দর নম্বর ব্যবহার করবেন)।
উপর HostEclipse এদেরকেই লিখুন :
htc -F 5554 HostEmulator:10000
htc -F 5555 HostEmulator:10001
এইচটিসি মানে এইচটিপি টানেল ক্লায়েন্ট ।
এই কমান্ডগুলি অনুপস্থিত অর্ধ-সেতুগুলি তৈরি করে। তারা স্থানীয় বন্দরগুলি 5554 এবং 5555 শোনেন এবং আমরা যে অর্ধ সেতু তৈরি করেছি সেগুলির মধ্যে এই বন্দরগুলির I / O পুনর্নির্দেশ করে ts শোনেন এবং ঠিক এর আগে হোস্টএমুলেটরে ।
তারপরে, এখনও হোস্টক্লিপসে , এই তিনটি কমান্ড লিখুন :
adb kill-server
adb start-server
adb devices
এটি অন্যথায় রিমোট এমুলেটর সনাক্ত না করায় এটি পুনরায় আরম্ভ হয়। এটি অবশ্যই শুরুতে কিছু স্ক্যান করছে। এবং তারপরে এটি কেবলমাত্র পরীক্ষার জন্য ডিভাইসগুলি (উপলভ্য অনুকরণকারী) তালিকাভুক্ত করে।
আপনি আপনার দূরবর্তী এমুলেটরের সাথে কাজ করতে পারেন যেন এটি স্থানীয়। আপনাকে উভয় মেশিনে সাইগউইন টার্মিনালগুলি খোলা রাখতে হবে অন্যথায় আপনি নিজের তৈরি অর্ধেক সেতুগুলি মেরে ফেলবেন।
আমি এখানে মেশিন / মেশিন এক্সচেঞ্জগুলির জন্য 10000 এবং 10001 বন্দরটি ব্যবহার করেছি তবে অবশ্যই আপনি অন্যান্য বন্দরগুলি ব্যবহার করতে পারবেন যতক্ষণ না সেগুলি ইতিমধ্যে ব্যবহৃত হচ্ছে না।
আমার ssh পরিষেবা শুরু করতে ব্যর্থ হলে উইন্ডোজ + অ্যান্ড্রোভিএমের জন্য আমার সমাধান (যার জন্য কেবলমাত্র হোস্ট-কেবল অ্যাডাপ্টার প্রয়োজন)। সুতরাং এটির জন্য কোনও অতিরিক্ত সফ্টওয়্যার প্রয়োজন হয় না।
adb connect <Andro VM IP>
adp tcpip 555
সেন্টিমিডি প্রম্পটে প্রশাসক হিসাবে চালানো:
netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP>
উইন্ডোজ ফায়ারওয়ালে টিসিপি পোর্ট 5555 খুলুন।
তারপরে, দ্বিতীয় পিসি রান থেকে:
adb connect <host ip>
প্রস্তাবিত কোনও সমাধানই আমার পক্ষে কাজ করেনি। আমি এমিরিকোলের সমাধান থেকে শুরু করে এটিকে পরিমার্জন করেছি, যেমন নতুন অ্যান্ড্রয়েড API> 21 এর সাথে এমুলেটরটি অফলাইনে প্রদর্শিত হচ্ছে এবং আমাকে জিনমোশন সেটিংসে যেতে হয়েছিল এবং অ্যান্ড্রয়েড এসডিকে পাথ খালি রেখে যেতে হয়েছিল। এবং কমান্ড লাইন থেকে:
netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP>
netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP>
উত্স: http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion- emulator-remotely / অস্বীকৃতি, আমি লেখক।
আপনি যখন অ্যাডবি চালান, এটি ইতিমধ্যে চালিত না হলে এটি একটি সার্ভার অনুলিপি শুরু করে। আপনি ডিভাইসটি দিয়ে মেশিনে নিজের অনুলিপিটি শুরু করতে পারেন এবং 4.3 sdk করার পরে আপনি এটিকে সার্ভারকে দূরবর্তী মেশিনগুলির জন্য শোনার জন্য বলার -a বিকল্প দিতে পারেন। নিম্নলিখিত কমান্ড দিয়ে এটি করুন যা প্রস্থান না করে:
adb -a -P 5037 সার্ভার নোডেমন
যে মেশিন থেকে আপনি ডিভাইসটি ব্যবহার করতে চান, তাতে পরিবেশ বিধানে ADB_SERVER_SOCKET সেট করুন: xxxx: 5037 (বা -L বিকল্পের সাহায্যে প্রতিটি অ্যাডাবির অনুরোধের জন্য একই মান দিন), যেখানে xxxx হল আইপি ঠিকানা বা হোস্ট-নেম ডিভাইসগুলির সাথে মেশিন এবং 5037 পোর্টটি মেলে যা আপনি উপরের কমান্ডটিতে দিয়েছেন।
আমরা সমান্তরালভাবে পরীক্ষার সমাপ্তি চলমান একটি মেশিনে 3 টি মেশিনে ছড়িয়ে প্রায় 100 টি এমুলেটরকে অ্যাক্সেস দিতে এবং রিমোটভাবে বাস্তব ডিভাইসগুলি ভাগ করে নিতে ইচ্ছুক বিকাশকারীদের অ্যাক্সেস দিতে এটি ব্যবহার করি।
আপনি এমুলেটর থেকে এবং এডবি ফরোয়ার্ড এবং অ্যাডবি বিপরীত দিয়ে বন্দরগুলি ফরোয়ার্ড করতে পারেন এবং তারা ডিভাইসগুলির সাথে মেশিনে উপস্থিত হবে (যে মেশিনটি আপনি 'অ্যাডবি ফরোয়ার্ড' চালাচ্ছেন তা নয়))
adb -L tcp:remotehost:1234 devicesএটি যদি হয় তবে আপনার অ্যান্ড্রয়েড স্টুডিও রিমোট এডিবি সমর্থন করে কিনা তা খুঁজে বের করতে হবে - এটি ব্যবহারে জোর দিলে আমার অবাক করে না স্থানীয় ডিভাইস
এসডিকে হাতে দেওয়ার জন্য আমার কাছে দ্বিতীয় মেশিন নেই, তবে আমি নোট করছি যে এমুলেটরের শোনার পোর্টগুলি (ডিফল্ট 5554, 5555) শুনতে পাচ্ছে 0.0.0.0, অর্থাৎ দূরবর্তী মেশিনগুলি থেকে পৌঁছানো যায় এবং এটি adb --helpএকটি connect <host>:<port>কমান্ড দেখায় । আমি ধরে নিই যে এটি এটি প্রদর্শিত হবে adb devicesযাতে adbকমান্ডগুলি এতে কাজ করে। Eclipse এর জন্য "রান / কনফিগারেশন চালান ..." চেষ্টা করুন এবং ম্যানুয়ালে লক্ষ্য নির্ধারণ করুন। এটি আপনাকে একটি "ডিভাইস চয়নকারী" দেয় যা আমি অনুমান করছি যে এটিতে যদি অ্যাডাবির সাথে সংযুক্ত থাকে তবে এটি একটি দূরবর্তী এমুলেটর অন্তর্ভুক্ত করবে। ব্যবহার করে দেখুন মূল্য.