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

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

  • क्लाइंट, जो निर्देश भेजता है. क्लाइंट, आपकी डेवलपमेंट मशीन पर चलता है. adb कमांड जारी करके, कमांड-लाइन टर्मिनल से क्लाइंट को शुरू किया जा सकता है.
  • एक डेमॉन (adbd), जो किसी डिवाइस पर कमांड चलाता है. यह डेमॉन, हर डिवाइस पर बैकग्राउंड प्रोसेस के तौर पर काम करता है.
  • एक सर्वर, जो क्लाइंट और डेमॉन के बीच कम्यूनिकेशन को मैनेज करता है. सर्वर, आपकी डेवलपमेंट मशीन पर बैकग्राउंड प्रोसेस के तौर पर काम करता है.

adb, Android SDK Platform Tools पैकेज में शामिल है. SDK Manager का इस्तेमाल करके, इस पैकेज को डाउनलोड करें. यह इसे android_sdk/platform-tools/ पर इंस्टॉल करता है. अगर आपको स्टैंडअलोन Android SDK प्लेटफ़ॉर्म टूल पैकेज चाहिए, तो इसे यहां से डाउनलोड करें.

adb पर इस्तेमाल करने के लिए किसी डिवाइस को कनेक्ट करने के बारे में जानकारी पाने के लिए, हार्डवेयर डिवाइस पर ऐप्लिकेशन चलाना लेख पढ़ें. इसमें, कनेक्शन असिस्टेंट का इस्तेमाल करके सामान्य समस्याओं को हल करने का तरीका भी बताया गया है.

adb कैसे काम करता है

adb क्लाइंट शुरू करने पर, क्लाइंट सबसे पहले यह देखता है कि adb सर्वर प्रोसेस पहले से चल रही है या नहीं. अगर ऐसा नहीं है, तो यह सर्वर प्रोसेस शुरू करता है. जब सर्वर शुरू होता है, तो यह लोकल टीसीपी पोर्ट 5037 से जुड़ जाता है. साथ ही, adb क्लाइंट से भेजे गए निर्देशों को सुनता है.

ध्यान दें: सभी adb क्लाइंट, adb सर्वर से कम्यूनिकेट करने के लिए पोर्ट 5037 का इस्तेमाल करते हैं.

इसके बाद, सर्वर सभी चालू डिवाइसों से कनेक्शन सेट अप करता है. यह 5555 से 5585 तक की रेंज में मौजूद विषम संख्या वाले पोर्ट को स्कैन करके, इम्यूलेटर का पता लगाता है. यह रेंज, पहले 16 इम्यूलेटर इस्तेमाल करते हैं. जब सर्वर को adb डेमॉन (adbd) मिलता है, तो वह उस पोर्ट से कनेक्शन सेट अप करता है.

हर एम्युलेटर, क्रम से लगे दो पोर्ट का इस्तेमाल करता है. इनमें से एक पोर्ट, कंसोल कनेक्शन के लिए सम संख्या वाला होता है और दूसरा पोर्ट, adb कनेक्शन के लिए विषम संख्या वाला होता है. उदाहरण के लिए:

Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557
वगैरह.

दिखाए गए उदाहरण में, पोर्ट 5555 पर adb से कनेक्ट किया गया एम्युलेटर, उस एम्युलेटर के जैसा ही है जिसका कंसोल पोर्ट 5554 पर सिग्नल पाने के लिए कॉन्फ़िगर किया गया है.

सर्वर के सभी डिवाइसों से कनेक्ट हो जाने के बाद, उन डिवाइसों को ऐक्सेस करने के लिए, adb के निर्देशों का इस्तेमाल किया जा सकता है. सर्वर, डिवाइसों से कनेक्शन मैनेज करता है और कई adb क्लाइंट से मिलने वाले निर्देशों को हैंडल करता है. इसलिए, किसी भी क्लाइंट या स्क्रिप्ट से किसी भी डिवाइस को कंट्रोल किया जा सकता है.

अपने डिवाइस पर adb डीबग करने की सुविधा चालू करें

यूएसबी से कनेक्ट किए गए डिवाइस के साथ adb का इस्तेमाल करने के लिए, आपको डिवाइस की सिस्टम सेटिंग में जाकर, डेवलपर के लिए सेटिंग और टूल में यूएसबी डीबग करना चालू करना होगा. Android 4.2 (एपीआई लेवल 17) और इसके बाद के वर्शन में, डेवलपर के लिए सेटिंग और टूल स्क्रीन डिफ़ॉल्ट रूप से छिपी होती है. इसे दिखाने के लिए, डेवलपर के लिए सेटिंग और टूल चालू करें.

अब अपने डिवाइस को यूएसबी से कनेक्ट किया जा सकता है. android_sdk/platform-tools/ डायरेक्ट्री से adb devices कमांड चलाकर, यह पुष्टि की जा सकती है कि आपका डिवाइस कनेक्ट है या नहीं. कनेक्ट होने पर, आपको डिवाइस का नाम "डिवाइस" के तौर पर दिखेगा.

ध्यान दें: Android 4.2.2 (एपीआई लेवल 17) या इसके बाद के वर्शन वाले डिवाइस को कनेक्ट करने पर, सिस्टम एक डायलॉग दिखाता है. इसमें पूछा जाता है कि क्या आपको आरएसए कुंजी स्वीकार करनी है. इससे इस कंप्यूटर के ज़रिए डीबग करने की अनुमति मिलती है. यह सुरक्षा सुविधा, उपयोगकर्ता के डिवाइसों को सुरक्षित रखती है. ऐसा इसलिए, क्योंकि यह पक्का करती है कि यूएसबी डीबगिंग और अन्य adb कमांड तब तक नहीं चलाई जा सकतीं, जब तक डिवाइस को अनलॉक न कर लिया जाए और डायलॉग बॉक्स में पुष्टि न कर दी जाए.

यूएसबी के ज़रिए किसी डिवाइस से कनेक्ट करने के बारे में ज़्यादा जानने के लिए, हार्डवेयर डिवाइस पर ऐप्लिकेशन चलाना लेख पढ़ें.

वाई-फ़ाई के ज़रिए किसी डिवाइस से कनेक्ट करना

ध्यान दें: यहां दिए गए निर्देश, Android 11 (एपीआई लेवल 30) पर काम करने वाले Wear डिवाइसों पर लागू नहीं होते. ज़्यादा जानकारी के लिए, Wear OS ऐप्लिकेशन को डीबग करने से जुड़ी गाइड देखें.

Android 11 (एपीआई लेवल 30) और इसके बाद के वर्शन में, Android डीबग ब्रिज (adb) का इस्तेमाल करके, अपने वर्कस्टेशन से ऐप्लिकेशन को वायरलेस तरीके से डिप्लॉय और डीबग किया जा सकता है. उदाहरण के लिए, डीबग किए जा सकने वाले ऐप्लिकेशन को कई रिमोट डिवाइसों पर डिप्लॉय किया जा सकता है. इसके लिए, आपको अपने डिवाइस को यूएसबी से कनेक्ट करने की ज़रूरत नहीं होती. इससे यूएसबी कनेक्शन से जुड़ी सामान्य समस्याओं को हल करने की ज़रूरत नहीं पड़ती. जैसे, ड्राइवर इंस्टॉल करना.

Android 17 के साथ-साथ adb 37.0.0 में, adb Wi-Fi 2.0 की सुविधा जोड़ी गई है. इससे पिछले वर्शन में इस्तेमाल से जुड़ी कई समस्याओं को हल किया जा सकता है. ध्यान दें कि जब डिवाइस, वायरलेस डीबगिंग के भरोसेमंद नेटवर्क से कनेक्ट होगा, तब डिवाइस अपने-आप वर्कस्टेशन से कनेक्ट हो जाएगा.

वायरलेस डीबगिंग का इस्तेमाल शुरू करने से पहले, यह काम करें:

  • पक्का करें कि आपका वर्कस्टेशन और डिवाइस, एक ही वायरलेस नेटवर्क से कनेक्ट हों.

  • पक्का करें कि आपके फ़ोन पर Android 11 (एपीआई लेवल 30) या उसके बाद का वर्शन हो. साथ ही, टीवी और WearOS के लिए Android 13 (एपीआई लेवल 33) या उसके बाद का वर्शन हो. ज़्यादा जानकारी के लिए, अपने डिवाइस का Android वर्शन देखना और उसे अपडेट करना लेख पढ़ें.

  • अपने वर्कस्टेशन पर, SDK Platform Tools को नए वर्शन पर अपडेट करें.

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

ध्यान दें: आपको अपने डिवाइस को वर्कस्टेशन से सिर्फ़ एक बार जोड़ना होगा. डिवाइस, आपके वर्कस्टेशन से तब तक जुड़ा रहेगा, जब तक कि उसे मैन्युअल तरीके से हटाया नहीं जाता या डिवाइस पर adb डीबग करने की अनुमतियां रद्द नहीं की जातीं. जब डिवाइस और वर्कस्टेशन एक ही नेटवर्क पर होंगे, तब वे अपने-आप कनेक्ट हो जाएंगे.

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

  2. अपने डिवाइस पर, वायरलेस डिबगिंग पर टैप करें:

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

    Google Pixel फ़ोन का स्क्रीनशॉट. इसमें वायरलेस डीबगिंग सिस्टम की सेटिंग दिख रही है.
    दूसरी इमेज. Google Pixel फ़ोन पर वायरलेस डीबगिंग की सेटिंग.

    ध्यान दें: Android Studio के उपयोगकर्ता, अपने डिवाइस को क्यूआर कोड से जोड़ सकते हैं. इसके लिए, डिवाइस को क्यूआर कोड से जोड़ें को चुनें और Android Studio में वाई-फ़ाई पर डिवाइसों को जोड़ें डायलॉग से मिला क्यूआर कोड स्कैन करें.

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

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

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

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

    कमांड लाइन पर डिवाइस को जोड़ने का स्क्रीनशॉट.
    तीसरी इमेज. एक मैसेज, जिसमें बताया गया है कि आपका डिवाइस पेयर हो गया है.
  8. डिवाइस के जुड़ जाने के बाद, पुष्टि करें कि आपका डिवाइस कनेक्ट हो गया है. अब अपने डिवाइस को वायरलेस तरीके से इस्तेमाल किया जा सकता है. यह ठीक उसी तरह काम करता है जैसे यूएसबी कनेक्शन के साथ काम करता है.

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

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

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

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

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

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

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

देखें कि आपके वर्कस्टेशन पर adb सेटअप सही है या नहीं

अपने वर्कस्टेशन पर एडीबी का सेटअप सही तरीके से किया गया है या नहीं, इसकी पुष्टि करने के लिए, अपने वर्कस्टेशन पर टर्मिनल खोलें और adb server-status डालें. पुष्टि करें कि आउटपुट में यह जानकारी दिख रही हो:

  • version: "37.0.0" या इससे ज़्यादा हो: अगर ऐसा नहीं है, तो SDK Platform Tools का नया वर्शन डाउनलोड करें.
  • mdns_enabled: true: अगर इसे false पर सेट किया जाता है, तो adb आपके नेटवर्क पर मौजूद डिवाइसों को अपने-आप नहीं खोज पाएगा. इस समस्या को हल करने के लिए, आपको ADB_MDNS एनवायरमेंट वैरिएबल को 1 पर सेट करना होगा. इसके बाद, adb सर्वर को फिर से शुरू करने के लिए, adb kill-server और फिर adb start-server चलाएं.
  • mdns_backend: LIBADBMDNS: अगर ऐसा नहीं है, तो adb आपके नेटवर्क पर डिवाइसों का अपने-आप पता लगाने के लिए, पुरानी लाइब्रेरी का इस्तेमाल कर रहा है. इस समस्या को हल करने के लिए, आपको ADB_MDNS_OPENSCREEN एनवायरमेंट वैरिएबल को 0 पर सेट करना होगा. इसके बाद, adb सर्वर को फिर से शुरू करने के लिए, adb kill-server और फिर adb start-server चलाएं.

देखें कि आपका नेटवर्क mDNS के साथ काम करता है या नहीं

adb, जोड़े गए डिवाइसों को अपने-आप ढूंढने और उनसे कनेक्ट करने के लिए, mDNS पर निर्भर करता है. यह देखने के लिए कि आपके नेटवर्क में mDNS काम करता है या नहीं, यह तरीका अपनाएं:

  1. अपने डिवाइस पर, वायरलेस डीबगिंग चालू करें. इसके लिए, वाई-फ़ाई के ज़रिए किसी डिवाइस से कनेक्ट करना सेक्शन में दिया गया तरीका अपनाएं.

  2. अपने वर्कस्टेशन पर, टर्मिनल खोलें और adb mdns track-services --proto-text डालें.

  3. पुष्टि करें कि आउटपुट खाली न हो और उसमें आपके डिवाइस के आईपी पते और पोर्ट नंबर के साथ टीएलएस सेवा शामिल हो. अगर आउटपुट खाली है, तो इसका मतलब है कि आपका नेटवर्क mDNS के साथ काम नहीं करता. आउटपुट का उदाहरण:

    tls {
      service {
        instance: "adb-35121FDJH000R8-xyMD0H"
        service: "_adb-tls-connect._tcp"
        ipv4: "192.168.84.23"
        ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c"
        port: 37895
        product_model: "Pixel 8"
        build_version_sdk_full: "37.0"
        given_name: "sherifeid Pixel"
        serial: "35121FDJH000R8"
        mdns_service_version: "2.0"
        hostname: "Android_CXUKYJY1.local"
      }
    }
              

देखें कि आपके डिवाइस में ADB Wi-Fi 2.0 की सुविधा काम करती है या नहीं

ध्यान दें: ADB Wi-Fi 2.0, Android 17 और इसके बाद के वर्शन पर काम करता है.

यह देखने के लिए कि आपके डिवाइस में ADB Wi-Fi 2.0 की सुविधा काम करती है या नहीं, यह तरीका अपनाएं:

  1. अपने डिवाइस पर, वायरलेस डीबगिंग चालू करें. इसके लिए, वाई-फ़ाई के ज़रिए किसी डिवाइस से कनेक्ट करना सेक्शन में दिया गया तरीका अपनाएं.

  2. अपने वर्कस्टेशन पर, टर्मिनल खोलें और adb mdns track-services --proto-text डालें.

  3. पुष्टि करें कि आउटपुट में mdns_service_version: "2.0" या इससे ज़्यादा है. अगर ऐसा नहीं है, तो इसका मतलब है कि आपके डिवाइस पर Android 17 या इसके बाद का वर्शन नहीं है. साथ ही, यह ADB Wi-Fi 2.0 के साथ काम नहीं करता. Android 17 या इसके बाद के वर्शन पर अपडेट करने के लिए, देखें कि आपके डिवाइस के लिए कोई सिस्टम अपडेट उपलब्ध है या नहीं. अपने डिवाइस का Android वर्शन देखना और उसे अपडेट करना.

किसी नई समस्या की शिकायत करना

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

  • आपके डिवाइस के लॉग: समस्या को दोहराएं और डिवाइस के लॉग अटैच करें
  • आपके वर्कस्टेशन पर adb से मिले लॉग:
    1. एनवायरमेंट वैरिएबल सेट करें ADB_TRACE=all.
    2. adb सर्वर को रीस्टार्ट करें. इसके लिए, adb kill-server और फिर adb start-server चलाएं.
    3. समस्या को दोहराएं.
    4. लॉग फ़ाइलें ढूंढें: adb server-status चलाएं और आउटपुट log_absolute_path में रेफ़र की गई लॉग फ़ाइल अटैच करें.

पहली बार यूएसबी से कनेक्ट करने के बाद, किसी डिवाइस से वायरलेस तरीके से कनेक्ट करें. यह विकल्प सिर्फ़ 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 कमांड जारी करनी हैं, तो $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: यह तय करें कि किस उपयोगकर्ता के तौर पर स्क्रिप्ट को चलाना है. अगर यह तय नहीं किया जाता है, तो स्क्रिप्ट को मौजूदा उपयोगकर्ता के तौर पर चलाया जाता है.
  • --debug-link: (Android 17 और इसके बाद के वर्शन) ऐप्लिकेशन लिंक के लिए, यूआरएल और इंटेंट रिज़ॉल्यूशन की जांच करें. साथ ही, मैच किए गए मेनिफ़ेस्ट इंटेंट फ़िल्टर और डाइनैमिक ऐप्लिकेशन लिंक के नियमों को प्रिंट करें.
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, png, jpg या webp में से कोई एक हो सकता है. अगर कोई भी विकल्प नहीं चुना जाता है, तो डिफ़ॉल्ट रूप से 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: यूआरआई के तौर पर प्रिंट करो.

इंटेंट आर्ग्युमेंट के लिए खास जानकारी देखें.

memory-limiter subcommand [options]

Android 17 और इसके बाद के वर्शन पर काम करने वाले डिवाइसों पर मेमोरी की सीमाएं तय करना या उन्हें बंद करना. Android 16 और इससे पहले के वर्शन वाले डिवाइसों पर इसका कोई असर नहीं पड़ता.

ये सब-कमांड उपलब्ध हैं:

  • ignore uid|none|all: यह मेमोरी लिमिटर को कुछ या सभी प्रोसेस को अनदेखा करने का निर्देश देता है. यूआईडी (Android यूज़र आईडी) पास करने से, मेमोरी लिमिटर को उस यूआईडी से जुड़ी सभी प्रोसेस पर पाबंदी लागू न करने का निर्देश मिलता है. इसके अलावा, all (सभी ऐप्लिकेशन को अनदेखा करें) या none (किसी भी ऐप्लिकेशन को अनदेखा न करें) भी पास किया जा सकता है. none को पास करने पर, am memory-limiter ignore को किए गए पिछले सभी कॉल रद्द हो जाते हैं.

    अगर आपने मेमोरी लिमिटर को किसी यूआईडी को अनदेखा करने का निर्देश दिया है, तो भी ऐप्लिकेशन में किसी प्रोसेस के लिए मैन्युअल तरीके से मेमोरी की सीमा लागू की जा सकती है. इसके लिए, am memory-limiter manual को कॉल करें.

  • manual pid limit|max|none: यह सिस्टम को, प्रोसेस पर मेमोरी की सीमा लागू करने का निर्देश देता है. इस प्रोसेस की पहचान, दिए गए पीआईडी (प्रोसेस आईडी) से की जाती है. मेमोरी की सीमा को पूर्णांक के तौर पर एमबी में बताया जाता है. उदाहरण के लिए, 30 का मतलब है कि प्रोसेस के लिए 30 एमबी की मेमोरी तय की गई है. max को पास करने से, उस प्रोसेस पर मेमोरी की सभी सीमाएँ हट जाती हैं. none को पास करने से, प्रोसेस पर सेट की गई सभी मैन्युअल सीमाएं हट जाती हैं. साथ ही, सिस्टम की डिफ़ॉल्ट सीमा (अगर कोई है) वापस आ जाती है.
  • status: यह कुकी, मेमोरी लिमिटर की मौजूदा स्थिति के बारे में बताती है. इस स्टेटस में, दिखने वाली और न दिखने वाली प्रोसेस पर लगाई गई मेमोरी की सीमाएं शामिल होती हैं.

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

गतिविधि मैनेजर की उन कमांड के लिए जिनमें 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 को डेवलपर के लिए उपलब्ध एसडीके की झलक का इस्तेमाल करके बनाया गया है, तो आपको टेस्ट 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: इसमें उपयोगकर्ता के चुने गए विकल्प शामिल होते हैं. इसमें सभी डोमेन शामिल करें, न कि सिर्फ़ autoVerify वाले डोमेन.
reset-app-links [options] [package]

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

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

इसके विकल्प हैं:

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

ऐप्लिकेशन के लिए एआरटी प्रोफ़ाइलें पढ़ना

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 USB बैकएंड

adb सर्वर, दो बैकएंड के ज़रिए यूएसबी स्टैक से इंटरैक्ट कर सकता है. यह ओएस (Windows, Linux या macOS) के नेटिव बैकएंड का इस्तेमाल कर सकता है. इसके अलावा, यह libusb बैकएंड का भी इस्तेमाल कर सकता है. attach, detach, और यूएसबी की स्पीड का पता लगाने जैसी कुछ सुविधाएं, सिर्फ़ libusb बैकएंड का इस्तेमाल करने पर उपलब्ध होती हैं.

ADB_LIBUSB एनवायरमेंट वैरिएबल का इस्तेमाल करके, कोई बैकएंड चुना जा सकता है. अगर इसे सेट नहीं किया जाता है, तो adb अपने डिफ़ॉल्ट बैकएंड का इस्तेमाल करता है. ओएस के हिसाब से, डिफ़ॉल्ट ऐक्शन और सेटिंग अलग-अलग होती हैं. ADB v34 से, Windows को छोड़कर सभी ओएस पर libusb बैकएंड का इस्तेमाल डिफ़ॉल्ट रूप से किया जाता है. Windows पर, नेटिव बैकएंड का इस्तेमाल डिफ़ॉल्ट रूप से किया जाता है. अगर ADB_LIBUSB सेट है, तो इससे यह तय होता है कि नेटिव बैकएंड या libusb का इस्तेमाल किया जाएगा. adb एनवायरमेंट वैरिएबल के बारे में ज़्यादा जानने के लिए, adb मैन्युअल पेज देखें.

adb mDNS बैकएंड

ADB, mDNS (मल्टीकास्ट डीएनएस) प्रोटोकॉल का इस्तेमाल करता है. इससे सर्वर और डिवाइस, वायरलेस डीबग करने के लिए अपने-आप कनेक्ट हो जाते हैं. ADB v37 के मुताबिक, ADB सर्वर में दो mDNS बैकएंड होते हैं: libadbmdns और openscreen.

डिफ़ॉल्ट और सुझाया गया बैकएंड libadbmdns है. इस सेटिंग को बदलने के लिए, एनवायरमेंट वैरिएबल ADB_MDNS_OPENSCREEN का इस्तेमाल किया जा सकता है. इसे 1 या 0 पर सेट करें. macOS पर Openscreen बैकएंड के लिए, ADB v35 से सहायता मिलती है. ADB v34 से, Windows और Linux पर यह सुविधा काम करती है.

adb बर्स्ट मोड (ADB 36.0.0 से शुरू होने वाला)

बर्स्ट मोड एक एक्सपेरिमेंटल सुविधा है. इसकी मदद से, ADB किसी डिवाइस को तब भी पैकेट भेजता रहता है, जब डिवाइस ने पिछले पैकेट का जवाब नहीं दिया होता. इससे बड़ी फ़ाइलों को ट्रांसफ़र करते समय, ADB की थ्रूपुट क्षमता काफ़ी बढ़ जाती है. साथ ही, डीबग करते समय लेटेन्सी भी कम हो जाती है.

बर्स्ट मोड, डिफ़ॉल्ट रूप से बंद होता है. इस सुविधा को चालू करने के लिए, इनमें से कोई एक तरीका अपनाएं:

  • एनवायरमेंट वैरिएबल ADB_BURST_MODE को 1 पर सेट करें.
  • Android Studio में, डिबगर की सेटिंग पर जाएं. इसके लिए, File (macOS पर Android Studio) > Settings > Build, Execution, Deployment > Debugger पर जाएं और ADB Server Burst Mode को Enabled पर सेट करें.