Android डीबग ब्रिज (adb)

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 को नए वर्शन पर अपडेट करें.

वायरलेस डीबगिंग का इस्तेमाल करने के लिए, आपको अपने डिवाइस को वर्कस्टेशन से जोड़ना होगा. इसके लिए, क्यूआर कोड या डिवाइस जोड़ने वाले कोड का इस्तेमाल करें. आपका वर्कस्टेशन और डिवाइस, एक ही वायरलेस नेटवर्क से कनेक्ट होना चाहिए. अपने डिवाइस से कनेक्ट करने के लिए, यह तरीका अपनाएं:

  1. अपने डिवाइस पर डेवलपर के लिए सेटिंग और टूल चालू करें.

  2. Android Studio खोलें और रन कॉन्फ़िगरेशन मेन्यू से वाई-फ़ाई का इस्तेमाल करके डिवाइसों को जोड़ें चुनें.

    'कॉन्फ़िगरेशन चलाएं' ड्रॉपडाउन मेन्यू
    पहली इमेज. कॉन्फ़िगरेशन मेन्यू चलाएं.

    दूसरी इमेज में दिखाए गए तरीके से, वाई-फ़ाई से डिवाइसों को जोड़ें विंडो पॉप-अप होती है.

    वाई-फ़ाई से डिवाइसों को जोड़ने के लिए दिखने वाली पॉप-अप विंडो का स्क्रीनशॉट
    दूसरी इमेज. क्यूआर कोड या डिवाइस जोड़ने वाले कोड का इस्तेमाल करके, डिवाइसों को जोड़ने के लिए पॉप-अप विंडो.
  3. अपने डिवाइस पर, वायरलेस डिबगिंग पर टैप करें और अपने डिवाइस को पेयर करें:

    Pixel फ़ोन का स्क्रीनशॉट. इसमें वायरलेस डीबगिंग सिस्टम सेटिंग दिख रही है.
    तीसरी इमेज. Google Pixel फ़ोन पर वायरलेस डीबगिंग सेटिंग के चालू होने का स्क्रीनशॉट.
    1. अपने डिवाइस को क्यूआर कोड से जोड़ने के लिए, डिवाइस को क्यूआर कोड से जोड़ें को चुनें. इसके बाद, वाई-फ़ाई नेटवर्क से डिवाइस जोड़ें पॉप-अप से मिला क्यूआर कोड स्कैन करें. यह पॉप-अप, इमेज 2 में दिखाया गया है.

    2. अपने डिवाइस को पेयरिंग कोड की मदद से जोड़ने के लिए, वाई-फ़ाई से डिवाइस जोड़ें पॉप-अप में जाकर, पेयरिंग कोड की मदद से डिवाइस जोड़ें को चुनें. अपने डिवाइस पर, जोड़ने के लिए कोड का इस्तेमाल करके जोड़ें को चुनें. इसके बाद, दिए गए छह अंकों के कोड को नोट करें. जब आपका डिवाइस वाई-फ़ाई से डिवाइस जोड़ें विंडो में दिखने लगे, तब जोड़ें को चुनें. इसके बाद, अपने डिवाइस पर दिखने वाला छह अंकों का कोड डालें.

      पिन कोड डालने के उदाहरण का स्क्रीनशॉट
      चौथी इमेज. छह अंकों का कोड डालने का उदाहरण.
  4. डिवाइस कनेक्ट होने के बाद, अपने डिवाइस पर ऐप्लिकेशन डिप्लॉय करने की कोशिश करें.

    किसी दूसरे डिवाइस को पेयर करने या अपने वर्कस्टेशन पर मौजूदा डिवाइस को भूलने के लिए, अपने डिवाइस पर वायरलेस डीबगिंग पर जाएं. पेयर किए गए डिवाइस में जाकर, अपने वर्कस्टेशन के नाम पर टैप करें. इसके बाद, हटाएं को चुनें.

  5. अगर आपको वायरलेस डीबगिंग की सुविधा को तुरंत चालू और बंद करना है, तो डेवलपर के लिए सेटिंग और टूल > क्विक सेटिंग डेवलपर टाइल में जाकर, वायरलेस डीबगिंग के लिए क्विक सेटिंग डेवलपर टाइल का इस्तेमाल करें.

    Google Pixel फ़ोन पर, डेवलपर के लिए उपलब्ध क्विक सेटिंग टाइल का स्क्रीनशॉट.
    पांचवीं इमेज. क्विक सेटिंग डेवलपर टाइल सेटिंग की मदद से, वायरलेस डीबगिंग की सुविधा को तुरंत चालू और बंद किया जा सकता है.

कमांड लाइन का इस्तेमाल करके वाई-फ़ाई कनेक्शन

इसके अलावा, Android Studio के बिना कमांड लाइन का इस्तेमाल करके अपने डिवाइस से कनेक्ट करने के लिए, यह तरीका अपनाएं:

  1. अपने डिवाइस पर डेवलपर के लिए सेटिंग और टूल चालू करें. इसके बारे में ऊपर बताया गया है.

  2. अपने डिवाइस पर वायरलेस डीबगिंग की सुविधा चालू करें. इसके बारे में पहले बताया जा चुका है.

  3. अपने वर्कस्टेशन पर, कोई टर्मिनल विंडो खोलें और android_sdk/platform-tools पर जाएं.

  4. डिवाइस को जोड़ने के लिए दिए गए कोड की मदद से जोड़ें को चुनकर, अपना आईपी पता, पोर्ट नंबर, और जोड़ने के लिए दिया गया कोड ढूंढें. डिवाइस पर दिखने वाले आईपी पते, पोर्ट नंबर, और पेयरिंग कोड को नोट करें.

  5. अपने वर्कस्टेशन के टर्मिनल पर, adb pair ipaddr:port चलाएं. ऊपर दिए गए आईपी पते और पोर्ट नंबर का इस्तेमाल करें.

  6. जब आपसे कहा जाए, तब यहां दिखाया गया पेयरिंग कोड डालें.

    कमांड लाइन पर डिवाइसों को जोड़ने का स्क्रीनशॉट.
    छठी इमेज. आपको एक मैसेज मिलेगा, जिसमें बताया जाएगा कि आपका डिवाइस कनेक्ट हो गया है.

वायरलेस कनेक्शन से जुड़ी समस्याएं हल करना

अगर आपको अपने डिवाइस को वायरलेस तरीके से कनेक्ट करने में समस्याएं आ रही हैं, तो समस्या हल करने के लिए यह तरीका आज़माएं.

देखें कि आपका वर्कस्टेशन और डिवाइस, ज़रूरी शर्तें पूरी करता हो

देखें कि वर्कस्टेशन और डिवाइस, इस सेक्शन की शुरुआत में दी गई ज़रूरी शर्तें पूरी करते हों.

आम तौर पर होने वाली अन्य समस्याओं के बारे में जानकारी

यहां वायरलेस डीबगिंग (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) या इससे पहले के वर्शन वाले डिवाइस को कनेक्ट करने के लिए, यूएसबी के ज़रिए यह शुरुआती तरीका अपनाएं:

  1. अपने Android डिवाइस और adbहोस्ट कंप्यूटर को एक ही वाई-फ़ाई नेटवर्क से कनेक्ट करें.
  2. ध्यान दें: सभी ऐक्सेस पॉइंट सही नहीं होते. आपको ऐसे ऐक्सेस पॉइंट का इस्तेमाल करना पड़ सकता है जिसका फ़ायरवॉल, adb के साथ काम करने के लिए सही तरीके से कॉन्फ़िगर किया गया हो.

  3. डिवाइस को यूएसबी केबल की मदद से होस्ट कंप्यूटर से कनेक्ट करें.
  4. टारगेट डिवाइस को पोर्ट 5555 पर टीसीपी/आईपी कनेक्शन सुनने के लिए सेट करें:
    adb tcpip 5555
    
  5. यूएसबी केबल को टारगेट डिवाइस से डिसकनेक्ट करें.
  6. Android डिवाइस का आईपी पता ढूंढें. उदाहरण के लिए, Nexus डिवाइस पर आईपी पता देखने के लिए, सेटिंग > टैबलेट के बारे में जानकारी (या फ़ोन के बारे में जानकारी) > स्थिति > आईपी पता पर जाएं.
  7. डिवाइस के आईपी पते से कनेक्ट करें:
    adb connect device_ip_address:5555
    
  8. पुष्टि करें कि आपका होस्ट कंप्यूटर, टारगेट डिवाइस से कनेक्ट है:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

आपका डिवाइस अब 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 कमांड देते समय, टारगेट डिवाइस के बारे में बताना होगा. टारगेट तय करने के लिए, यह तरीका अपनाएं:

  1. टारगेट का सीरियल नंबर पाने के लिए, devices कमांड का इस्तेमाल करें.
  2. सीरियल नंबर मिलने के बाद, adb कमांड के साथ -s विकल्प का इस्तेमाल करके सीरियल नंबर डालें.
    1. अगर आपको कई adb कमांड जारी करनी हैं, तो adb एनवायरमेंट वैरिएबल को सेट किया जा सकता है, ताकि इसमें सीरियल नंबर शामिल हो.$ANDROID_SERIAL
    2. अगर -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 शुरू करें.

इंटेंट आर्ग्युमेंट के लिए स्पेसिफ़िकेशन देखें.

इसके विकल्प:

  • -D: डीबग करने की सुविधा चालू करें.
  • -W: लॉन्च पूरा होने का इंतज़ार करें.
  • --start-profiler file: प्रोफ़ाइलर शुरू करता है और नतीजों को file पर भेजता है.
  • -P file: --start-profiler की तरह, लेकिन ऐप्लिकेशन के निष्क्रिय होने पर प्रोफ़ाइलिंग बंद हो जाती है.
  • -R count: गतिविधि को count बार लॉन्च करें. हर बार दोहराने से पहले, सबसे ऊपर मौजूद ऐक्टिविटी पूरी हो जाएगी.
  • -S: गतिविधि शुरू करने से पहले, टारगेट ऐप्लिकेशन को ज़बरदस्ती रोकें.
  • --opengl-trace: OpenGL फ़ंक्शन की ट्रेसिंग चालू करें.
  • --user user_id | current: यह तय करें कि किस उपयोगकर्ता के तौर पर कमांड को चलाना है. अगर यह तय नहीं किया जाता है, तो कमांड को मौजूदा उपयोगकर्ता के तौर पर चलाया जाएगा.
startservice [options] intent intent में बताए गए Service को शुरू करता है.

इंटेंट आर्ग्युमेंट के लिए स्पेसिफ़िकेशन देखें.

इसके विकल्प:

  • --user user_id | current: यह तय करें कि किस उपयोगकर्ता के तौर पर काम करना है. अगर इसे तय नहीं किया जाता है, तो इसे मौजूदा उपयोगकर्ता के तौर पर चलाया जाता है.
force-stop package package से जुड़े सभी ऐप्लिकेशन को ज़बरदस्ती बंद करें.
kill [options] package package से जुड़ी सभी प्रोसेस बंद करें. यह कमांड सिर्फ़ उन प्रोसेस को बंद करती है जिन्हें बंद करना सुरक्षित है और जिनसे उपयोगकर्ता के अनुभव पर कोई असर नहीं पड़ेगा.

इसके विकल्प:

  • --user user_id | all | current: यह तय करें कि किस उपयोगकर्ता की प्रोसेस बंद करनी हैं. अगर यह विकल्प नहीं चुना जाता है, तो सभी उपयोगकर्ताओं की प्रोसेस बंद कर दी जाती हैं.
kill-all बैकग्राउंड में चल रही सभी प्रोसेस बंद करें.
broadcast [options] intent ब्रॉडकास्ट इंटेंट जारी करना.

इंटेंट आर्ग्युमेंट के लिए स्पेसिफ़िकेशन देखें.

इसके विकल्प:

  • [--user user_id | all | current]: बताएं कि किस उपयोगकर्ता को भेजना है. अगर इस बारे में नहीं बताया गया है, तो सभी उपयोगकर्ताओं को भेजें.
instrument [options] component Instrumentation इंस्टेंस की मदद से मॉनिटरिंग शुरू करें. आम तौर पर, टारगेट component, फ़ॉर्म test_package/runner_class होता है.

इसके विकल्प:

  • -r: इससे रॉ नतीजे प्रिंट किए जाते हैं. ऐसा न करने पर, report_key_streamresult का इस्तेमाल करके नतीजे डिकोड किए जाते हैं. परफ़ॉर्मेंस मेज़रमेंट के लिए रॉ आउटपुट जनरेट करने के लिए, [-e perf true] के साथ इसका इस्तेमाल करें.
  • -e name value: name आर्ग्युमेंट को value पर सेट करें. टेस्ट रनर के लिए, सामान्य फ़ॉर्म -e testrunner_flag value[,value...] है.
  • -p file: file में प्रोफ़ाइलिंग डेटा लिखता है.
  • -w: वापस आने से पहले, इंस्ट्रुमेंटेशन के पूरा होने का इंतज़ार करें. टेस्ट रनर के लिए ज़रूरी है.
  • --no-window-animation: ऐप्लिकेशन के चलने के दौरान विंडो ऐनिमेशन बंद करें.
  • --user user_id | current: यह तय करें कि उपयोगकर्ता के लिए उपलब्ध कौनसे इंस्ट्रुमेंटेशन काम करते हैं. अगर इस विकल्प के बारे में जानकारी नहीं दी गई है, तो इसे मौजूदा उपयोगकर्ता के तौर पर चलाया जाएगा.
profile start process file process पर प्रोफ़ाइलर शुरू करें और नतीजों को file में लिखें.
profile stop process process पर प्रोफ़ाइलर को रोकें.
dumpheap [options] process file process को डंप करें, file में लिखें.

इसके विकल्प:

  • --user [user_id | current]: प्रोसेस का नाम देते समय, उस प्रोसेस के उपयोगकर्ता का नाम बताएं जिसे डंप करना है. अगर यह जानकारी नहीं दी गई है, तो मौजूदा उपयोगकर्ता का इस्तेमाल किया जाता है.
  • -b [| png | jpg | webp]: ग्राफ़िक्स मेमोरी से बिटमैप डंप करता है (एपीआई लेवल 35 और इसके बाद के वर्शन). डंप करने के लिए फ़ॉर्मैट तय करें. डिफ़ॉल्ट रूप से, PNG फ़ॉर्मैट होता है.
  • -n: मैनेज किए गए हीप के बजाय नेटिव हीप को डंप करें.
dumpbitmaps [options] [-p process] process से बिटमैप की जानकारी डंप करें (एपीआई लेवल 36 और इसके बाद के वर्शन).

इसके विकल्प:

  • -d|--dump [format]: इससे, format में बिटमैप का कॉन्टेंट डंप किया जाता है. format, png, jpg या webp में से कोई एक हो सकता है. अगर कोई भी विकल्प नहीं चुना जाता है, तो format डिफ़ॉल्ट रूप से png पर सेट होता है. बिटमैप के साथ एक zip फ़ाइल dumpbitmaps-<time>.zip बनाई जाएगी.
  • -p process: process से बिटमैप डंप करता है. एक से ज़्यादा -p process तय किए जा सकते हैं.
अगर कोई process नहीं दिया गया है, तो सभी प्रोसेस से बिटमैप डंप किए जाएंगे.
set-debug-app [options] package डीबग करने के लिए, ऐप्लिकेशन package सेट करें.

इसके विकल्प:

  • -w: ऐप्लिकेशन शुरू होने पर, डीबगर के लिए इंतज़ार करें.
  • --persistent: इस वैल्यू को बनाए रखें.
clear-debug-app set-debug-app की मदद से डीबग करने के लिए, पैकेज के पिछले सेट को मिटाएं.
monitor [options] क्रैश या एएनआर की निगरानी करना शुरू करें.

इसके विकल्प:

  • --gdb: क्रैश/एएनआर के समय, दिए गए पोर्ट पर gdbserv शुरू करें.
screen-compat {on | off} package इस नीति से, package के स्क्रीन कंपैटबिलिटी मोड को कंट्रोल किया जाता है.
display-size [reset | widthxheight] डिवाइस के डिसप्ले साइज़ को बदलता है. यह कमांड, अलग-अलग स्क्रीन साइज़ पर अपने ऐप्लिकेशन की जांच करने में मदद करती है. इसके लिए, बड़ी स्क्रीन वाले डिवाइस पर छोटे स्क्रीन रिज़ॉल्यूशन का इस्तेमाल किया जाता है. इसके उलट, छोटी स्क्रीन वाले डिवाइस पर बड़े स्क्रीन रिज़ॉल्यूशन का इस्तेमाल किया जाता है.

उदाहरण:
am display-size 1280x800

display-density dpi डिवाइस की डिसप्ले डेंसिटी को बदलें. यह कमांड, अलग-अलग स्क्रीन डेंसिटी (सघनता) पर अपने ऐप्लिकेशन की जांच करने में मदद करती है. इसके लिए, कम डेंसिटी वाली स्क्रीन का इस्तेमाल करके, ज़्यादा डेंसिटी वाली स्क्रीन के एनवायरमेंट को कॉपी किया जाता है. इसके उलट भी किया जा सकता है.

उदाहरण:
am display-density 480

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 में मौजूद टेक्स्ट शामिल है.

विकल्प:

  • -f: इससे जुड़ी फ़ाइल देखें.
  • -d: सिर्फ़ बंद किए गए पैकेज दिखाने के लिए फ़िल्टर करें.
  • -e: सिर्फ़ चालू किए गए पैकेज दिखाने के लिए फ़िल्टर करें.
  • -s: सिर्फ़ सिस्टम पैकेज दिखाने के लिए फ़िल्टर करें.
  • -3: सिर्फ़ तीसरे पक्ष के पैकेज दिखाने के लिए फ़िल्टर करें.
  • -i: पैकेज इंस्टॉल करने वाले व्यक्ति या कंपनी का नाम देखें.
  • -u: इसमें अनइंस्टॉल किए गए पैकेज शामिल हैं.
  • --user user_id: क्वेरी करने के लिए उपयोगकर्ता स्पेस.
list permission-groups अनुमतियों के सभी ज्ञात ग्रुप प्रिंट करें.
list permissions [options] group सभी अनुमतियों को प्रिंट करें. इसके अलावा, सिर्फ़ group में मौजूद अनुमतियों को भी प्रिंट किया जा सकता है.

विकल्प:

  • -g: ग्रुप के हिसाब से व्यवस्थित करें.
  • -f: सभी जानकारी प्रिंट करें.
  • -s: कम शब्दों में जवाब.
  • -d: सिर्फ़ खतरनाक अनुमतियों की सूची बनाएं.
  • -u: सिर्फ़ उन अनुमतियों की सूची बनाएं जो उपयोगकर्ताओं को दिखेंगी.
list instrumentation [options] सभी टेस्ट पैकेज की सूची बनाएं.

विकल्प:

  • -f: टेस्ट पैकेज के लिए APK फ़ाइल की सूची बनाएं.
  • target_package: सिर्फ़ इस ऐप्लिकेशन के लिए टेस्ट पैकेज की सूची बनाओ.
list features सिस्टम की सभी सुविधाओं को प्रिंट करें.
list libraries मौजूदा डिवाइस पर काम करने वाली सभी लाइब्रेरी प्रिंट करें.
list users सिस्टम पर मौजूद सभी उपयोगकर्ताओं की जानकारी प्रिंट करें.
path package दिए गए package के APK का पाथ प्रिंट करें.
install [options] path सिस्टम में path के ज़रिए तय किया गया पैकेज इंस्टॉल करता है.

विकल्प:

  • -r: किसी मौजूदा ऐप्लिकेशन को फिर से इंस्टॉल करना. ऐसा करने पर, ऐप्लिकेशन का डेटा बना रहता है.
  • -t: टेस्ट APK इंस्टॉल करने की अनुमति दें. Gradle, टेस्ट APK तब जनरेट करता है, जब आपने सिर्फ़ अपने ऐप्लिकेशन को चलाया या डीबग किया हो या Android Studio की Build > Build APK कमांड का इस्तेमाल किया हो. अगर APK को डेवलपर के लिए उपलब्ध SDK टूल का इस्तेमाल करके बनाया गया है, तो आपको टेस्ट APK इंस्टॉल करते समय, install कमांड के साथ -t विकल्प शामिल करना होगा.
  • -i installer_package_name: इंस्टॉलर पैकेज का नाम डालें.
  • --user user_id: उस उपयोगकर्ता के बारे में बताएं जिसके लिए पैकेज इंस्टॉल करना है. डिफ़ॉल्ट रूप से, पैकेज को डिवाइस पर मौजूद सभी उपयोगकर्ताओं के लिए इंस्टॉल किया जाता है.
  • --install-location location: इनमें से किसी एक वैल्यू का इस्तेमाल करके, इंस्टॉल करने की जगह सेट करें:
    • 0: इंस्टॉल करने के लिए डिफ़ॉल्ट जगह का इस्तेमाल करें.
    • 1: डिवाइस के इंटरनल स्टोरेज में इंस्टॉल करें.
    • 2: बाहरी मीडिया पर इंस्टॉल करें.
  • -f: इंटरनल सिस्टम की मेमोरी में पैकेज इंस्टॉल करें.
  • -d: वर्शन कोड को डाउनग्रेड करने की अनुमति दें.
  • -g: ऐप्लिकेशन मेनिफ़ेस्ट में दी गई सभी अनुमतियां दें.
  • --fastdeploy: इंस्टॉल किए गए पैकेज को तुरंत अपडेट करें. इसके लिए, सिर्फ़ APK के उन हिस्सों को अपडेट करें जिनमें बदलाव हुआ है.
  • --incremental: यह ऐप्लिकेशन लॉन्च करने के लिए ज़रूरी APK इंस्टॉल करता है. साथ ही, बाकी डेटा को बैकग्राउंड में स्ट्रीम करता है. इस सुविधा का इस्तेमाल करने के लिए, आपको APK पर हस्ताक्षर करना होगा. साथ ही, APK सिग्नेचर स्कीम v4 फ़ाइल बनानी होगी. इसके बाद, इस फ़ाइल को उसी डायरेक्ट्री में रखना होगा जिसमें APK मौजूद है. यह सुविधा, सिर्फ़ कुछ डिवाइसों पर काम करती है. इस विकल्प से adb को इस सुविधा का इस्तेमाल करने के लिए मजबूर किया जाता है. अगर यह सुविधा काम नहीं करती है, तो इसकी वजह के बारे में ज़्यादा जानकारी दी जाती है. एपीके को ऐक्सेस करने की अनुमति देने से पहले, --wait विकल्प जोड़ें, ताकि एपीके पूरी तरह से इंस्टॉल हो जाए.

    --no-incremental, adb को इस सुविधा का इस्तेमाल करने से रोकता है.

uninstall [options] package सिस्टम से पैकेज हटाता है.

विकल्प:

  • -k: पैकेज हटाने के बाद, डेटा और कैश मेमोरी की डायरेक्ट्री को सेव रखें.
  • --user user_id: इससे उस उपयोगकर्ता के बारे में पता चलता है जिसके लिए पैकेज हटाया गया है. डिफ़ॉल्ट रूप से, पैकेज को डिवाइस पर मौजूद सभी उपयोगकर्ताओं के लिए हटा दिया जाता है.
  • --versionCode version_code: यह सिर्फ़ तब अनइंस्टॉल होता है, जब ऐप्लिकेशन में दिया गया वर्शन कोड मौजूद हो.
clear package किसी पैकेज से जुड़ा पूरा डेटा मिटाएं.
enable package_or_component दिए गए पैकेज या कॉम्पोनेंट को चालू करें. इसे "package/class" के तौर पर लिखा जाता है.
disable package_or_component दिए गए पैकेज या कॉम्पोनेंट को बंद करें. इसे "package/class" के तौर पर लिखा जाता है.
disable-user [options] package_or_component

विकल्प:

  • --user user_id: वह उपयोगकर्ता जिसके लिए सुविधा बंद करनी है.
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 ऐप्लिकेशन इंस्टॉल करने की डिफ़ॉल्ट जगह बदलें. जगह की वैल्यू:
  • 0: अपने-आप: सिस्टम को सबसे सही जगह तय करने दें.
  • 1: इंटरनल: इसे डिवाइस के इंटरनल स्टोरेज में इंस्टॉल करें.
  • 2: बाहरी: बाहरी मीडिया पर इंस्टॉल करें.

ध्यान दें: इसका इस्तेमाल सिर्फ़ डीबग करने के लिए किया जाता है. इसका इस्तेमाल करने से, ऐप्लिकेशन ठीक से काम नहीं कर सकते और अन्य समस्याएं हो सकती हैं.

get-install-location यह फ़ंक्शन, ऐप्लिकेशन इंस्टॉल करने की मौजूदा जगह की जानकारी देता है. यह फ़ंक्शन, ये वैल्यू दिखाता है:
  • 0 [auto]: सिस्टम को सबसे सही जगह चुनने दें
  • 1 [internal]: इंटरनल डिवाइस स्टोरेज पर इंस्टॉल करें
  • 2 [external]: बाहरी मीडिया पर इंस्टॉल करें
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 के लिए, डोमेन की पुष्टि की स्थिति प्रिंट की जाती है. अगर कोई पैकेज नहीं दिया गया है, तो सभी पैकेज के लिए डोमेन की पुष्टि की स्थिति प्रिंट की जाती है. राज्य के कोड इस तरह से तय किए जाते हैं:

  • none: इस डोमेन के लिए कोई डेटा रिकॉर्ड नहीं किया गया है
  • verified: डोमेन की पुष्टि हो गई है
  • approved: फ़ोर्स-अप्रूव किया गया. आम तौर पर, शेल के ज़रिए
  • denied: अनुमति नहीं दी गई. आम तौर पर, यह शेल के ज़रिए होता है
  • migrated: लेगसी रिस्पॉन्स से पुष्टि की गई
  • restored: उपयोगकर्ता के डेटा को वापस लाने पर, पुष्टि की स्थिति को बनाए रखा गया
  • legacy_failure: लेगसी वेरिफ़ायर ने अस्वीकार कर दिया, वजह पता नहीं है
  • system_configured: डिवाइस के कॉन्फ़िगरेशन के हिसाब से अपने-आप स्वीकार किया गया
  • >= 1024: कस्टम गड़बड़ी का कोड, जो डिवाइस की पुष्टि करने वाले व्यक्ति के लिए खास होता है

इसके विकल्प:

  • --user user_id: इसमें उपयोगकर्ता के चुने गए विकल्प शामिल होते हैं. इसमें सभी डोमेन शामिल करें, सिर्फ़ वे नहीं जिनकी पुष्टि अपने-आप हो जाती है.
reset-app-links [options] [package]

दिए गए पैकेज के लिए, डोमेन की पुष्टि की स्थिति को रीसेट करें. अगर कोई पैकेज नहीं दिया गया है, तो सभी पैकेज के लिए ऐसा करें.

  • package: रीसेट करने के लिए पैकेज या सभी पैकेज रीसेट करने के लिए "all"

इसके विकल्प:

  • --user user_id: इसमें उपयोगकर्ता के चुने गए विकल्प शामिल होते हैं. इसमें सभी डोमेन शामिल करें, सिर्फ़ वे नहीं जिनकी पुष्टि अपने-आप हो जाती है.
verify-app-links [--re-verify] [package]

दिए गए package या सभी पैकेज के लिए पुष्टि करने का अनुरोध ब्रॉडकास्ट करता है. अगर कोई पैकेज नहीं दिया गया है, तो सभी पैकेज के लिए अनुरोध ब्रॉडकास्ट किया जाता है. यह इवेंट सिर्फ़ तब भेजा जाता है, जब पैकेज ने पहले कोई रिस्पॉन्स रिकॉर्ड न किया हो.

  • --re-verify: भले ही पैकेज ने जवाब रिकॉर्ड कर लिया हो, फिर भी भेजें
set-app-links [--package package] state domains

किसी पैकेज के लिए, डोमेन की स्थिति को मैन्युअल तरीके से सेट करता है. इसके लिए, पैकेज को डोमेन को autoVerify के तौर पर घोषित करना होगा. इस कमांड से, उन डोमेन के लिए गड़बड़ी की रिपोर्ट नहीं मिलेगी जिन पर इसे लागू नहीं किया जा सका.

  • --package package: सेट करने के लिए पैकेज या सभी पैकेज सेट करने के लिए "all"
  • state: डोमेन सेट करने का कोड. मान्य वैल्यू ये हैं:
    • STATE_NO_RESPONSE (0): इस तरह रीसेट करें कि जैसे कोई जवाब कभी रिकॉर्ड ही नहीं किया गया था.
    • STATE_SUCCESS (1): डोमेन की पुष्टि करने वाले एजेंट ने डोमेन की पुष्टि कर दी है. ध्यान दें कि डोमेन की पुष्टि करने वाला एजेंट, इस सेटिंग को बदल सकता है.
    • STATE_APPROVED (2): डोमेन को हमेशा मंज़ूरी मिली हुई मानी जाती है. इससे डोमेन की पुष्टि करने वाला एजेंट, इसे बदल नहीं पाता.
    • STATE_DENIED (3): डोमेन को हमेशा अस्वीकार किया गया माना जाता है. इससे डोमेन की पुष्टि करने वाला एजेंट, इसे बदल नहीं पाता.
  • domains: स्पेस से अलग किए गए उन डोमेन की सूची जिन्हें बदलना है या "all" लिखकर सभी डोमेन को बदलना है.
set-app-links-user-selection --user user_id [--package package] enabled domains

किसी पैकेज के लिए, होस्ट उपयोगकर्ता के चुने जाने की स्थिति को मैन्युअल तरीके से सेट करता है. इसके लिए, पैकेज को डोमेन के बारे में बताना होगा. इस कमांड से, उन डोमेन के लिए गड़बड़ी की रिपोर्ट नहीं मिलेगी जिन पर इसे लागू नहीं किया जा सका.

  • --user user_id: वह उपयोगकर्ता जिसके लिए चुनी गई सेटिंग में बदलाव करना है
  • --package package: सेट करने के लिए पैकेज
  • enabled: डोमेन को मंज़ूरी देनी है या नहीं
  • domains: बदलने के लिए, स्पेस से अलग किए गए डोमेन की सूची या हर डोमेन को बदलने के लिए "all"
set-app-links-allowed --user user_id [--package package] allowed

किसी पैकेज के लिए, लिंक हैंडलिंग की अपने-आप पुष्टि होने की सेटिंग को टॉगल करें.

  • --user user_id: वह उपयोगकर्ता जिसके लिए चुनी गई सेटिंग में बदलाव करना है
  • --package package: सेट करने के लिए पैकेज या सभी पैकेज सेट करने के लिए "all"; अगर कोई पैकेज नहीं दिया गया है, तो पैकेज रीसेट हो जाएंगे
  • allowed: पैकेज को अपने-आप पुष्टि किए गए लिंक खोलने की अनुमति देने के लिए true, बंद करने के लिए false
get-app-link-owners --user user_id [--package package] domains

किसी उपयोगकर्ता के लिए, किसी डोमेन के मालिकों को कम से ज़्यादा प्राथमिकता के क्रम में प्रिंट करें.

  • --user user_id: वह उपयोगकर्ता जिसकी क्वेरी करनी है
  • --package package: पैकेज के ज़रिए एलान किए गए सभी वेब डोमेन के लिए भी प्रिंट किया जा सकता है. इसके अलावा, सभी पैकेज प्रिंट करने के लिए "all" का इस्तेमाल किया जा सकता है
  • domains: स्पेस से अलग की गई उन डोमेन की सूची जिनके लिए क्वेरी करनी है

डिवाइस की नीति के मैनेजर को कॉल करें (dpm)

डिवाइस मैनेजमेंट ऐप्लिकेशन डेवलप करने और उनकी जांच करने के लिए, डिवाइस पॉलिसी मैनेजर (dpm) टूल को कमांड दें. इस टूल का इस्तेमाल करके, डिवाइस पर चालू एडमिन ऐप्लिकेशन को कंट्रोल किया जा सकता है. इसके अलावा, डिवाइस पर किसी नीति के स्टेटस डेटा को बदला जा सकता है.

शेल में, dpmसिंटैक्स यह है:

dpm command

रिमोट शेल में जाए बिना, सीधे adb से डिवाइस नीति मैनेजर कमांड भी जारी की जा सकती है:

adb shell dpm command

तीसरी टेबल. Device Policy Manager के लिए उपलब्ध निर्देश

निर्देश ब्यौरा
set-active-admin [options] component इस कुकी का इस्तेमाल component को चालू एडमिन के तौर पर सेट करने के लिए किया जाता है.

इसके विकल्प:

  • --user user_id: टारगेट किए गए उपयोगकर्ता की जानकारी दें. मौजूदा उपयोगकर्ता को चुनने के लिए, --user current को भी पास किया जा सकता है.
set-profile-owner [options] component किसी मौजूदा उपयोगकर्ता के लिए, component को ऐक्टिव एडमिन और उसके पैकेज को प्रोफ़ाइल के मालिक के तौर पर सेट करें.

इसके विकल्प:

  • --user user_id: टारगेट किए गए उपयोगकर्ता की जानकारी दें. मौजूदा उपयोगकर्ता को चुनने के लिए, --user current भी पास किया जा सकता है.
  • --name name: संगठन का ऐसा नाम डालें जिसे लोग आसानी से पढ़ सकें.
set-device-owner [options] component component को ऐक्टिव एडमिन और उसके पैकेज को डिवाइस के मालिक के तौर पर सेट करें.

इसके विकल्प:

  • --user user_id: टारगेट किए गए उपयोगकर्ता की जानकारी दें. मौजूदा उपयोगकर्ता को चुनने के लिए, --user current को भी पास किया जा सकता है.
  • --name name: संगठन का ऐसा नाम डालें जिसे लोग आसानी से पढ़ सकें.
remove-active-admin [options] component किसी सक्रिय एडमिन का ऐक्सेस बंद करना. ऐप्लिकेशन को मेनिफ़ेस्ट में android:testOnly के बारे में बताना होगा. इस कमांड से, डिवाइस और प्रोफ़ाइल के मालिकों को भी हटाया जा सकता है.

इसके विकल्प:

  • --user user_id: टारगेट किए गए उपयोगकर्ता की जानकारी दें. मौजूदा उपयोगकर्ता को चुनने के लिए, --user current को भी पास किया जा सकता है.
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 पर सेट करें.