Android डीबग ब्रिज (adb
) एक वर्सेटाइल कमांड-लाइन टूल है. इसकी मदद से, किसी डिवाइस से कम्यूनिकेट किया जा सकता है. adb
कमांड की मदद से, डिवाइस पर कई कार्रवाइयां की जा सकती हैं. जैसे, ऐप्लिकेशन इंस्टॉल करना और उन्हें डीबग करना. adb
, Unix शेल का ऐक्सेस देता है. इसका इस्तेमाल करके, किसी डिवाइस पर कई तरह के निर्देश चलाए जा सकते हैं. यह एक क्लाइंट-सर्वर प्रोग्राम है. इसमें तीन कॉम्पोनेंट शामिल होते हैं:
- क्लाइंट, जो कमांड भेजता है. क्लाइंट, आपकी डेवलपमेंट मशीन पर चलता है.
adb
कमांड जारी करके, कमांड-लाइन टर्मिनल से किसी क्लाइंट को शुरू किया जा सकता है. - एक डेमॉन (adbd), जो किसी डिवाइस पर कमांड चलाता है. यह डेमॉन, हर डिवाइस पर बैकग्राउंड प्रोसेस के तौर पर काम करता है.
- एक सर्वर, जो क्लाइंट और डेमॉन के बीच कम्यूनिकेशन को मैनेज करता है. सर्वर, आपकी डेवलपमेंट मशीन पर बैकग्राउंड प्रोसेस के तौर पर काम करता है.
adb
, Android SDK Platform Tools पैकेज में शामिल है. इस पैकेज को SDK Manager की मदद से डाउनलोड करें. यह इसे android_sdk/platform-tools/
पर इंस्टॉल करता है. अगर आपको Android SDK Platform Tools का स्टैंडअलोन पैकेज चाहिए, तो इसे यहां से डाउनलोड करें.
adb
पर इस्तेमाल करने के लिए किसी डिवाइस को कनेक्ट करने के बारे में जानकारी पाने के लिए, हार्डवेयर डिवाइस पर ऐप्लिकेशन चलाना लेख पढ़ें. इसमें, कनेक्शन असिस्टेंट का इस्तेमाल करके सामान्य समस्याओं को हल करने का तरीका भी बताया गया है.
adb कैसे काम करता है
adb
क्लाइंट शुरू करने पर, क्लाइंट पहले यह देखता है कि adb
सर्वर प्रोसेस पहले से चल रही है या नहीं. अगर ऐसा नहीं है, तो यह सर्वर प्रोसेस शुरू करता है.
जब सर्वर शुरू होता है, तो यह लोकल टीसीपी पोर्ट 5037 से जुड़ जाता है. साथ ही, adb
क्लाइंट से भेजे गए निर्देशों को सुनता है.
ध्यान दें: सभी adb
क्लाइंट, adb
सर्वर से कम्यूनिकेट करने के लिए पोर्ट 5037 का इस्तेमाल करते हैं.
इसके बाद, सर्वर सभी चालू डिवाइसों से कनेक्शन सेट अप करता है.
यह 5555 से 5585 के बीच के विषम संख्या वाले पोर्ट को स्कैन करके, इम्यूलेटर का पता लगाता है. यह रेंज, पहले 16 इम्यूलेटर इस्तेमाल करते हैं. जब सर्वर को adb
डेमॉन (adbd) मिलता है, तो वह उस पोर्ट से कनेक्शन सेट अप करता है.
हर एम्युलेटर, क्रम से लगे दो पोर्ट का इस्तेमाल करता है. इनमें से एक पोर्ट, कंसोल कनेक्शन के लिए होता है और दूसरा पोर्ट, adb
कनेक्शन के लिए होता है. कंसोल कनेक्शन के लिए सम संख्या वाला पोर्ट इस्तेमाल किया जाता है और adb
कनेक्शन के लिए विषम संख्या वाला पोर्ट इस्तेमाल किया जाता है. उदाहरण के लिए:
एम्युलेटर 1, कंसोल: 5554
एम्युलेटर 1, adb
: 5555
एम्युलेटर 2, कंसोल: 5556
एम्युलेटर 2, adb
: 5557
वगैरह.
दिखाए गए उदाहरण में, पोर्ट 5555 पर adb
से कनेक्ट किया गया एम्युलेटर, उस एम्युलेटर के जैसा ही है जिसका कंसोल पोर्ट 5554 पर सिग्नल पाने के लिए कॉन्फ़िगर किया गया है.
सर्वर के सभी डिवाइसों से कनेक्ट हो जाने के बाद, उन डिवाइसों को ऐक्सेस करने के लिए, adb
कमांड का इस्तेमाल किया जा सकता है. सर्वर, डिवाइसों से कनेक्शन मैनेज करता है और कई adb
क्लाइंट से मिलने वाले निर्देशों को हैंडल करता है. इसलिए, किसी भी डिवाइस को किसी भी क्लाइंट या स्क्रिप्ट से कंट्रोल किया जा सकता है.
अपने डिवाइस पर adb डीबग करने की सुविधा चालू करना
यूएसबी से कनेक्ट किए गए डिवाइस के साथ adb का इस्तेमाल करने के लिए, आपको डिवाइस की सिस्टम सेटिंग में जाकर डेवलपर के लिए सेटिंग और टूल में यूएसबी डीबग करना चालू करना होगा. Android 4.2 (एपीआई लेवल 17) और इसके बाद के वर्शन में, डेवलपर के लिए सेटिंग और टूल स्क्रीन डिफ़ॉल्ट रूप से छिपी होती है. इसे दिखाने के लिए, डेवलपर के लिए सेटिंग और टूल चालू करें.
अब यूएसबी केबल से डिवाइस को कनेक्ट किया जा सकता है. adb devices
डायरेक्ट्री से adb devices
कमांड चलाकर, यह पुष्टि की जा सकती है कि आपका डिवाइस कनेक्ट है या नहीं.android_sdk/platform-tools/
अगर डिवाइस कनेक्ट है, तो आपको डिवाइस का नाम "डिवाइस" के तौर पर दिखेगा.
ध्यान दें: Android 4.2.2 (एपीआई लेवल 17) या उसके बाद के वर्शन वाले डिवाइस को कनेक्ट करने पर, सिस्टम एक डायलॉग दिखाता है. इसमें पूछा जाता है कि क्या आपको आरएसए कुंजी स्वीकार करनी है. इससे इस कंप्यूटर के ज़रिए डीबग करने की अनुमति मिलती है. सुरक्षा से जुड़ा यह तरीका, उपयोगकर्ता के डिवाइसों को सुरक्षित रखता है. ऐसा इसलिए, क्योंकि यह पक्का करता है कि यूएसबी डीबगिंग और अन्य adb कमांड तब तक नहीं चलाई जा सकतीं, जब तक डिवाइस को अनलॉक न किया जाए और डायलॉग बॉक्स में पुष्टि न की जाए.
यूएसबी के ज़रिए किसी डिवाइस से कनेक्ट करने के बारे में ज़्यादा जानने के लिए, हार्डवेयर डिवाइस पर ऐप्लिकेशन चलाना लेख पढ़ें.
वाई-फ़ाई की मदद से किसी डिवाइस से कनेक्ट करना
ध्यान दें: यहां दिए गए निर्देश, Android 11 (एपीआई लेवल 30) पर काम करने वाले Wear डिवाइसों पर लागू नहीं होते. ज़्यादा जानकारी के लिए, Wear OS ऐप्लिकेशन को डीबग करने से जुड़ी गाइड देखें.
Android 11 (एपीआई लेवल 30) और इसके बाद के वर्शन में, Android डीबग ब्रिज (adb) का इस्तेमाल करके, अपने वर्कस्टेशन से ऐप्लिकेशन को वायरलेस तरीके से डिप्लॉय और डीबग किया जा सकता है. उदाहरण के लिए, डीबग किए जा सकने वाले ऐप्लिकेशन को कई रिमोट डिवाइसों पर डिप्लॉय किया जा सकता है. इसके लिए, आपको अपने डिवाइस को यूएसबी से कनेक्ट करने की ज़रूरत नहीं होती. इससे यूएसबी कनेक्शन से जुड़ी सामान्य समस्याओं को हल करने की ज़रूरत नहीं पड़ती. जैसे, ड्राइवर इंस्टॉल करना.
वॉयरलेस डीबगिंग का इस्तेमाल शुरू करने से पहले, यह काम करें:
-
पक्का करें कि आपका वर्कस्टेशन और डिवाइस, एक ही वायरलेस नेटवर्क से कनेक्ट हों.
-
पक्का करें कि आपके फ़ोन में Android 11 (एपीआई लेवल 30) या उसके बाद का वर्शन हो. साथ ही, टीवी और WearOS के लिए Android 13 (एपीआई लेवल 33) या उसके बाद का वर्शन हो. ज़्यादा जानकारी के लिए, अपने डिवाइस का Android वर्शन देखना और उसे अपडेट करना लेख पढ़ें.
-
अगर आईडीई का इस्तेमाल किया जा रहा है, तो पक्का करें कि आपने Android Studio का नया वर्शन इंस्टॉल किया हो. इसे यहां से डाउनलोड किया जा सकता है.
-
अपने वर्कस्टेशन पर, SDK Platform Tools को नए वर्शन पर अपडेट करें.
वायरलेस डीबगिंग का इस्तेमाल करने के लिए, आपको अपने डिवाइस को वर्कस्टेशन से जोड़ना होगा. इसके लिए, क्यूआर कोड या डिवाइस जोड़ने वाले कोड का इस्तेमाल करें. आपका वर्कस्टेशन और डिवाइस, एक ही वायरलेस नेटवर्क से कनेक्ट होना चाहिए. अपने डिवाइस से कनेक्ट करने के लिए, यह तरीका अपनाएं:
-
अपने डिवाइस पर डेवलपर के लिए सेटिंग और टूल चालू करें.
-
Android Studio खोलें और रन कॉन्फ़िगरेशन मेन्यू से वाई-फ़ाई का इस्तेमाल करके डिवाइसों को जोड़ें चुनें.
पहली इमेज. कॉन्फ़िगरेशन मेन्यू चलाएं.दूसरी इमेज में दिखाए गए तरीके से, वाई-फ़ाई से डिवाइसों को जोड़ें विंडो पॉप-अप होती है.
दूसरी इमेज. क्यूआर कोड या डिवाइस जोड़ने वाले कोड का इस्तेमाल करके, डिवाइसों को जोड़ने के लिए पॉप-अप विंडो. -
अपने डिवाइस पर, वायरलेस डिबगिंग पर टैप करें और अपने डिवाइस को पेयर करें:
तीसरी इमेज. Google Pixel फ़ोन पर वायरलेस डीबगिंग सेटिंग के चालू होने का स्क्रीनशॉट.-
अपने डिवाइस को क्यूआर कोड से जोड़ने के लिए, डिवाइस को क्यूआर कोड से जोड़ें को चुनें. इसके बाद, वाई-फ़ाई नेटवर्क से डिवाइस जोड़ें पॉप-अप से मिला क्यूआर कोड स्कैन करें. यह पॉप-अप, इमेज 2 में दिखाया गया है.
-
अपने डिवाइस को पेयरिंग कोड की मदद से जोड़ने के लिए, वाई-फ़ाई से डिवाइस जोड़ें पॉप-अप में जाकर, पेयरिंग कोड की मदद से डिवाइस जोड़ें को चुनें. अपने डिवाइस पर, जोड़ने के लिए कोड का इस्तेमाल करके जोड़ें को चुनें. इसके बाद, दिए गए छह अंकों के कोड को नोट करें. जब आपका डिवाइस वाई-फ़ाई से डिवाइस जोड़ें विंडो में दिखने लगे, तब जोड़ें को चुनें. इसके बाद, अपने डिवाइस पर दिखने वाला छह अंकों का कोड डालें.
चौथी इमेज. छह अंकों का कोड डालने का उदाहरण.
-
-
डिवाइस कनेक्ट होने के बाद, अपने डिवाइस पर ऐप्लिकेशन डिप्लॉय करने की कोशिश करें.
किसी दूसरे डिवाइस को पेयर करने या अपने वर्कस्टेशन पर मौजूदा डिवाइस को भूलने के लिए, अपने डिवाइस पर वायरलेस डीबगिंग पर जाएं. पेयर किए गए डिवाइस में जाकर, अपने वर्कस्टेशन के नाम पर टैप करें. इसके बाद, हटाएं को चुनें.
-
अगर आपको वायरलेस डीबगिंग की सुविधा को तुरंत चालू और बंद करना है, तो डेवलपर के लिए सेटिंग और टूल > क्विक सेटिंग डेवलपर टाइल में जाकर, वायरलेस डीबगिंग के लिए क्विक सेटिंग डेवलपर टाइल का इस्तेमाल करें.
पांचवीं इमेज. क्विक सेटिंग डेवलपर टाइल सेटिंग की मदद से, वायरलेस डीबगिंग की सुविधा को तुरंत चालू और बंद किया जा सकता है.
कमांड लाइन का इस्तेमाल करके वाई-फ़ाई कनेक्शन
इसके अलावा, Android Studio के बिना कमांड लाइन का इस्तेमाल करके अपने डिवाइस से कनेक्ट करने के लिए, यह तरीका अपनाएं:
-
अपने डिवाइस पर डेवलपर के लिए सेटिंग और टूल चालू करें. इसके बारे में ऊपर बताया गया है.
-
अपने डिवाइस पर वायरलेस डीबगिंग की सुविधा चालू करें. इसके बारे में पहले बताया जा चुका है.
-
अपने वर्कस्टेशन पर, कोई टर्मिनल विंडो खोलें और
android_sdk/platform-tools
पर जाएं. -
डिवाइस को जोड़ने के लिए दिए गए कोड की मदद से जोड़ें को चुनकर, अपना आईपी पता, पोर्ट नंबर, और जोड़ने के लिए दिया गया कोड ढूंढें. डिवाइस पर दिखने वाले आईपी पते, पोर्ट नंबर, और पेयरिंग कोड को नोट करें.
-
अपने वर्कस्टेशन के टर्मिनल पर,
adb pair ipaddr:port
चलाएं. ऊपर दिए गए आईपी पते और पोर्ट नंबर का इस्तेमाल करें. -
जब आपसे कहा जाए, तब यहां दिखाया गया पेयरिंग कोड डालें.
छठी इमेज. आपको एक मैसेज मिलेगा, जिसमें बताया जाएगा कि आपका डिवाइस कनेक्ट हो गया है.
वायरलेस कनेक्शन से जुड़ी समस्याएं हल करना
अगर आपको अपने डिवाइस को वायरलेस तरीके से कनेक्ट करने में समस्याएं आ रही हैं, तो समस्या हल करने के लिए यह तरीका आज़माएं.
देखें कि आपका वर्कस्टेशन और डिवाइस, ज़रूरी शर्तें पूरी करता हो
देखें कि वर्कस्टेशन और डिवाइस, इस सेक्शन की शुरुआत में दी गई ज़रूरी शर्तें पूरी करते हों.
आम तौर पर होने वाली अन्य समस्याओं के बारे में जानकारी
यहां वायरलेस डीबगिंग (adb या Android Studio के साथ) से जुड़ी मौजूदा समस्याओं की सूची दी गई है. साथ ही, उन्हें हल करने का तरीका भी बताया गया है:
-
वाई-फ़ाई से कनेक्ट नहीं हो रहा है: कॉर्पोरेट वाई-फ़ाई नेटवर्क जैसे सुरक्षित वाई-फ़ाई नेटवर्क, पी2पी कनेक्शन को ब्लॉक कर सकते हैं. साथ ही, आपको वाई-फ़ाई से कनेक्ट करने की अनुमति नहीं दे सकते. केबल या किसी दूसरे (कॉर्पोरेट नेटवर्क से बाहर का) वाई-फ़ाई नेटवर्क से कनेक्ट करके देखें. वायरलेस कनेक्शन के लिए,
adb connect ip:port
ओवर टीसीपी/आईपी (यूएसबी कनेक्शन के बाद) का इस्तेमाल किया जा सकता है. हालांकि, ऐसा तब किया जा सकता है, जब कॉर्पोरेट नेटवर्क के अलावा किसी दूसरे नेटवर्क का इस्तेमाल किया जा सकता हो. -
adb
वाई-फ़ाई से कनेक्ट होने पर, कभी-कभी अपने-आप बंद हो जाता है: ऐसा तब हो सकता है, जब डिवाइस वाई-फ़ाई नेटवर्क बदलता है या नेटवर्क से डिसकनेक्ट हो जाता है. इस समस्या को हल करने के लिए, नेटवर्क से फिर से कनेक्ट करें. -
डिवाइस को जोड़ने के बाद भी कनेक्ट नहीं हो रहा है:
adb
, जोड़े गए डिवाइसों को खोजने और उनसे अपने-आप कनेक्ट होने के लिए mDNS पर निर्भर करता है. अगर आपके नेटवर्क या डिवाइस के कॉन्फ़िगरेशन में mDNS की सुविधा काम नहीं करती है या इसे बंद कर दिया गया है, तो आपकोadb connect ip:port
का इस्तेमाल करके डिवाइस से मैन्युअल तरीके से कनेक्ट करना होगा.
पहली बार यूएसबी से कनेक्ट करने के बाद, किसी डिवाइस से वायरलेस तरीके से कनेक्ट करें. यह विकल्प सिर्फ़ Android 10 और इससे पहले के वर्शन पर उपलब्ध है
ध्यान दें: यह वर्कफ़्लो, Android 11 और इसके बाद के वर्शन पर भी लागू होता है. हालांकि, इसमें फ़िज़िकल यूएसबी के ज़रिए *शुरुआती* कनेक्शन भी शामिल होता है.
ध्यान दें: यहां दिए गए निर्देश, Android 10 (एपीआई लेवल 29) या इससे पहले के वर्शन पर काम करने वाले Wear डिवाइसों पर लागू नहीं होते. ज़्यादा जानकारी के लिए, Wear OS ऐप्लिकेशन को डीबग करने के बारे में गाइड देखें.
adb
आम तौर पर, यूएसबी के ज़रिए डिवाइस से कम्यूनिकेट करता है. हालांकि, वाई-फ़ाई के ज़रिए भी adb
का इस्तेमाल किया जा सकता है. Android 10 (एपीआई लेवल 29) या इससे पहले के वर्शन वाले डिवाइस को कनेक्ट करने के लिए,
यूएसबी के ज़रिए यह शुरुआती तरीका अपनाएं:
-
अपने Android डिवाइस और
adb
होस्ट कंप्यूटर को एक ही वाई-फ़ाई नेटवर्क से कनेक्ट करें. - डिवाइस को यूएसबी केबल की मदद से होस्ट कंप्यूटर से कनेक्ट करें.
-
टारगेट डिवाइस को पोर्ट 5555 पर टीसीपी/आईपी कनेक्शन सुनने के लिए सेट करें:
adb tcpip 5555
- यूएसबी केबल को टारगेट डिवाइस से डिसकनेक्ट करें.
- Android डिवाइस का आईपी पता ढूंढें. उदाहरण के लिए, Nexus डिवाइस पर आईपी पता देखने के लिए, सेटिंग > टैबलेट के बारे में जानकारी (या फ़ोन के बारे में जानकारी) > स्थिति > आईपी पता पर जाएं.
-
डिवाइस के आईपी पते से कनेक्ट करें:
adb connect device_ip_address:5555
-
पुष्टि करें कि आपका होस्ट कंप्यूटर, टारगेट डिवाइस से कनेक्ट है:
$ adb devices List of devices attached device_ip_address:5555 device
ध्यान दें: सभी ऐक्सेस पॉइंट सही नहीं होते. आपको ऐसे ऐक्सेस पॉइंट का इस्तेमाल करना पड़ सकता है जिसका फ़ायरवॉल, adb
के साथ काम करने के लिए सही तरीके से कॉन्फ़िगर किया गया हो.
आपका डिवाइस अब adb
से कनेक्ट हो गया है.
अगर adb
का कनेक्शन आपके डिवाइस से टूट जाता है, तो:
- पक्का करें कि आपका होस्ट डिवाइस अब भी उसी वाई-फ़ाई नेटवर्क से कनेक्ट हो जिससे आपका Android डिवाइस कनेक्ट है.
-
adb connect
चरण को फिर से पूरा करके, कनेक्ट करें. -
अगर इससे समस्या हल नहीं होती है, तो
adb
होस्ट को रीसेट करें:adb kill-server
इसके बाद, शुरू से फिर से कोशिश करें.
डिवाइसों के बारे में क्वेरी करना
adb
कमांड जारी करने से पहले, यह जानना ज़रूरी है कि adb
सर्वर से कौनसे डिवाइस इंस्टेंस कनेक्ट हैं. devices
कमांड का इस्तेमाल करके, कनेक्ट किए गए डिवाइसों की सूची जनरेट करें:
adb devices -l
इसके जवाब में, adb
हर डिवाइस के लिए यह स्थिति की जानकारी प्रिंट करता है:
- सीरियल नंबर:
adb
पोर्ट नंबर के हिसाब से, डिवाइस की पहचान करने के लिए एक स्ट्रिंग बनाता है. यहां सीरियल नंबर का एक उदाहरण दिया गया है:emulator-5554
- स्टेट: डिवाइस के कनेक्शन की स्थिति इनमें से कोई एक हो सकती है:
offline
: डिवाइस,adb
से कनेक्ट नहीं है या काम नहीं कर रहा है.device
: डिवाइस,adb
सर्वर से कनेक्ट है. ध्यान दें कि इस स्थिति का मतलब यह नहीं है कि Android सिस्टम पूरी तरह से बूट हो गया है और काम कर रहा है, क्योंकि सिस्टम के बूट होने के दौरान डिवाइसadb
से कनेक्ट होता है. बूट-अप के बाद, यह डिवाइस की सामान्य ऑपरेशनल स्थिति होती है.no device
: कोई डिवाइस कनेक्ट नहीं है.
- ब्यौरा:
-l
विकल्प को शामिल करने पर,devices
कमांड से आपको डिवाइस के बारे में जानकारी मिलती है. यह जानकारी तब काम आती है, जब आपके पास एक से ज़्यादा डिवाइस कनेक्ट हों, ताकि आप उनमें अंतर कर सकें.
यहां दिए गए उदाहरण में, devices
कमांड और उसके आउटपुट को दिखाया गया है. तीन डिवाइसों पर YouTube चल रहा है. सूची की पहली दो लाइनें एम्युलेटर हैं. तीसरी लाइन, कंप्यूटर से जुड़ा हार्डवेयर डिवाइस है.
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
एम्युलेटर का नाम सूची में नहीं है
adb devices
कमांड में एक कॉर्नर-केस कमांड सीक्वेंस होता है. इसकी वजह से, चल रहे इम्यूलेटर adb devices
के आउटपुट में नहीं दिखते. भले ही, इम्यूलेटर आपके डेस्कटॉप पर दिख रहे हों. ऐसा तब होता है, जब यहां दी गई सभी शर्तें पूरी होती हैं:
adb
सर्वर काम नहीं कर रहा है.emulator
कमांड का इस्तेमाल-port
या-ports
विकल्प के साथ किया जाता है. इसके लिए, पोर्ट की वैल्यू 5554 से 5584 के बीच होनी चाहिए और वह एक विषम संख्या होनी चाहिए.- आपने जो विषम संख्या वाला पोर्ट चुना है वह व्यस्त नहीं है. इसलिए, पोर्ट कनेक्शन को तय किए गए पोर्ट नंबर पर बनाया जा सकता है. अगर वह व्यस्त है, तो एम्युलेटर किसी ऐसे दूसरे पोर्ट पर स्विच कर देता है जो 2 में दी गई ज़रूरी शर्तों को पूरा करता है.
- एम्युलेटर शुरू करने के बाद,
adb
सर्वर शुरू करें.
इस समस्या से बचने का एक तरीका यह है कि एम्युलेटर को अपने पोर्ट चुनने दें. साथ ही, एक बार में 16 से ज़्यादा एम्युलेटर न चलाएं. emulator
कमांड का इस्तेमाल करने से पहले, हमेशा adb
सर्वर शुरू करें. इसके बारे में यहां दिए गए उदाहरणों में बताया गया है.
पहला उदाहरण: यहां दिए गए कमांड सीक्वेंस में, adb devices
कमांड से adb
सर्वर शुरू होता है, लेकिन डिवाइसों की सूची नहीं दिखती.
adb
सर्वर को बंद करें और यहां दी गई कमांड को इसी क्रम में डालें. AVD के नाम के लिए, अपने सिस्टम से AVD का मान्य नाम डालें. एवीडी के नामों की सूची पाने के लिए, emulator -list-avds
टाइप करें. emulator
कमांड, android_sdk/tools
डायरेक्ट्री में मौजूद है.
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
दूसरा उदाहरण: कमांड के इस क्रम में, adb devices
डिवाइसों की सूची दिखाता है, क्योंकि adb
सर्वर को पहले शुरू किया गया था.
adb devices
आउटपुट में एम्युलेटर देखने के लिए, adb
सर्वर को बंद करें. इसके बाद, emulator
कमांड का इस्तेमाल करने के बाद और adb devices
कमांड का इस्तेमाल करने से पहले, सर्वर को फिर से शुरू करें. इसके लिए, यह तरीका अपनाएं:
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
एम्युलेटर के कमांड-लाइन विकल्पों के बारे में ज़्यादा जानने के लिए, कमांड-लाइन स्टार्टअप के विकल्प लेख पढ़ें.
किसी डिवाइस को निर्देश देना
अगर एक से ज़्यादा डिवाइस चल रहे हैं, तो आपको adb
कमांड देते समय, टारगेट डिवाइस के बारे में बताना होगा.
टारगेट तय करने के लिए, यह तरीका अपनाएं:
- टारगेट का सीरियल नंबर पाने के लिए,
devices
कमांड का इस्तेमाल करें. - सीरियल नंबर मिलने के बाद,
adb
कमांड के साथ-s
विकल्प का इस्तेमाल करके सीरियल नंबर डालें.- अगर आपको कई
adb
कमांड जारी करनी हैं, तोadb
एनवायरमेंट वैरिएबल को सेट किया जा सकता है, ताकि इसमें सीरियल नंबर शामिल हो.$ANDROID_SERIAL
- अगर
-s
और$ANDROID_SERIAL
, दोनों का इस्तेमाल किया जाता है, तो-s
,$ANDROID_SERIAL
की वैल्यू को बदल देता है.
- अगर आपको कई
यहां दिए गए उदाहरण में, अटैच किए गए डिवाइसों की सूची मिलती है. इसके बाद, किसी एक डिवाइस के सीरियल नंबर का इस्तेमाल करके, उस डिवाइस पर helloWorld.apk
इंस्टॉल किया जाता है:
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
ध्यान दें: अगर एक से ज़्यादा डिवाइस उपलब्ध होने पर, टारगेट डिवाइस के बारे में जानकारी दिए बिना कोई निर्देश दिया जाता है, तो adb
"adb: एक से ज़्यादा डिवाइस/इम्यूलेटर" गड़बड़ी दिखाता है.
अगर आपके पास एक से ज़्यादा डिवाइस उपलब्ध हैं, लेकिन उनमें से सिर्फ़ एक एम्युलेटर है, तो एम्युलेटर को निर्देश भेजने के लिए -e
विकल्प का इस्तेमाल करें. अगर एक से ज़्यादा डिवाइस कनेक्ट हैं, लेकिन सिर्फ़ एक हार्डवेयर डिवाइस अटैच है, तो हार्डवेयर डिवाइस को निर्देश भेजने के लिए, -d
विकल्प का इस्तेमाल करें.
ऐप्लिकेशन इंस्टॉल करना
adb
कमांड का इस्तेमाल करके, किसी एम्युलेटर या कनेक्ट किए गए डिवाइस पर APK इंस्टॉल किया जा सकता है:install
adb install path_to_apk
टेस्ट APK इंस्टॉल करते समय, आपको install
कमांड के साथ -t
विकल्प का इस्तेमाल करना होगा. ज़्यादा जानकारी के लिए, -t
देखें.
एक से ज़्यादा APK इंस्टॉल करने के लिए, install-multiple
का इस्तेमाल करें. यह तब काम आता है, जब आपको Play Console से किसी डिवाइस के लिए अपने ऐप्लिकेशन के सभी APK डाउनलोड करने हों. इसके बाद, आपको उन्हें किसी एम्युलेटर या फ़िज़िकल डिवाइस पर इंस्टॉल करना हो.
किसी एम्युलेटर/डिवाइस इंस्टेंस पर इंस्टॉल की जा सकने वाली APK फ़ाइल बनाने के तरीके के बारे में ज़्यादा जानने के लिए, अपना ऐप्लिकेशन बनाएं और उसे चलाएं लेख पढ़ें.
ध्यान दें: अगर Android Studio का इस्तेमाल किया जा रहा है, तो आपको अपने ऐप्लिकेशन को एम्युलेटर या डिवाइस पर इंस्टॉल करने के लिए, सीधे तौर पर adb
का इस्तेमाल करने की ज़रूरत नहीं है. इसके बजाय, Android Studio आपके लिए ऐप्लिकेशन को पैकेज करने और इंस्टॉल करने का काम करता है.
पोर्ट फ़ॉरवर्डिंग सेट अप करें
किसी भी पोर्ट को फ़ॉरवर्ड करने की सुविधा सेट अप करने के लिए, forward
कमांड का इस्तेमाल करें. यह सुविधा, किसी होस्ट पोर्ट पर किए गए अनुरोधों को डिवाइस के किसी दूसरे पोर्ट पर फ़ॉरवर्ड करती है.
यहां दिए गए उदाहरण में, होस्ट पोर्ट 6100 को डिवाइस पोर्ट 7100 पर फ़ॉरवर्ड करने का तरीका बताया गया है:
adb forward tcp:6100 tcp:7100
यहां दिए गए उदाहरण में, होस्ट पोर्ट 6100 को local:logd पर फ़ॉरवर्ड करने का तरीका बताया गया है:
adb forward tcp:6100 local:logd
यह तब काम आ सकता है, जब आपको यह पता लगाना हो कि डिवाइस के किसी पोर्ट पर क्या भेजा जा रहा है. मिले हुए सभी डेटा को सिस्टम-लॉगिंग डेमॉन में लिखा जाएगा और डिवाइस लॉग में दिखाया जाएगा.
किसी डिवाइस में फ़ाइलें कॉपी करना और उससे फ़ाइलें कॉपी करना
किसी डिवाइस से फ़ाइलें कॉपी करने और किसी डिवाइस पर फ़ाइलें कॉपी करने के लिए, pull
और push
कमांड का इस्तेमाल करें. install
कमांड सिर्फ़ किसी APK फ़ाइल को किसी खास जगह पर कॉपी करती है. हालांकि, pull
और push
कमांड की मदद से, किसी भी डायरेक्ट्री और फ़ाइल को डिवाइस में किसी भी जगह पर कॉपी किया जा सकता है.
किसी फ़ाइल या डायरेक्ट्री और उसकी सब-डायरेक्ट्री को डिवाइस से कॉपी करने के लिए, यह तरीका अपनाएं:
adb pull remote local
किसी फ़ाइल या डायरेक्ट्री और उसकी सब-डायरेक्ट्री को डिवाइस पर कॉपी करने के लिए, यह तरीका अपनाएं:
adb push local remote
local
और remote
को, डेवलपमेंट मशीन (लोकल) और डिवाइस (रिमोट) पर मौजूद टारगेट फ़ाइलों/डायरेक्ट्री के पाथ से बदलें. उदाहरण के लिए:
adb push myfile.txt /sdcard/myfile.txt
adb सर्वर को बंद करना
कुछ मामलों में, समस्या को हल करने के लिए आपको adb
सर्वर प्रोसेस बंद करनी पड़ सकती है. इसके बाद, इसे फिर से शुरू करें. उदाहरण के लिए, ऐसा तब हो सकता है, जब adb
किसी निर्देश का जवाब न दे.
adb
सर्वर को बंद करने के लिए, adb kill-server
कमांड का इस्तेमाल करें.
इसके बाद, कोई अन्य adb
कमांड देकर सर्वर को फिर से शुरू किया जा सकता है.
adb कमांड जारी करना
अपनी डेवलपमेंट मशीन पर कमांड लाइन से या स्क्रिप्ट से adb
कमांड जारी करें. इसके लिए, इनका इस्तेमाल करें:
adb [-d | -e | -s serial_number] command
अगर सिर्फ़ एक एम्युलेटर चल रहा है या सिर्फ़ एक डिवाइस कनेक्ट है, तो adb
कमांड डिफ़ॉल्ट रूप से उस डिवाइस को भेजी जाती है. अगर एक से ज़्यादा एम्युलेटर चल रहे हैं और/या एक से ज़्यादा डिवाइस अटैच हैं, तो आपको -d
, -e
या -s
विकल्प का इस्तेमाल करके, उस टारगेट डिवाइस के बारे में बताना होगा जिस पर कमांड भेजी जानी है.
यहां दी गई कमांड का इस्तेमाल करके, adb
के साथ इस्तेमाल की जा सकने वाली सभी कमांड की पूरी सूची देखी जा सकती है:
adb --help
शेल कमांड जारी करना
shell
कमांड का इस्तेमाल, adb
के ज़रिए डिवाइसों को निर्देश देने या इंटरैक्टिव शेल शुरू करने के लिए किया जा सकता है. एक निर्देश देने के लिए, shell
कमांड का इस्तेमाल इस तरह करें:
adb [-d |-e | -s serial_number] shell shell_command
किसी डिवाइस पर इंटरैक्टिव शेल शुरू करने के लिए, इस तरह shell
कमांड का इस्तेमाल करें:
adb [-d | -e | -s serial_number] shell
इंटरैक्टिव शेल से बाहर निकलने के लिए, Control+D
दबाएं या exit
टाइप करें.
Android, Unix के ज़्यादातर सामान्य कमांड-लाइन टूल उपलब्ध कराता है. उपलब्ध टूल की सूची देखने के लिए, यह कमांड इस्तेमाल करें:
adb shell ls /system/bin
--help
आर्ग्युमेंट की मदद से, ज़्यादातर निर्देशों के लिए सहायता उपलब्ध है.
ज़्यादातर शेल कमांड, toybox से मिलती हैं.
टॉयबॉक्स के सभी निर्देशों के लिए सामान्य सहायता, toybox --help
के ज़रिए उपलब्ध है.
Android प्लैटफ़ॉर्म टूल 23 और इसके बाद के वर्शन में, adb
, आर्ग्युमेंट को उसी तरह से हैंडल करता है जिस तरह ssh(1)
कमांड करती है. इस बदलाव से, कमांड इंजेक्शन से जुड़ी कई समस्याएं ठीक हो गई हैं. साथ ही, अब शेल मेटाकैरेक्टर वाली कमांड को सुरक्षित तरीके से एक्ज़ीक्यूट किया जा सकता है. जैसे, adb install Let\'sGo.apk
. इस बदलाव का मतलब है कि शेल मेटाकैरेक्टर वाली किसी भी कमांड की व्याख्या भी बदल गई है.
उदाहरण के लिए, adb shell setprop key 'two words'
अब एक गड़बड़ी है, क्योंकि कोटेशन को लोकल शेल ने हटा दिया है. इसलिए, डिवाइस को adb shell setprop key two words
दिखता है. कमांड को काम करने के लिए, दो बार उद्धरण दें,
एक बार लोकल शेल के लिए और एक बार रिमोट शेल के लिए, जैसा कि ssh(1)
के साथ किया जाता है. उदाहरण के लिए, adb shell setprop key "'two words'"
काम करता है, क्योंकि लोकल शेल, कोटिंग का बाहरी लेवल लेता है और डिवाइस अब भी कोटिंग का अंदरूनी लेवल देखता है: setprop key 'two words'
. एस्केप करने का विकल्प भी है, लेकिन आम तौर पर दो बार उद्धरण का इस्तेमाल करना आसान होता है.
सिस्टम लॉग की निगरानी करने के लिए, Logcat कमांड-लाइन टूल का इस्तेमाल करें.
कॉल से जुड़ी गतिविधि मैनेज करने वाला ऐप्लिकेशन
adb
शेल में, ऐक्टिविटी मैनेजर (am
) टूल की मदद से कमांड दी जा सकती हैं. इससे सिस्टम से जुड़ी कई कार्रवाइयां की जा सकती हैं. जैसे, ऐक्टिविटी शुरू करना, किसी प्रोसेस को बंद करना, इंटेंट ब्रॉडकास्ट करना, डिवाइस की स्क्रीन की प्रॉपर्टी में बदलाव करना वगैरह.
शेल में, am
का सिंटैक्स यह है:
am command
रिमोट शेल में जाए बिना, सीधे adb
से भी गतिविधि मैनेजर कमांड जारी की जा सकती है. उदाहरण के लिए:
adb shell am start -a android.intent.action.VIEW
पहली टेबल. गतिविधि मैनेजर के लिए उपलब्ध निर्देश
निर्देश | ब्यौरा |
---|---|
start [options] intent
|
intent के ज़रिए तय की गई Activity शुरू करें. इंटेंट आर्ग्युमेंट के लिए स्पेसिफ़िकेशन देखें. इसके विकल्प:
|
startservice [options] intent
|
intent में बताए गए Service को शुरू करता है. इंटेंट आर्ग्युमेंट के लिए स्पेसिफ़िकेशन देखें. इसके विकल्प:
|
force-stop package
|
package से जुड़े सभी ऐप्लिकेशन को ज़बरदस्ती बंद करें.
|
kill [options] package
|
package से जुड़ी सभी प्रोसेस बंद करें. यह कमांड सिर्फ़ उन प्रोसेस को बंद करती है जिन्हें बंद करना सुरक्षित है और जिनसे उपयोगकर्ता के अनुभव पर कोई असर नहीं पड़ेगा.
इसके विकल्प:
|
kill-all
|
बैकग्राउंड में चल रही सभी प्रोसेस बंद करें. |
broadcast [options] intent
|
ब्रॉडकास्ट इंटेंट जारी करना. इंटेंट आर्ग्युमेंट के लिए स्पेसिफ़िकेशन देखें. इसके विकल्प:
|
instrument [options] component
|
Instrumentation इंस्टेंस की मदद से मॉनिटरिंग शुरू करें.
आम तौर पर, टारगेट component , फ़ॉर्म test_package/runner_class होता है. इसके विकल्प:
|
profile start process file
|
process पर प्रोफ़ाइलर शुरू करें और नतीजों को file में लिखें.
|
profile stop process
|
process पर प्रोफ़ाइलर को रोकें.
|
dumpheap [options] process file
|
process को डंप करें, file में लिखें. इसके विकल्प:
|
dumpbitmaps [options] [-p process]
|
process से बिटमैप की जानकारी डंप करें (एपीआई लेवल 36 और इसके बाद के वर्शन).
इसके विकल्प:
process नहीं दिया गया है, तो सभी प्रोसेस से बिटमैप डंप किए जाएंगे.
|
set-debug-app [options] package
|
डीबग करने के लिए, ऐप्लिकेशन package सेट करें. इसके विकल्प:
|
clear-debug-app
|
set-debug-app की मदद से डीबग करने के लिए, पैकेज के पिछले सेट को मिटाएं.
|
monitor [options]
|
क्रैश या एएनआर की निगरानी करना शुरू करें. इसके विकल्प:
|
screen-compat {on | off} package
|
इस नीति से, package के स्क्रीन कंपैटबिलिटी मोड को कंट्रोल किया जाता है.
|
display-size [reset | widthxheight]
|
डिवाइस के डिसप्ले साइज़ को बदलता है.
यह कमांड, अलग-अलग स्क्रीन साइज़ पर अपने ऐप्लिकेशन की जांच करने में मदद करती है. इसके लिए, बड़ी स्क्रीन वाले डिवाइस पर छोटे स्क्रीन रिज़ॉल्यूशन का इस्तेमाल किया जाता है. इसके उलट, छोटी स्क्रीन वाले डिवाइस पर बड़े स्क्रीन रिज़ॉल्यूशन का इस्तेमाल किया जाता है.
उदाहरण: |
display-density dpi
|
डिवाइस की डिसप्ले डेंसिटी को बदलें.
यह कमांड, अलग-अलग स्क्रीन डेंसिटी (सघनता) पर अपने ऐप्लिकेशन की जांच करने में मदद करती है. इसके लिए, कम डेंसिटी वाली स्क्रीन का इस्तेमाल करके, ज़्यादा डेंसिटी वाली स्क्रीन के एनवायरमेंट को कॉपी किया जाता है. इसके उलट भी किया जा सकता है.
उदाहरण: |
to-uri intent
|
दिए गए इंटेंट स्पेसिफ़िकेशन को यूआरआई के तौर पर प्रिंट करता है. |
to-intent-uri intent
|
दिए गए इंटेंट स्पेसिफ़िकेशन को intent: यूआरआई के तौर पर प्रिंट करता है. |
इंटेंट आर्ग्युमेंट के लिए जानकारी
गतिविधि मैनेजर की उन कमांड के लिए जिनमें intent
आर्ग्युमेंट होता है, आपके पास इन विकल्पों की मदद से इंटेंट तय करने का विकल्प होता है:
पैकेज मैनेजर को कॉल करें (pm
)
adb
शेल में, पैकेज मैनेजर (pm
) टूल का इस्तेमाल करके निर्देश दिए जा सकते हैं. इससे डिवाइस पर इंस्टॉल किए गए ऐप्लिकेशन पैकेज पर कार्रवाइयां की जा सकती हैं और क्वेरी की जा सकती हैं.
शेल में, pm
का सिंटैक्स यह है:
pm command
रिमोट शेल में जाए बिना, सीधे adb
से पैकेज मैनेजर कमांड भी जारी की जा सकती है
उदाहरण के लिए:
adb shell pm uninstall com.example.MyApp
टेबल 2. पैकेज मैनेजर के लिए उपलब्ध निर्देश
निर्देश | ब्यौरा |
---|---|
list packages [options] filter
|
सभी पैकेज प्रिंट करें. इसके अलावा, सिर्फ़ वे पैकेज प्रिंट करें जिनके पैकेज के नाम में filter में मौजूद टेक्स्ट शामिल है. विकल्प:
|
list permission-groups
|
अनुमतियों के सभी ज्ञात ग्रुप प्रिंट करें. |
list permissions [options] group
|
सभी अनुमतियों को प्रिंट करें. इसके अलावा, सिर्फ़ group में मौजूद अनुमतियों को भी प्रिंट किया जा सकता है. विकल्प:
|
list instrumentation [options]
|
सभी टेस्ट पैकेज की सूची बनाएं. विकल्प:
|
list features
|
सिस्टम की सभी सुविधाओं को प्रिंट करें. |
list libraries
|
मौजूदा डिवाइस पर काम करने वाली सभी लाइब्रेरी प्रिंट करें. |
list users
|
सिस्टम पर मौजूद सभी उपयोगकर्ताओं की जानकारी प्रिंट करें. |
path package
|
दिए गए package के APK का पाथ प्रिंट करें.
|
install [options] path
|
सिस्टम में path के ज़रिए तय किया गया पैकेज इंस्टॉल करता है. विकल्प:
|
uninstall [options] package
|
सिस्टम से पैकेज हटाता है. विकल्प:
|
clear package
|
किसी पैकेज से जुड़ा पूरा डेटा मिटाएं. |
enable package_or_component
|
दिए गए पैकेज या कॉम्पोनेंट को चालू करें. इसे "package/class" के तौर पर लिखा जाता है. |
disable package_or_component
|
दिए गए पैकेज या कॉम्पोनेंट को बंद करें. इसे "package/class" के तौर पर लिखा जाता है. |
disable-user [options] package_or_component
|
विकल्प:
|
grant package_name permission
|
किसी ऐप्लिकेशन को अनुमति दें. Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन पर चलने वाले डिवाइसों पर, अनुमति ऐप्लिकेशन मेनिफ़ेस्ट में बताई गई कोई भी अनुमति हो सकती है. Android 5.1 (एपीआई लेवल 22) और इससे पहले के वर्शन पर चल रहे डिवाइसों पर, यह अनुमति ऐप्लिकेशन की ओर से तय की गई एक ज़रूरी अनुमति होनी चाहिए. |
revoke package_name permission
|
किसी ऐप्लिकेशन से अनुमति वापस लें. Android 6.0 (एपीआई लेवल 23) और इसके बाद के वर्शन पर चलने वाले डिवाइसों पर, अनुमति ऐप्लिकेशन मेनिफ़ेस्ट में बताई गई कोई भी अनुमति हो सकती है. Android 5.1 (एपीआई लेवल 22) और इससे पहले के वर्शन पर चल रहे डिवाइसों पर, यह अनुमति ऐप्लिकेशन की ओर से तय की गई एक ज़रूरी अनुमति होनी चाहिए. |
set-install-location location
|
ऐप्लिकेशन इंस्टॉल करने की डिफ़ॉल्ट जगह बदलें. जगह की वैल्यू:
ध्यान दें: इसका इस्तेमाल सिर्फ़ डीबग करने के लिए किया जाता है. इसका इस्तेमाल करने से, ऐप्लिकेशन ठीक से काम नहीं कर सकते और अन्य समस्याएं हो सकती हैं. |
get-install-location
|
यह फ़ंक्शन, ऐप्लिकेशन इंस्टॉल करने की मौजूदा जगह की जानकारी देता है. यह फ़ंक्शन, ये वैल्यू दिखाता है:
|
set-permission-enforced permission [true | false]
|
यह तय करें कि दी गई अनुमति लागू की जानी चाहिए या नहीं. |
trim-caches desired_free_space
|
कैश मेमोरी की फ़ाइलों को ट्रिम करके, तय की गई जगह खाली करें. |
create-user user_name
|
दिए गए user_name की मदद से नया उपयोगकर्ता बनाएं. साथ ही, उपयोगकर्ता के नए आइडेंटिफ़ायर को प्रिंट करें.
|
remove-user user_id
|
दिए गए user_id वाले उपयोगकर्ता को हटाना है. इससे उस उपयोगकर्ता से जुड़ा सारा डेटा मिट जाएगा
|
get-max-users
|
डिवाइस के साथ काम करने वाले ज़्यादा से ज़्यादा उपयोगकर्ताओं की संख्या प्रिंट करें. |
get-app-links [options] [package]
|
इससे दिए गए package के लिए, डोमेन की पुष्टि की स्थिति प्रिंट की जाती है. अगर कोई पैकेज नहीं दिया गया है, तो सभी पैकेज के लिए डोमेन की पुष्टि की स्थिति प्रिंट की जाती है. राज्य के कोड इस तरह से तय किए जाते हैं:
इसके विकल्प:
|
reset-app-links [options] [package]
|
दिए गए पैकेज के लिए, डोमेन की पुष्टि की स्थिति को रीसेट करें. अगर कोई पैकेज नहीं दिया गया है, तो सभी पैकेज के लिए ऐसा करें.
इसके विकल्प:
|
verify-app-links [--re-verify] [package]
|
दिए गए package या सभी पैकेज के लिए पुष्टि करने का अनुरोध ब्रॉडकास्ट करता है. अगर कोई पैकेज नहीं दिया गया है, तो सभी पैकेज के लिए अनुरोध ब्रॉडकास्ट किया जाता है. यह इवेंट सिर्फ़ तब भेजा जाता है, जब पैकेज ने पहले कोई रिस्पॉन्स रिकॉर्ड न किया हो.
|
set-app-links [--package package] state domains
|
किसी पैकेज के लिए, डोमेन की स्थिति को मैन्युअल तरीके से सेट करता है. इसके लिए, पैकेज को डोमेन को autoVerify के तौर पर घोषित करना होगा. इस कमांड से, उन डोमेन के लिए गड़बड़ी की रिपोर्ट नहीं मिलेगी जिन पर इसे लागू नहीं किया जा सका.
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
किसी पैकेज के लिए, होस्ट उपयोगकर्ता के चुने जाने की स्थिति को मैन्युअल तरीके से सेट करता है. इसके लिए, पैकेज को डोमेन के बारे में बताना होगा. इस कमांड से, उन डोमेन के लिए गड़बड़ी की रिपोर्ट नहीं मिलेगी जिन पर इसे लागू नहीं किया जा सका.
|
set-app-links-allowed --user user_id [--package package] allowed
|
किसी पैकेज के लिए, लिंक हैंडलिंग की अपने-आप पुष्टि होने की सेटिंग को टॉगल करें.
|
get-app-link-owners --user user_id [--package package] domains
|
किसी उपयोगकर्ता के लिए, किसी डोमेन के मालिकों को कम से ज़्यादा प्राथमिकता के क्रम में प्रिंट करें.
|
डिवाइस की नीति के मैनेजर को कॉल करें (dpm
)
डिवाइस मैनेजमेंट ऐप्लिकेशन डेवलप करने और उनकी जांच करने के लिए, डिवाइस पॉलिसी मैनेजर (dpm
) टूल को कमांड दें. इस टूल का इस्तेमाल करके, डिवाइस पर चालू एडमिन ऐप्लिकेशन को कंट्रोल किया जा सकता है. इसके अलावा, डिवाइस पर किसी नीति के स्टेटस डेटा को बदला जा सकता है.
शेल में, dpm
सिंटैक्स यह है:
dpm command
रिमोट शेल में जाए बिना, सीधे adb
से डिवाइस नीति मैनेजर कमांड भी जारी की जा सकती है:
adb shell dpm command
तीसरी टेबल. Device Policy Manager के लिए उपलब्ध निर्देश
निर्देश | ब्यौरा |
---|---|
set-active-admin [options] component
|
इस कुकी का इस्तेमाल component को चालू एडमिन के तौर पर सेट करने के लिए किया जाता है.
इसके विकल्प:
|
set-profile-owner [options] component
|
किसी मौजूदा उपयोगकर्ता के लिए, component को ऐक्टिव एडमिन और उसके पैकेज को प्रोफ़ाइल के मालिक के तौर पर सेट करें.
इसके विकल्प:
|
set-device-owner [options] component
|
component को ऐक्टिव एडमिन और उसके पैकेज को डिवाइस के मालिक के तौर पर सेट करें.
इसके विकल्प:
|
remove-active-admin [options] component
|
किसी सक्रिय एडमिन का ऐक्सेस बंद करना. ऐप्लिकेशन को मेनिफ़ेस्ट में android:testOnly के बारे में बताना होगा. इस कमांड से, डिवाइस और प्रोफ़ाइल के मालिकों को भी हटाया जा सकता है.
इसके विकल्प:
|
clear-freeze-period-record
|
सिस्टम के ओटीए अपडेट के लिए, डिवाइस पर पहले से सेट किए गए फ़्रीज़ पीरियड का रिकॉर्ड मिटा देता है. यह सुविधा, फ़्रीज़ पीरियड मैनेज करने वाले ऐप्लिकेशन डेवलप करते समय, डिवाइस के शेड्यूल से जुड़ी पाबंदियों से बचने के लिए काम की है. सिस्टम अपडेट मैनेज करना लेख पढ़ें.
यह सुविधा, Android 9.0 (एपीआई लेवल 28) और इसके बाद के वर्शन पर काम करती है. |
force-network-logs
|
सिस्टम को यह निर्देश दें कि वह किसी डीपीसी के ज़रिए वापस पाने के लिए, पहले से मौजूद किसी भी नेटवर्क लॉग को तैयार करे. अगर कनेक्शन या डीएनएस लॉग उपलब्ध हैं, तो DPC को onNetworkLogsAvailable() कॉलबैक मिलता है. नेटवर्क गतिविधि लॉग करना लेख पढ़ें.
इस कमांड के लिए, अनुरोधों की संख्या सीमित है. यह सुविधा, Android 9.0 (एपीआई लेवल 28) और इसके बाद के वर्शन पर काम करती है. |
force-security-logs
|
सिस्टम को, पहले से मौजूद किसी भी सुरक्षा लॉग को DPC के लिए उपलब्ध कराने के लिए मजबूर करता है. अगर लॉग उपलब्ध हैं, तो DPC को onSecurityLogsAvailable() कॉलबैक मिलता है. एंटरप्राइज़ डिवाइस की गतिविधि लॉग करना लेख पढ़ें.
इस कमांड के लिए, अनुरोधों की संख्या सीमित है. यह सुविधा, Android 9.0 (एपीआई लेवल 28) और इसके बाद के वर्शन पर काम करती है. |
स्क्रीनशॉट लें
screencap
कमांड, डिवाइस के डिसप्ले का स्क्रीनशॉट लेने के लिए एक शेल यूटिलिटी है.
शेल में, screencap
का सिंटैक्स यह है:
screencap filename
कमांड लाइन से screencap
का इस्तेमाल करने के लिए, यह डालें:
adb shell screencap /sdcard/screen.png
यहां स्क्रीनशॉट सेशन का एक उदाहरण दिया गया है. इसमें स्क्रीनशॉट कैप्चर करने के लिए adb
शेल और डिवाइस से फ़ाइल डाउनलोड करने के लिए pull
कमांड का इस्तेमाल किया गया है:
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
इसके अलावा, अगर फ़ाइल का नाम नहीं दिया जाता है, तो screencap
इमेज को स्टैंडर्ड आउटपुट में लिखता है. PNG फ़ॉर्मैट तय करने के लिए, -p
विकल्प के साथ इस कमांड का इस्तेमाल करके, डिवाइस के स्क्रीनशॉट को सीधे अपनी लोकल मशीन पर मौजूद किसी फ़ाइल में स्ट्रीम किया जा सकता है.
यहां एक ही कमांड में स्क्रीनशॉट कैप्चर करने और उसे स्थानीय तौर पर सेव करने का उदाहरण दिया गया है:
# use 'exec-out' instead of 'shell' to get raw data $ adb exec-out screencap -p > screen.png
वीडियो रिकॉर्ड करें
screenrecord
कमांड, Android 4.4 (एपीआई लेवल 19) और इसके बाद के वर्शन पर चलने वाले डिवाइसों की स्क्रीन रिकॉर्ड करने के लिए, शेल यूटिलिटी है. यह यूटिलिटी, स्क्रीन पर की गई गतिविधि को MPEG-4 फ़ाइल में रिकॉर्ड करती है. इस फ़ाइल का इस्तेमाल, प्रमोशन या ट्रेनिंग वीडियो बनाने के लिए किया जा सकता है. इसके अलावा, इसका इस्तेमाल डीबग करने और टेस्टिंग के लिए भी किया जा सकता है.
शेल में, इस सिंटैक्स का इस्तेमाल करें:
screenrecord [options] filename
कमांड लाइन से screenrecord
का इस्तेमाल करने के लिए, यह डालें:
adb shell screenrecord /sdcard/demo.mp4
Control+C दबाकर, स्क्रीन रिकॉर्डिंग बंद करें. ऐसा न करने पर, रिकॉर्डिंग तीन मिनट में अपने-आप बंद हो जाएगी. इसके अलावा, --time-limit
की तय की गई समयसीमा खत्म होने पर भी रिकॉर्डिंग बंद हो जाएगी.
अपने डिवाइस की स्क्रीन रिकॉर्ड करने के लिए, वीडियो रिकॉर्ड करने के लिए screenrecord
कमांड चलाएं. इसके बाद, डिवाइस से होस्ट कंप्यूटर पर वीडियो डाउनलोड करने के लिए, pull
कमांड चलाएं. यहां रिकॉर्डिंग सेशन का एक उदाहरण दिया गया है:
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
screenrecord
की सुविधा, आपके अनुरोध के मुताबिक किसी भी रिज़ॉल्यूशन और बिट रेट पर रिकॉर्डिंग कर सकती है. साथ ही, यह डिवाइस के डिसप्ले के आसपेक्ट रेशियो को बनाए रखती है. यह सुविधा, डिफ़ॉल्ट रूप से डिसप्ले के नेटिव रिज़ॉल्यूशन और ओरिएंटेशन में रिकॉर्ड करती है. इसकी ज़्यादा से ज़्यादा अवधि तीन मिनट होती है.
screenrecord
यूटिलिटी की सीमाएं:
- वीडियो फ़ाइल के साथ ऑडियो रिकॉर्ड नहीं किया जाता.
- Wear OS पर काम करने वाले डिवाइसों के लिए, वीडियो रिकॉर्डिंग की सुविधा उपलब्ध नहीं है.
- ऐसा हो सकता है कि कुछ डिवाइस, अपने नेटिव डिसप्ले रिज़ॉल्यूशन पर रिकॉर्ड न कर पाएं. अगर आपको स्क्रीन रिकॉर्डिंग में समस्याएं आ रही हैं, तो स्क्रीन रिज़ॉल्यूशन कम करके देखें.
- रिकॉर्डिंग के दौरान स्क्रीन को घुमाने की सुविधा काम नहीं करती है. अगर रिकॉर्डिंग के दौरान स्क्रीन घूमती है, तो रिकॉर्डिंग में स्क्रीन का कुछ हिस्सा कट जाता है.
चौथी टेबल. screenrecord
के विकल्प
विकल्प | ब्यौरा |
---|---|
--help
|
कमांड सिंटैक्स और विकल्प दिखाना |
--size widthxheight
|
वीडियो का साइज़ सेट करें: 1280x720 . डिफ़ॉल्ट वैल्यू, डिवाइस के नेटिव डिसप्ले रिज़ॉल्यूशन (अगर काम करता है) के तौर पर सेट होती है. अगर यह काम नहीं करता है, तो डिफ़ॉल्ट वैल्यू 1280x720 होती है. बेहतर नतीजों के लिए, ऐसा साइज़ इस्तेमाल करें जो आपके डिवाइस के Advanced Video Coding (AVC) एन्कोडर के साथ काम करता हो. |
--bit-rate rate |
वीडियो के लिए वीडियो बिट रेट सेट करें. यह वैल्यू, मेगाबिट प्रति सेकंड में होती है. डिफ़ॉल्ट वैल्यू 20 एमबीपीएस है.
वीडियो क्वालिटी को बेहतर बनाने के लिए, बिट रेट को बढ़ाया जा सकता है. हालांकि, ऐसा करने से फ़िल्म की फ़ाइलें बड़ी हो जाती हैं. यहां दिए गए उदाहरण में, रिकॉर्डिंग के बिट रेट को 6 एमबीपीएस पर सेट किया गया है:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
रिकॉर्डिंग की ज़्यादा से ज़्यादा अवधि को सेकंड में सेट करें. डिफ़ॉल्ट और ज़्यादा से ज़्यादा वैल्यू 180 (तीन मिनट) होती है. |
--rotate |
आउटपुट को 90 डिग्री घुमाएं. यह सुविधा एक्सपेरिमेंट के तौर पर उपलब्ध है. |
--verbose |
कमांड-लाइन स्क्रीन पर लॉग की जानकारी दिखाएं. अगर आपने यह विकल्प सेट नहीं किया है, तो यूटिलिटी चालू होने पर कोई जानकारी नहीं दिखाएगी. |
ऐप्लिकेशन के लिए ART प्रोफ़ाइलें पढ़ना
Android 7.0 (एपीआई लेवल 24) से, Android Runtime (एआरटी) इंस्टॉल किए गए ऐप्लिकेशन के लिए एक्ज़ीक्यूशन प्रोफ़ाइलें इकट्ठा करता है. इनका इस्तेमाल, ऐप्लिकेशन की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए किया जाता है. इकट्ठा की गई प्रोफ़ाइलों की जांच करें. इससे आपको यह समझने में मदद मिलेगी कि कौनसे तरीके बार-बार इस्तेमाल किए जाते हैं और ऐप्लिकेशन के स्टार्टअप के दौरान किन क्लास का इस्तेमाल किया जाता है.
ध्यान दें: एक्ज़ीक्यूशन प्रोफ़ाइल के फ़ाइल नाम को सिर्फ़ तब वापस पाया जा सकता है, जब आपके पास फ़ाइल सिस्टम का रूट ऐक्सेस हो. उदाहरण के लिए, एम्युलेटर पर.
प्रोफ़ाइल की जानकारी को टेक्स्ट फ़ॉर्मैट में पाने के लिए, इस निर्देश का इस्तेमाल करें:
adb shell cmd package dump-profiles package
जनरेट की गई फ़ाइल को वापस पाने के लिए, इसका इस्तेमाल करें:
adb pull /data/misc/profman/package.prof.txt
टेस्ट डिवाइस रीसेट करना
अगर आपको अपने ऐप्लिकेशन को कई टेस्ट डिवाइसों पर टेस्ट करना है, तो टेस्ट के बीच में अपने डिवाइस को रीसेट करना फ़ायदेमंद हो सकता है. उदाहरण के लिए, उपयोगकर्ता का डेटा हटाने और टेस्ट एनवायरमेंट को रीसेट करने के लिए. Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन पर काम करने वाले टेस्ट डिवाइस को फ़ैक्ट्री रीसेट किया जा सकता है. इसके लिए, testharness
adb
शेल कमांड का इस्तेमाल करें. इसे यहां दिखाया गया है:
adb shell cmd testharness enable
testharness
का इस्तेमाल करके डिवाइस को रीस्टोर करने पर, डिवाइस अपने-आप आरएसए कुंजी का बैक अप लेता है. इससे मौजूदा वर्कस्टेशन पर, लगातार एक ही जगह पर डीबग करने की अनुमति मिलती है. इसका मतलब है कि डिवाइस रीसेट होने के बाद, वर्कस्टेशन डिवाइस को डीबग करना जारी रख सकता है. साथ ही, नई कुंजी को मैन्युअल तरीके से रजिस्टर किए बिना, डिवाइस को adb
कमांड जारी कर सकता है.
इसके अलावा, अपने ऐप्लिकेशन की टेस्टिंग को आसान और सुरक्षित बनाने के लिए, testharness
का इस्तेमाल करके डिवाइस को रीस्टोर करने पर, डिवाइस की ये सेटिंग भी बदल जाती हैं:
- यह डिवाइस, कुछ सिस्टम सेटिंग सेट अप करता है, ताकि डिवाइस के शुरुआती सेटअप विज़र्ड न दिखें. इसका मतलब है कि डिवाइस ऐसी स्थिति में आ जाता है जहां से ऐप्लिकेशन को तुरंत इंस्टॉल, डीबग, और टेस्ट किया जा सकता है.
- सेटिंग:
- इससे लॉक स्क्रीन की सुविधा बंद हो जाती है.
- इससे आपातकालीन चेतावनियां पाने की सुविधा बंद हो जाती है.
- यह कुकी, खातों के लिए अपने-आप सिंक होने की सुविधा बंद करती है.
- इससे सिस्टम के अपने-आप अपडेट होने की सुविधा बंद हो जाती है.
- अन्य:
- पहले से इंस्टॉल किए गए सुरक्षा ऐप्लिकेशन बंद करता है.
अगर आपके ऐप्लिकेशन को testharness
कमांड की डिफ़ॉल्ट सेटिंग का पता लगाना है और उसके हिसाब से काम करना है, तो
ActivityManager.isRunningInUserTestHarness()
का इस्तेमाल करें.
sqlite
sqlite3
, SQLite डेटाबेस की जांच करने के लिए sqlite
कमांड-लाइन प्रोग्राम शुरू करता है.
इसमें टेबल के कॉन्टेंट को प्रिंट करने के लिए .dump
और किसी मौजूदा टेबल के लिए SQL CREATE
स्टेटमेंट को प्रिंट करने के लिए .schema
जैसे कमांड शामिल हैं.
कमांड लाइन से भी SQLite कमांड को इस तरह से लागू किया जा सकता है:
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
ध्यान दें: SQLite डेटाबेस को सिर्फ़ तब ऐक्सेस किया जा सकता है, जब आपके पास फ़ाइल सिस्टम का रूट ऐक्सेस हो. उदाहरण के लिए, एम्युलेटर पर.
ज़्यादा जानकारी के लिए, sqlite3
कमांड लाइन का दस्तावेज़ देखें.
adb यूएसबी बैकएंड
adb सर्वर, दो बैकएंड के ज़रिए यूएसबी स्टैक से इंटरैक्ट कर सकता है. यह ओएस (Windows, Linux या macOS) के नेटिव बैकएंड का इस्तेमाल कर सकता है या libusb
बैकएंड का इस्तेमाल कर सकता है.
attach
, detach
, और यूएसबी की स्पीड का पता लगाने जैसी कुछ सुविधाएं, सिर्फ़ libusb
बैकएंड का इस्तेमाल करने पर उपलब्ध होती हैं.
ADB_LIBUSB
एनवायरमेंट वैरिएबल का इस्तेमाल करके, बैकएंड चुना जा सकता है.
अगर इसे सेट नहीं किया जाता है, तो adb अपने डिफ़ॉल्ट बैकएंड का इस्तेमाल करता है. डिफ़ॉल्ट ऐक्शन और सेटिंग, ओएस के हिसाब से अलग-अलग होती हैं. ADB v34 से, Windows को छोड़कर सभी ओएस पर liubusb
बैकएंड का इस्तेमाल डिफ़ॉल्ट रूप से किया जाता है. Windows पर, नेटिव बैकएंड का इस्तेमाल डिफ़ॉल्ट रूप से किया जाता है. अगर ADB_LIBUSB
सेट है, तो इससे यह तय होता है कि नेटिव बैकएंड या libusb
का इस्तेमाल किया जाएगा. adb एनवायरमेंट वैरिएबल के बारे में ज़्यादा जानने के लिए, adb मैन्युअल पेज देखें.
adb mDNS बैकएंड
एडीबी, मल्टीकास्ट डीएनएस प्रोटोकॉल का इस्तेमाल करके, सर्वर और डिवाइसों को अपने-आप कनेक्ट कर सकता है. ADB सर्वर में दो बैकएंड होते हैं: Bonjour (Apple का mdnsResponder) और Openscreen.
Bonjour बैकएंड को होस्ट मशीन पर डेमॉन चलाने की ज़रूरत होती है.
macOS पर, Apple का बिल्ट-इन डेमॉन हमेशा चालू रहता है. हालांकि, Windows और Linux पर उपयोगकर्ता को यह पक्का करना होगा कि mdnsd
डेमॉन चालू हो.
अगर adb mdns check
कमांड से कोई गड़बड़ी मिलती है, तो ऐसा हो सकता है कि ADB, Bonjour बैकएंड का इस्तेमाल कर रहा हो, लेकिन कोई Bonjour डेमॉन न चल रहा हो.
Openscreen के बैकएंड को मशीन पर डेमॉन चलाने की ज़रूरत नहीं होती. macOS पर Openscreen बैकएंड के लिए, ADB v35 से सहायता मिलती है. ADB v34 के बाद से, Windows और Linux पर यह सुविधा काम करती है.
डिफ़ॉल्ट रूप से, ADB Bonjour बैकएंड का इस्तेमाल करता है. एनवायरमेंट वैरिएबल ADB_MDNS_OPENSCREEN
का इस्तेमाल करके, इस व्यवहार को बदला जा सकता है. इसे 1
या 0
पर सेट करें. ज़्यादा जानकारी के लिए, ADB का मैन्युअल पेज देखें.
adb बर्स्ट मोड (ADB 36.0.0 से शुरू होने वाला)
बर्स्ट मोड एक एक्सपेरिमेंटल सुविधा है. इसकी मदद से, ADB किसी डिवाइस को लगातार पैकेट भेज सकता है. ऐसा तब भी किया जा सकता है, जब डिवाइस ने पिछले पैकेट का जवाब न दिया हो. इससे बड़ी फ़ाइलों को ट्रांसफ़र करते समय, ADB का थ्रूपुट काफ़ी बढ़ जाता है. साथ ही, डीबग करते समय लेटेन्सी भी कम हो जाती है.
बर्स्ट मोड डिफ़ॉल्ट रूप से बंद होता है. इस सुविधा को चालू करने के लिए, इनमें से कोई एक तरीका अपनाएं:
- एनवायरमेंट वैरिएबल
ADB_DELAYED_ACK
को1
पर सेट करें. - Android Studio में, डिबगर की सेटिंग पर जाएं. इसके लिए, File (macOS पर Android Studio) > Settings > Build, Execution, Deployment > Debugger पर जाएं और ADB Server Burst Mode को Enabled पर सेट करें.