এডিবির আশেপাশে কাজ করা "ডিভাইসের জন্য অপেক্ষা করা" ইস্যু


9

আমরা আমাদের অ্যান্ড্রয়েড বিকাশের জন্য একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার স্থাপন করছি এবং আমরা ডিভাইস ইস্যুতে খুব দ্রুত এডিবি'র অপেক্ষায় চলে এসেছি ।

রেকর্ডের জন্য, ইতিমধ্যে আমরা সমন্বয় অনেকটা চেষ্টা করেছি adb kill-server, adb start-server, adb devicesকোন উপকার, ইত্যাদি।

দুঃখের বিষয়, ইন্টারনেটে আমি যা কিছু পেয়েছি সেগুলি হ'ল "ডিভাইসটি আনপ্লাগ এবং রিপ্লাগ করুন", যা সম্ভবত আমাদের জন্য সমাধান নয় (আমরা সিআই সার্ভারের কাছে বসে থাকা কোনও ডিভাইসকে প্লাগ-ইন করতে এবং পুনরায় প্লাগ করতে পারি না) প্রতিটি বিল্ড)।

কিছুটা ব্যাকগ্রাউন্ড হিসাবে, আমরা জ্যাককিন্স একটি ম্যাকে ব্যবহার করি, কারণ এটি আইওএসের জন্যও আমাদের সিআই চালায়।

সমস্যাটির কাছে যাওয়ার সময় আমি ভেবেছিলাম যে ওএস স্তরে যদি ডিভাইসটি পাওয়া যায় তবে এটি কমপক্ষে একটি শুরু। প্রকৃতপক্ষে, কমান্ড চালনার মতো system_profiler SPUSBDataTypeসফলভাবে ডিভাইস সন্ধান করে, সঠিকভাবে কাজ করার সময় এডিবি জানিয়েছে এমন ক্রমিক নম্বর সহ।

সমস্ত ইউএসবি ক্রিয়াকলাপটি "রিফ্রেশ" করার জন্য আমি কয়েকটি লম্পট কমান্ড চেষ্টা করেছি, কিন্তু আমি কোথাও চলেছি না। এটি এমন নয় যে আপনি ডিভাইসটিকে মাউন্ট / আনমাউন্ট করতে পারবেন, তবে সত্যি কথা বলতে আমি সমস্যাটি কোথায় তাও নিশ্চিত নই, নিম্ন স্তরের ইউএসবি প্রোটোকল সম্পর্কে আমি যথেষ্ট পরিমাণে জানি না, ম্যাকদের জন্য ছেড়ে দিন। আমার এডিবি উত্স কোডটি লুকানো ছিল খুব দীর্ঘ শট।

সুতরাং এই মুহুর্তে আমি সমস্ত কান এর সমাধানের জন্য যা আমাদের সিআই সার্ভারে অবিচ্ছিন্নভাবে অ্যান্ড্রয়েড চালানোর অনুমতি দেয়। প্রতিটি জেনকিন্স কাজের আগে কিছু কমান্ড হোন, এডিবি প্যাচিং বা অন্য কোনও কালো যাদু কৌশল।

উত্তর:


9

এটি সমাধানের একটি উপায় খুঁজে পেয়েছেন, সুতরাং সম্পূর্ণতার জন্য এখানে পোস্ট করা। দয়া করে মনে রাখবেন যে আমি এটি সমাধান করার সর্বোত্তম উপায় এটি বলছি না , তবে এটি আমাদের পক্ষে কার্যকর।

সুতরাং, আমরা বুঝতে পেরেছিলাম সিআই নিষ্ক্রিয়তার দীর্ঘ সময়ের পরে (কয়েক ঘন্টা ধরে) সমস্যাটি ঘটেছে। সুতরাং আমরা একটি সাধারণ স্ক্রিপ্ট তৈরি করেছি যা adb devicesপ্রতি 10 সেকেন্ডে কল করে। এবং সমস্যাটি চলে গেছে, আর কোনও "ডিভাইসের অপেক্ষায়" সমস্যা নেই।

লিনাক্সে আপনি একটি সাধারণ cronকাজ এবং ওএসএক্সের সাহায্যে এটি করতে পারেন launchctlএবং আমি নিশ্চিত যে উইন্ডোজ সমতুল্য।

নির্বিশেষে, প্রতি 10 সেকেন্ডে ডিভাইসগুলিকে "পিং করা" এটি আমাদের জন্য সমাধান করে।


1
ধন্যবাদ! মনে হচ্ছে আমারও একই সমস্যা ছিল। আনপলগিং এবং পিছনে প্লাগ ইন করে USB কেবলটি ডিভাইসটিকে তালিকায় দেখায়।
জর্জি পেড্রেট

5

ফোনে ইউএসবি ডিবাগিং (সেটিংস => বিকাশকারী বিকল্প) সক্ষম করা সহায়তা করেছে।


1

একটি ওএসএক্স মেশিন (আইওএস এবং অ্যান্ড্রয়েড উভয়ের জন্যও ব্যবহার করে) থেকে অ্যান্ড্রয়েড ডিভাইসগুলির সাথে আমাদের অবিচ্ছিন্ন একীকরণ পরিবেশের সাথে আমাদের কিছু অবিচ্ছিন্ন সমস্যা ছিল।

আমি বিশ্বাস করি যে সমস্যাটি হ'ল আপনি জেনকিন্সকে অ্যাডবি সার্ভার শুরু করার অনুমতি দিচ্ছেন। সমস্যাগুলির কারণ কারণ জেনকিন্সের চাকরিগুলি শেলগুলির সাথে সম্পর্কিত যা অস্তিত্বের বাইরে। জেনকিনস যদি একটি "অ্যাডবি ডিভাইস" কল দিয়ে উদাহরণস্বরূপ অ্যাডবি ডেমোনটিকে কিক করে দেয় (উদাহরণস্বরূপ), তবে অ্যাডবি ডেমোন কিছু স্বল্প-কালীন জেনকিন্স শেলের মালিকানাধীন হবে এবং যখন শেলটি নির্বাহ শেষ করে এবং বন্ধ হয়ে যায়, তখন অ্যাডাব ডিমনটি পরিষ্কার হয়ে যাবে , যতক্ষণ না এটি অন্য একটি অ্যাডবি কল দ্বারা স্বয়ংক্রিয়ভাবে ব্যাক আপ শুরু হয়। এটি অ্যাডবি ডেমোন শুরু এবং বন্ধ করার একটি চক্রের ফলস্বরূপ, তবে আপনি যা চান তা কেবল অনির্দিষ্টকালের জন্য অব্যাহত থাকে।

এটির সমাধানের একটি উপায় হ'ল কেবল শেল থেকে "অ্যাডবি ডিভাইস" চালানো যা সিআই মেশিনে খোলা থাকে। এই বার্তাটি চালানোর পরে প্রদর্শিত হয় কিনা তা দ্বারা আপনি এটি পিতামাতার প্রক্রিয়া কিনা তা বলতে পারেন

blah$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
xxxxxxxxxxx          device

আপনার মেশিনটি পুনরায় চালু হওয়ার সাথে সাথে প্রতিবার সঞ্চালন করতে এটি একটি বিরক্তিকর পদক্ষেপ এবং যদি কেউ সেই আদেশ কমান্ড উইন্ডোটি বন্ধ করে দেয় তবে আপনি আগের সমস্যাটিতে ফিরে যাবেন।

তত্ত্ব অনুসারে, বুটআপে অ্যাডবি ডেমোন ট্রিগার করতে .plist ফাইল তৈরি করা আরও ভাল উপায়। এখানে একটি উদাহরণ রয়েছে: Library / লাইব্রেরি / লঞ্চআজেন্টস / সার্ভার.এডিবি.প্লেস্ট। জেনকিন্স এর মালিকানা থেকে বাঁচতে এটি মূলত ব্যবহারকারী লঞ্চ ডেমন থেকে অ্যাডবি স্টার্ট সার্ভার চালায়।

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>server.adb</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/Shared/Jenkins/android-sdk/platform-tools/adb</string>
        <string>start-server</string>
    </array>
  </dict>
</plist>

তবে এর সাথে সমস্যাটি হ'ল এটি কেবল অ্যাডবি শুরু হয়, তবে এটি ব্লক করে না, তাই আপনি কীপলাইভ লঞ্চ নিয়ন্ত্রণ কার্যকারিতাটি ব্যবহার করতে পারবেন না। এছাড়াও, এটি পছন্দসই উদ্দেশ্যে কাজ করছে বলে মনে হয় না। যদি কেউ "ডেমন" মোডে অ্যাডবি চালানোর কোনও উপায় জানেন তবে এটি আর ফিরে আসে না, তবে জেনকিন্স কখনও মালিকানা পাবেন না তা নিশ্চিত করে এই প্রবর্তন ব্যবস্থাটি এটি স্বয়ংক্রিয়ভাবে পুনরায় চালু করার জন্য সেট আপ করা যেতে পারে। ওহ ভাল, আপাতত আমি একটি শেল উইন্ডোতে "অ্যাডাব ডিভাইস" চালাচ্ছি এবং এটিকে খোলা রেখে দেব।


1

আমি প্রতিটি পরীক্ষার রানের আগে ইউএসবি হাবগুলি পুনরায় বুট করতে একটি প্রোগ্রামযোগ্য পাওয়ার স্ট্রিপ ব্যবহার করে এটি সমাধান করেছি। এটি ইউএসবি কেবলগুলিকে পিছনে আনপ্লাগ এবং প্লাগ করার মতোই কাজ করেছিল।


আপনি আরও ব্যাখ্যা করতে পারেন?
দিনেশ

1

আমি কেবল জুয়ান-দেলগাদোর দুর্দান্ত পরামর্শ অনুসরণ করতে চেয়েছিলাম । আমি ম্যাকস হাই সিয়েরায় দেখতে পেলাম যে কমান্ডটি adbসহ প্রতি 10 সেকেন্ডের মধ্যে দৌড়ানো watchদ্রুত কাজ হিসাবে কার্যকর ছিল:

watch -n 10 adb -d devices

এটি আমাকে একটি .plistফাইল তৈরি করতে পারছে, তবে স্পষ্টত অপূর্ণতা এটি স্থায়ী সমাধান নয়। watchতাই এটি কার্যকর পাশাপাশি সেখানে হওয়া উচিত কমান্ড ওএসএক্স র পূর্ববর্তী সংস্করণে উপলব্ধ।


আমার কাছে watchম্যাকোস ক্যাটালিনা ছিল না, তবে এটি সহজেই ইনস্টল করতে সক্ষম হয়েছিল brew install watch
মোকাগিও

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.