Android Debug Bridge (adb)، Android Debug Bridge (adb)

پل اشکال‌زدایی اندروید ( adb ) یک ابزار خط فرمان همه‌کاره است که به شما امکان می‌دهد با یک دستگاه ارتباط برقرار کنید. دستور adb انواع اقدامات دستگاه، مانند نصب و اشکال‌زدایی برنامه‌ها را تسهیل می‌کند. adb دسترسی به یک پوسته یونیکس را فراهم می‌کند که می‌توانید از آن برای اجرای انواع دستورات روی یک دستگاه استفاده کنید. این یک برنامه کلاینت-سرور است که شامل سه جزء است:

  • یک کلاینت ، که دستورات را ارسال می‌کند. کلاینت روی دستگاه توسعه شما اجرا می‌شود. می‌توانید با صدور دستور adb یک کلاینت را از ترمینال خط فرمان فراخوانی کنید.
  • یک دیمن (adbd) که دستورات را روی یک دستگاه اجرا می‌کند. این دیمن به عنوان یک فرآیند پس‌زمینه روی هر دستگاه اجرا می‌شود.
  • یک سرور ، که ارتباط بین کلاینت و سرویس‌دهنده (daemon) را مدیریت می‌کند. سرور به عنوان یک فرآیند پس‌زمینه در دستگاه توسعه شما اجرا می‌شود.

adb در بسته ابزارهای پلتفرم SDK اندروید گنجانده شده است. این بسته را با استفاده از SDK Manager دانلود کنید، که آن را در android_sdk /platform-tools/ نصب می‌کند. اگر بسته مستقل ابزارهای پلتفرم SDK اندروید را می‌خواهید، آن را از اینجا دانلود کنید .

برای اطلاعات بیشتر در مورد اتصال یک دستگاه برای استفاده از طریق adb ، از جمله نحوه استفاده از Connection Assistant برای عیب‌یابی مشکلات رایج، به بخش اجرای برنامه‌ها روی یک دستگاه سخت‌افزاری مراجعه کنید.

نحوه کار adb

وقتی یک کلاینت adb را اجرا می‌کنید، کلاینت ابتدا بررسی می‌کند که آیا فرآیند سرور adb از قبل در حال اجرا است یا خیر. اگر وجود نداشته باشد، فرآیند سرور را اجرا می‌کند. وقتی سرور اجرا می‌شود، به پورت محلی TCP 5037 متصل می‌شود و به دستورات ارسالی از کلاینت‌های adb گوش می‌دهد.

نکته: همه کلاینت‌های adb از پورت ۵۰۳۷ برای ارتباط با سرور adb استفاده می‌کنند.

سپس سرور اتصال به تمام دستگاه‌های در حال اجرا را برقرار می‌کند. این سرور با اسکن پورت‌های فرد در محدوده ۵۵۵۵ تا ۵۵۸۵، که محدوده‌ای است که توسط ۱۶ شبیه‌ساز اول استفاده می‌شود، شبیه‌سازها را پیدا می‌کند. در جایی که سرور یک سرویس adb (adbd) پیدا کند، اتصالی به آن پورت برقرار می‌کند.

هر شبیه‌ساز از یک جفت پورت متوالی استفاده می‌کند - یک پورت زوج برای اتصالات کنسول و یک پورت فرد برای اتصالات adb . برای مثال:

شبیه‌ساز ۱، کنسول: ۵۵۵۴
شبیه‌ساز ۱، adb : ۵۵۵۵
شبیه‌ساز ۲، کنسول: ۵۵۵۶
شبیه‌ساز ۲، adb : ۵۵۵۷
و غیره.

همانطور که نشان داده شده است، شبیه‌ساز متصل به adb روی پورت ۵۵۵۵ همان شبیه‌سازی است که کنسول آن روی پورت ۵۵۵۴ گوش می‌دهد.

پس از اینکه سرور اتصال به همه دستگاه‌ها را برقرار کرد، می‌توانید از دستورات adb برای دسترسی به آن دستگاه‌ها استفاده کنید. از آنجایی که سرور اتصال به دستگاه‌ها را مدیریت می‌کند و دستورات چندین کلاینت adb را مدیریت می‌کند، می‌توانید هر دستگاهی را از هر کلاینت یا از یک اسکریپت کنترل کنید.

اشکال‌زدایی adb را روی دستگاه خود فعال کنید

برای استفاده از adb با دستگاهی که از طریق USB متصل شده است، باید اشکال‌زدایی USB را در تنظیمات سیستم دستگاه، در قسمت گزینه‌های توسعه‌دهندگان (Developer options ) فعال کنید. در اندروید ۴.۲ (سطح API ۱۷) و بالاتر، صفحه گزینه‌های توسعه‌دهندگان به طور پیش‌فرض پنهان است. برای قابل مشاهده کردن آن، گزینه‌های توسعه‌دهندگان را فعال کنید.

اکنون می‌توانید دستگاه خود را با USB متصل کنید. می‌توانید با اجرای دستور adb devices از دایرکتوری android_sdk /platform-tools/ از اتصال دستگاه خود اطمینان حاصل کنید. در صورت اتصال، نام دستگاه را به عنوان "device" مشاهده خواهید کرد.

توجه: وقتی دستگاهی را که اندروید ۴.۲.۲ (سطح API ۱۷) یا بالاتر را اجرا می‌کند متصل می‌کنید، سیستم یک پنجره محاوره‌ای نشان می‌دهد که می‌پرسد آیا کلید RSA را که امکان اشکال‌زدایی از طریق این رایانه را فراهم می‌کند، می‌پذیرد یا خیر. این مکانیزم امنیتی از دستگاه‌های کاربر محافظت می‌کند زیرا تضمین می‌کند که اشکال‌زدایی USB و سایر دستورات adb نمی‌توانند اجرا شوند، مگر اینکه بتوانید دستگاه را باز کنید و پنجره محاوره‌ای را تأیید کنید.

برای اطلاعات بیشتر در مورد اتصال به دستگاه از طریق USB، بخش اجرای برنامه‌ها روی دستگاه سخت‌افزاری را مطالعه کنید.

اتصال به دستگاه از طریق وای‌فای

توجه: دستورالعمل‌های زیر برای دستگاه‌های Wear که اندروید ۱۱ (سطح API 30) را اجرا می‌کنند، صدق نمی‌کند. برای اطلاعات بیشتر به راهنمای اشکال‌زدایی برنامه Wear OS مراجعه کنید.

اندروید ۱۱ (سطح API 30) و بالاتر، از استقرار و اشکال‌زدایی برنامه شما به صورت بی‌سیم از ایستگاه کاری شما با استفاده از Android Debug Bridge (adb) پشتیبانی می‌کند. به عنوان مثال، می‌توانید برنامه قابل اشکال‌زدایی خود را بدون نیاز به اتصال فیزیکی دستگاه خود از طریق USB، روی چندین دستگاه از راه دور مستقر کنید. این امر نیاز به مقابله با مشکلات رایج اتصال USB، مانند نصب درایور، را از بین می‌برد.

قبل از شروع استفاده از اشکال‌زدایی بی‌سیم، موارد زیر را انجام دهید:

  • مطمئن شوید که ایستگاه کاری و دستگاه شما به یک شبکه بی‌سیم متصل هستند.

  • مطمئن شوید که دستگاه شما از اندروید ۱۱ (سطح API 30) یا بالاتر برای تلفن یا اندروید ۱۳ (سطح API 33) یا بالاتر برای تلویزیون و WearOS استفاده می‌کند. برای اطلاعات بیشتر، به بررسی و به‌روزرسانی نسخه اندروید خود مراجعه کنید.

  • اگر از IDE استفاده می‌کنید، مطمئن شوید که آخرین نسخه اندروید استودیو را نصب کرده‌اید. می‌توانید آن را از اینجا دانلود کنید.

  • در ایستگاه کاری خود، آخرین نسخه SDK Platform Tools را به‌روزرسانی کنید.

برای استفاده از اشکال‌زدایی بی‌سیم، باید دستگاه خود را با استفاده از یک کد QR یا یک کد جفت‌سازی به ایستگاه کاری خود جفت کنید. ایستگاه کاری و دستگاه شما باید به یک شبکه بی‌سیم یکسان متصل باشند. برای اتصال به دستگاه خود، این مراحل را دنبال کنید:

  1. گزینه‌های توسعه‌دهنده را در دستگاه خود فعال کنید .

  2. اندروید استودیو را باز کنید و از منوی تنظیمات اجرا، گزینه Pair Devices Using Wi-Fi را انتخاب کنید.

    منوی کشویی تنظیمات را اجرا کنید
    شکل ۱. منوی تنظیمات را اجرا کنید.

    پنجره جفت‌سازی دستگاه‌ها از طریق وای‌فای ، همانطور که در شکل ۲ نشان داده شده است، ظاهر می‌شود.

    تصویر صفحه نمایش دستگاه‌های جفت‌شده از طریق پنجره بازشو Wi-Fi
    شکل ۲. پنجره بازشو برای جفت کردن دستگاه‌ها با استفاده از کد QR یا کد جفت‌سازی.
  3. در دستگاه خود، روی اشکال‌زدایی بی‌سیم (Wireless debugging) ضربه بزنید و دستگاه خود را جفت کنید:

    تصویر صفحه نمایش یک گوشی پیکسل که تنظیمات سیستم‌های اشکال‌زدایی بی‌سیم را نشان می‌دهد.
    شکل ۳. تصویر صفحه تنظیمات اشکال‌زدایی بی‌سیم در گوشی گوگل پیکسل.
    1. برای جفت کردن دستگاه خود با کد QR، گزینه جفت کردن دستگاه با کد QR را انتخاب کنید و کد QR دریافت شده از پنجره Pair devices over Wi-Fi که در شکل 2 نشان داده شده است را اسکن کنید.

    2. برای جفت کردن دستگاه خود با کد جفت‌سازی، از پنجره‌ی بازشو «جفت کردن دستگاه‌ها از طریق وای‌فای» گزینه‌ی «جفت کردن دستگاه با کد جفت‌سازی» را انتخاب کنید. در دستگاه خود، «جفت کردن با استفاده از کد جفت‌سازی» را انتخاب کنید و کد شش رقمی ارائه شده را یادداشت کنید. پس از نمایش دستگاه شما در پنجره‌ی «جفت کردن دستگاه‌ها از طریق وای‌فای» ، می‌توانید «جفت کردن» را انتخاب کرده و کد شش رقمی نشان داده شده در دستگاه خود را وارد کنید.

      تصویر نمونه وارد کردن پین کد
      شکل ۴. نمونه‌ای از ورود کد شش رقمی.
  4. پس از جفت شدن دستگاه، می‌توانید برنامه خود را روی دستگاهتان نصب کنید.

    برای جفت کردن یک دستگاه دیگر یا فراموش کردن دستگاه فعلی روی ایستگاه کاری خود، به بخش اشکال‌زدایی بی‌سیم (Wireless debugging) در دستگاه خود بروید. روی نام ایستگاه کاری خود در زیر دستگاه‌های جفت‌شده (Paired devices) ضربه بزنید و فراموش کردن (Forget) را انتخاب کنید.

  5. اگر می‌خواهید اشکال‌زدایی بی‌سیم را به سرعت روشن و خاموش کنید، می‌توانید از کاشی‌های توسعه‌دهنده تنظیمات سریع برای اشکال‌زدایی بی‌سیم ، که در گزینه‌های توسعه‌دهنده > کاشی‌های توسعه‌دهنده تنظیمات سریع موجود است، استفاده کنید.

    تصویر از کاشی‌های توسعه‌دهنده تنظیمات سریع از یک گوشی گوگل پیکسل.
    شکل 5. تنظیمات سریع کاشی‌های توسعه‌دهنده به شما امکان می‌دهد اشکال‌زدایی بی‌سیم را به سرعت روشن و خاموش کنید.

اتصال وای‌فای با استفاده از خط فرمان

روش دیگر، برای اتصال به دستگاه خود با استفاده از خط فرمان بدون اندروید استودیو، این مراحل را دنبال کنید:

  1. همانطور که قبلاً توضیح داده شد، گزینه‌های توسعه‌دهنده را در دستگاه خود فعال کنید.

  2. همانطور که قبلاً توضیح داده شد، اشکال‌زدایی بی‌سیم را در دستگاه خود فعال کنید.

  3. در سیستم عامل خود، یک پنجره ترمینال باز کنید و به android_sdk/platform-tools بروید.

  4. با انتخاب گزینه جفت‌سازی دستگاه با کد جفت‌سازی، آدرس IP، شماره پورت و کد جفت‌سازی خود را پیدا کنید. به آدرس IP، شماره پورت و کد جفت‌سازی نمایش داده شده روی دستگاه توجه کنید.

  5. در ترمینال کامپیوتر خود، adb pair ipaddr:port را اجرا کنید. از آدرس IP و شماره پورت بالا استفاده کنید.

  6. وقتی از شما خواسته شد، کد جفت‌سازی را مطابق شکل زیر وارد کنید.

    تصویر صفحه جفت‌سازی در خط فرمان.
    شکل ۶. پیامی نشان می‌دهد که دستگاه شما با موفقیت جفت شده است.

حل مشکلات اتصال بی‌سیم

اگر در اتصال بی‌سیم به دستگاه خود مشکل دارید، مراحل عیب‌یابی زیر را برای حل مشکل امتحان کنید.

بررسی کنید که آیا ایستگاه کاری و دستگاه شما پیش‌نیازها را برآورده می‌کنند یا خیر

بررسی کنید که ایستگاه کاری و دستگاه، پیش‌نیازهای ذکر شده در ابتدای این بخش را برآورده کنند.

سایر مشکلات شناخته شده را بررسی کنید

در زیر لیستی از مشکلات شناخته شده فعلی در مورد اشکال زدایی بی سیم (با adb یا Android Studio) و نحوه حل آنها آمده است:

  • وای‌فای متصل نمی‌شود : شبکه‌های وای‌فای امن، مانند شبکه‌های وای‌فای شرکتی، ممکن است اتصالات p2p را مسدود کنند و به شما اجازه اتصال از طریق وای‌فای را ندهند. سعی کنید با کابل یا شبکه وای‌فای دیگری (غیر شرکتی) متصل شوید. اتصال بی‌سیم با استفاده از adb connect ip : port over tcp/ip (پس از اتصال USB اولیه) گزینه دیگری است، در صورتی که استفاده از شبکه غیر شرکتی یک گزینه باشد.

  • گاهی اوقات adb از طریق وای‌فای به‌طور خودکار خاموش می‌شود : این اتفاق زمانی می‌افتد که دستگاه به شبکه‌های وای‌فای سوئیچ کند یا از شبکه جدا شود. برای حل این مشکل، دوباره به شبکه متصل شوید.

  • دستگاه پس از جفت شدن با موفقیت متصل نمی‌شود : adb برای شناسایی و اتصال خودکار به دستگاه‌های جفت شده به mDNS متکی است. اگر پیکربندی شبکه یا دستگاه شما از mDNS پشتیبانی نمی‌کند یا آن را غیرفعال کرده است، باید با استفاده از adb connect ip : port به صورت دستی به دستگاه متصل شوید.

اتصال بی‌سیم به دستگاه پس از اتصال اولیه USB (فقط این گزینه در اندروید ۱۰ و پایین‌تر موجود است)

توجه: این گردش کار برای اندروید ۱۱ (و بالاتر) نیز قابل اجرا است، با این تفاوت که شامل یک اتصال *اولیه* از طریق USB فیزیکی نیز می‌شود.

توجه: دستورالعمل‌های زیر برای دستگاه‌های Wear که اندروید ۱۰ (سطح API 29) یا پایین‌تر را اجرا می‌کنند، صدق نمی‌کند. برای اطلاعات بیشتر به راهنمای اشکال‌زدایی برنامه Wear OS مراجعه کنید.

adb معمولاً از طریق USB با دستگاه ارتباط برقرار می‌کند، اما می‌توانید از adb از طریق Wi-Fi نیز استفاده کنید. برای اتصال دستگاهی که اندروید ۱۰ (سطح API 29) یا پایین‌تر را اجرا می‌کند، این مراحل اولیه را از طریق USB دنبال کنید:

  1. دستگاه اندروید و کامپیوتر میزبان adb خود را به یک شبکه وای‌فای مشترک وصل کنید.
  2. توجه: توجه داشته باشید که همه نقاط دسترسی مناسب نیستند. ممکن است لازم باشد از نقطه دسترسی استفاده کنید که فایروال آن به درستی پیکربندی شده باشد تا از adb پشتیبانی کند.

  3. دستگاه را با کابل USB به کامپیوتر میزبان وصل کنید.
  4. دستگاه هدف را طوری تنظیم کنید که به اتصال TCP/IP روی پورت ۵۵۵۵ گوش دهد:
    adb tcpip 5555
    
  5. کابل USB را از دستگاه هدف جدا کنید.
  6. آدرس IP دستگاه اندروید را پیدا کنید. برای مثال، در یک دستگاه Nexus، می‌توانید آدرس IP را در تنظیمات > درباره تبلت (یا درباره تلفن ) > وضعیت > آدرس IP پیدا کنید.
  7. با استفاده از آدرس IP به دستگاه متصل شوید:
    adb connect device_ip_address:5555
    
  8. تأیید کنید که رایانه میزبان شما به دستگاه هدف متصل است:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

دستگاه شما اکنون به adb متصل شده است.

اگر اتصال adb به دستگاه شما قطع شد:

  • مطمئن شوید که میزبان شما هنوز به همان شبکه وای‌فای که دستگاه اندروید شما به آن متصل است، متصل است.
  • با اجرای مجدد مرحله adb connect دوباره متصل شوید.
  • اگر این کار نکرد، میزبان adb خود را مجدداً تنظیم کنید:
    adb kill-server
    

    سپس از ابتدا دوباره شروع کنید.

استعلام دستگاه ها

قبل از صدور دستورات adb ، دانستن اینکه چه نمونه‌های دستگاهی به سرور adb متصل هستند، مفید است. با استفاده از دستور devices ، لیستی از دستگاه‌های متصل ایجاد کنید:

  adb devices -l
  

در پاسخ، adb این اطلاعات وضعیت را برای هر دستگاه چاپ می‌کند:

  • شماره سریال: adb یک رشته ایجاد می‌کند تا دستگاه را به طور منحصر به فرد با شماره پورت آن شناسایی کند. در اینجا یک شماره سریال به عنوان مثال آورده شده است: emulator-5554
  • وضعیت: وضعیت اتصال دستگاه می‌تواند یکی از موارد زیر باشد:
    • offline : دستگاه به adb متصل نیست یا پاسخ نمی‌دهد.
    • device : دستگاه به سرور adb متصل است. توجه داشته باشید که این حالت به این معنی نیست که سیستم اندروید کاملاً بوت شده و عملیاتی است، زیرا دستگاه در حالی که سیستم هنوز در حال بوت شدن است به adb متصل می‌شود. پس از بوت شدن، این حالت عملیاتی عادی یک دستگاه است.
    • no device : هیچ دستگاهی متصل نیست.
  • توضیحات: اگر گزینه -l را اضافه کنید، دستور devices به شما می‌گوید که دستگاه چیست. این اطلاعات زمانی مفید است که چندین دستگاه متصل دارید تا بتوانید آنها را از هم تشخیص دهید.

مثال زیر دستور devices و خروجی آن را نشان می‌دهد. سه دستگاه در حال اجرا هستند. دو خط اول در لیست، شبیه‌سازها هستند و خط سوم، یک دستگاه سخت‌افزاری است که به کامپیوتر متصل شده است.

$ 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 با مقدار پورت فرد بین ۵۵۵۴ و ۵۵۸۴ استفاده می‌کنید.
  • پورت فرد انتخابی شما اشغال نیست، بنابراین اتصال پورت می‌تواند در شماره پورت مشخص شده برقرار شود - یا اگر اشغال باشد، شبیه‌ساز به پورت دیگری که الزامات بند ۲ را برآورده می‌کند، سوئیچ می‌کند.
  • بعد از شروع شبیه‌ساز، سرور adb را شروع می‌کنید.

یک راه برای جلوگیری از این وضعیت این است که به شبیه‌ساز اجازه دهید پورت‌های خودش را انتخاب کند و بیش از ۱۶ شبیه‌ساز را همزمان اجرا نکند. راه دیگر این است که همیشه سرور adb را قبل از استفاده از دستور emulator ، همانطور که در مثال‌های زیر توضیح داده شده است، شروع کنید.

مثال ۱: در دنباله دستورات زیر، دستور adb devices سرور adb را اجرا می‌کند، اما لیست دستگاه‌ها نمایش داده نمی‌شود.

سرور adb را متوقف کنید و دستورات زیر را به ترتیب نشان داده شده وارد کنید. برای نام AVD، یک نام 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. وقتی شماره سریال را دارید، از گزینه -s به همراه دستورات adb برای مشخص کردن شماره سریال استفاده کنید.
    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: more than one device/emulator" را نمایش می‌دهد.

اگر چندین دستگاه در دسترس دارید اما فقط یکی از آنها شبیه‌ساز است، از گزینه -e برای ارسال دستورات به شبیه‌ساز استفاده کنید. اگر چندین دستگاه وجود دارد اما فقط یک دستگاه سخت‌افزاری متصل است، از گزینه -d برای ارسال دستورات به دستگاه سخت‌افزاری استفاده کنید.

نصب یک برنامه

شما می‌توانید با استفاده از دستور install adb برای نصب یک APK روی شبیه‌ساز یا دستگاه متصل استفاده کنید:

adb install path_to_apk

هنگام نصب یک APK آزمایشی، باید از گزینه -t به همراه دستور install استفاده کنید. برای اطلاعات بیشتر، به -t مراجعه کنید.

برای نصب چندین APK install-multiple استفاده کنید. این مورد زمانی مفید است که تمام APK های مربوط به یک دستگاه خاص را برای برنامه خود از Play Console دانلود کرده باشید و بخواهید آنها را روی یک شبیه ساز یا دستگاه فیزیکی نصب کنید.

برای اطلاعات بیشتر در مورد نحوه ایجاد یک فایل APK که می‌توانید روی یک شبیه‌ساز/دستگاه نصب کنید، به بخش «ساخت و اجرای برنامه» مراجعه کنید.

توجه: اگر از اندروید استودیو استفاده می‌کنید، نیازی به استفاده مستقیم adb برای نصب برنامه خود روی شبیه‌ساز یا دستگاه ندارید. در عوض، اندروید استودیو بسته‌بندی و نصب برنامه را برای شما انجام می‌دهد.

تنظیم فورواردینگ پورت

از دستور forward برای تنظیم ارسال پورت دلخواه استفاده کنید، که درخواست‌ها را روی یک پورت میزبان خاص به پورت دیگری روی یک دستگاه ارسال می‌کند. مثال زیر ارسال پورت میزبان ۶۱۰۰ به پورت دستگاه ۷۱۰۰ را تنظیم می‌کند:

adb forward tcp:6100 tcp:7100

مثال زیر، فوروارد کردن پورت میزبان ۶۱۰۰ را به 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 تعاملی استفاده کنید. برای صدور یک دستور واحد، از دستور shell به صورت زیر استفاده کنید:

adb [-d |-e | -s serial_number] shell shell_command

برای شروع یک پوسته تعاملی روی یک دستگاه، از دستور shell به صورت زیر استفاده کنید:

adb [-d | -e | -s serial_number] shell

برای خروج از یک پوسته تعاملی، Control+D را فشار دهید یا exit را تایپ کنید.

اندروید اکثر ابزارهای خط فرمان معمول یونیکس را ارائه می‌دهد. برای مشاهده فهرستی از ابزارهای موجود، از دستور زیر استفاده کنید:

adb shell ls /system/bin

برای اکثر دستورات، راهنما از طریق آرگومان --help در دسترس است. بسیاری از دستورات پوسته توسط toybox ارائه می‌شوند. راهنمای عمومی قابل اجرا برای همه دستورات toybox از طریق toybox --help در دسترس است.

با ابزارهای پلتفرم اندروید نسخه ۲۳ و بالاتر، adb آرگومان‌ها را به همان روشی که دستور ssh(1) انجام می‌دهد، مدیریت می‌کند. این تغییر بسیاری از مشکلات مربوط به تزریق دستور را برطرف کرده و اجرای ایمن دستوراتی را که حاوی متاکاراکترهای shell هستند، مانند adb install Let\'sGo.apk ، امکان‌پذیر می‌سازد. این تغییر به این معنی است که تفسیر هر دستوری که حاوی متاکاراکترهای shell باشد نیز تغییر کرده است.

برای مثال، adb shell setprop key ' two words ' اکنون یک خطا است، زیرا نقل قول‌ها توسط پوسته محلی بلعیده می‌شوند و دستگاه adb shell setprop key two words می‌بیند. برای اینکه دستور کار کند، دو بار نقل قول کنید، یک بار برای پوسته محلی و یک بار برای پوسته راه دور، همانطور که با ssh(1) انجام می‌دهید. برای مثال، adb shell setprop key "' two words '" کار می‌کند زیرا پوسته محلی سطح بیرونی نقل قول را می‌گیرد و دستگاه همچنان سطح داخلی نقل قول را می‌بیند: setprop key 'two words' . همچنین می‌توان از escape استفاده کرد، اما معمولاً دو بار نقل قول کردن آسان‌تر است.

همچنین به ابزار خط فرمان Logcat مراجعه کنید که برای نظارت بر گزارش سیستم مفید است.

مدیر فعالیت تماس

در یک پوسته adb ، می‌توانید با ابزار مدیریت فعالیت ( am ) دستوراتی را برای انجام اقدامات مختلف سیستمی، مانند شروع یک فعالیت، توقف اجباری یک فرآیند، پخش یک هدف (Intent)، تغییر ویژگی‌های صفحه نمایش دستگاه و موارد دیگر، صادر کنید.

در حالی که در یک پوسته (shell) هستید، سینتکس am به صورت زیر است:

am command

شما همچنین می‌توانید بدون وارد کردن یک ریموت شل، مستقیماً از adb دستور مدیریت فعالیت را صادر کنید. برای مثال:

adb shell am start -a android.intent.action.VIEW

جدول 1. دستورات موجود برای مدیریت فعالیت

فرمان توضیحات
start [ options ] intent شروع یک Activity مشخص شده توسط intent .

برای آرگومان‌های intent به مشخصات مراجعه کنید.

گزینه‌ها عبارتند از:

  • -D : فعال کردن اشکال‌زدایی.
  • -W : منتظر بمانید تا اجرا کامل شود.
  • --start-profiler file : شروع profiler و ارسال نتایج به file .
  • -P file : مانند --start-profiler ، اما پروفایل‌سازی زمانی که برنامه غیرفعال می‌شود، متوقف می‌شود.
  • -R count : count دفعات شروع فعالیت را تکرار می‌کند. قبل از هر تکرار، فعالیت برتر به پایان می‌رسد.
  • -S : قبل از شروع فعالیت، برنامه هدف را به اجبار متوقف کنید.
  • --opengl-trace : ردیابی توابع OpenGL را فعال می‌کند.
  • --user user_id | current : مشخص می‌کند که با کدام کاربر اجرا شود؛ اگر مشخص نشده باشد، با کاربر فعلی اجرا شود.
startservice [ options ] intent Service مشخص شده توسط intent را شروع کنید.

برای آرگومان‌های intent به مشخصات مراجعه کنید.

گزینه‌ها عبارتند از:

  • --user user_id | current : مشخص می‌کند که با کدام کاربر اجرا شود. اگر مشخص نشده باشد، با کاربر فعلی اجرا شود.
force-stop package هر چیزی که مربوط به package باشد را به اجبار متوقف کنید.
kill [ options ] package تمام فرآیندهای مرتبط با package را از بین می‌برد. این دستور فقط فرآیندهایی را از بین می‌برد که از بین بردن آنها بی‌خطر است و تاثیری بر تجربه کاربری ندارند.

گزینه‌ها عبارتند از:

  • --user user_id | all | current : مشخص می‌کند کدام فرآیندهای کاربر باید از بین بروند. اگر مشخص نشده باشد، تمام فرآیندهای کاربران را از بین می‌برد.
kill-all تمام فرآیندهای پس‌زمینه را متوقف کنید.
broadcast [ options ] intent یک قصد پخش (broadcast intent) صادر کنید.

برای آرگومان‌های 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 : قبل از بازگشت، منتظر بمانید تا ابزار دقیق تمام شود. برای اجراکننده‌های آزمایشی (test runners) مورد نیاز است.
  • --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] : هنگام ارائه نام فرآیند، کاربر فرآیند مورد نظر برای dump را مشخص کنید. در صورت عدم مشخص شدن، از کاربر فعلی استفاده می‌شود.
  • -b [| png | jpg | webp] ‎: تصاویر بیت‌مپ را از حافظه گرافیکی (سطح API 35 و بالاتر) استخراج می‌کند. در صورت تمایل، فرمت خروجی را نیز مشخص کنید (به طور پیش‌فرض PNG).
  • -n : به جای هیپ مدیریت‌شده، هیپ بومی را تخلیه می‌کند.
dumpbitmaps [ options ] [-p process ] اطلاعات بیت‌مپ را از process (سطح API ۳۶ و بالاتر) حذف کنید.

گزینه‌ها عبارتند از:

  • -d|--dump [ format ] ‎: محتویات بیت‌مپ را در format مشخص‌شده، که می‌تواند یکی از png ، jpg یا webp باشد، که در صورت عدم تعیین فرمت، به‌طور پیش‌فرض png خواهد بود، تخلیه می‌کند. یک فایل زیپ 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 ] نظارت بر خرابی‌ها یا ANRها را شروع کنید.

گزینه‌ها عبارتند از:

  • --gdb : دستور gdbserv روی پورت داده شده در زمان crash/ANR اجرا می‌کند.
screen-compat {on | off} package حالت سازگاری صفحه نمایش package را کنترل کنید.
display-size [reset | width x height ] نادیده گرفتن اندازه صفحه نمایش دستگاه. این دستور برای آزمایش برنامه شما در اندازه‌های مختلف صفحه نمایش با تقلید از وضوح صفحه نمایش کوچک با استفاده از دستگاهی با صفحه نمایش بزرگ و برعکس مفید است.

مثال:
am display-size 1280x800

display-density dpi تراکم نمایشگر دستگاه را نادیده بگیرید. این دستور برای آزمایش برنامه شما در تراکم‌های مختلف صفحه نمایش با تقلید از یک محیط صفحه نمایش با تراکم بالا با استفاده از یک صفحه نمایش با تراکم پایین و برعکس مفید است.

مثال:
am display-density 480

to-uri intent مشخصات intent داده شده را به صورت یک URI چاپ کن.

برای آرگومان‌های intent به مشخصات مراجعه کنید.

to-intent-uri intent مشخصات intent داده شده را به عنوان یک intent: URI چاپ کن.

برای آرگومان‌های intent به مشخصات مراجعه کنید.

مشخصات آرگومان‌های intent

برای دستورات مدیریت فعالیت که آرگومان intent می‌گیرند، می‌توانید intent را با گزینه‌های زیر مشخص کنید:

با مدیر بسته ( pm ) تماس بگیرید

در یک پوسته adb ، می‌توانید با ابزار مدیریت بسته ( pm ) دستوراتی را برای انجام اقدامات و پرس‌وجوها روی بسته‌های برنامه‌های نصب‌شده روی دستگاه صادر کنید.

در حالی که در یک پوسته، سینتکس pm صورت زیر است:

pm command

همچنین می‌توانید مستقیماً از adb و بدون وارد کردن یک remote shell، دستور مدیریت بسته را صادر کنید. برای مثال:

adb shell pm uninstall com.example.MyApp

جدول ۲. دستورات موجود برای مدیریت بسته‌ها

فرمان توضیحات
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 مسیر APK package داده شده را چاپ کن.
install [ options ] path یک بسته، که توسط path مشخص شده است، را روی سیستم نصب می‌کند.

گزینه‌ها:

  • -r : نصب مجدد یک برنامه موجود، با حفظ داده‌های آن.
  • -t : اجازه نصب APKهای آزمایشی را می‌دهد. Gradle فقط زمانی یک APK آزمایشی تولید می‌کند که برنامه خود را اجرا یا اشکال‌زدایی کرده باشید یا از دستور Android Studio Build > Build APK استفاده کرده باشید. اگر APK با استفاده از SDK پیش‌نمایش توسعه‌دهندگان ساخته شده باشد، در صورت نصب APK آزمایشی، باید گزینه -t را به دستور install اضافه کنید.
  • -i installer_package_name : نام بسته نصب‌کننده را مشخص کنید.
  • --user user_id : کاربری که قرار است پکیج برایش نصب شود را مشخص می‌کند. به طور پیش‌فرض، پکیج برای همه کاربران موجود در دستگاه نصب می‌شود.
  • --install-location location : محل نصب را با استفاده از یکی از مقادیر زیر تنظیم کنید:
    • 0 : از محل نصب پیش‌فرض استفاده کنید.
    • 1 : روی حافظه داخلی دستگاه نصب کنید.
    • 2 : نصب روی حافظه خارجی
  • -f : نصب بسته روی حافظه داخلی سیستم.
  • -d : اجازه می‌دهد کد نسخه به نسخه پایین‌تری ارتقا یابد.
  • -g : تمام مجوزهای ذکر شده در مانیفست برنامه را اعطا می‌کند.
  • --fastdeploy : به‌روزرسانی سریع یک بسته نصب‌شده تنها با به‌روزرسانی بخش‌هایی از APK که تغییر کرده‌اند.
  • --incremental : به اندازه کافی APK نصب می‌کند تا برنامه اجرا شود و داده‌های باقیمانده در پس‌زمینه پخش شوند. برای استفاده از این ویژگی، باید APK را امضا کنید، یک فایل APK Signature Scheme v4 ایجاد کنید و این فایل را در همان دایرکتوری APK قرار دهید. این ویژگی فقط در دستگاه‌های خاصی پشتیبانی می‌شود. این گزینه adb را مجبور می‌کند که از این ویژگی استفاده کند یا در صورت عدم پشتیبانی، با اطلاعات کامل در مورد دلیل عدم موفقیت، از آن استفاده نکند. گزینه --wait را اضافه کنید تا قبل از اعطای دسترسی به APK، منتظر بمانید تا APK به طور کامل نصب شود.

    --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 اعطای مجوز به یک برنامه. در دستگاه‌هایی که اندروید ۶.۰ (سطح API ۲۳) و بالاتر را اجرا می‌کنند، مجوز می‌تواند هر مجوزی باشد که در مانیفست برنامه اعلام شده است. در دستگاه‌هایی که اندروید ۵.۱ (سطح API ۲۲) و پایین‌تر را اجرا می‌کنند، باید یک مجوز اختیاری باشد که توسط برنامه تعریف شده است.
revoke package_name permission لغو مجوز از یک برنامه. در دستگاه‌هایی که اندروید ۶.۰ (سطح API ۲۳) و بالاتر را اجرا می‌کنند، مجوز می‌تواند هر مجوزی باشد که در مانیفست برنامه اعلام شده است. در دستگاه‌هایی که اندروید ۵.۱ (سطح API ۲۲) و پایین‌تر را اجرا می‌کنند، باید یک مجوز اختیاری باشد که توسط برنامه تعریف شده است.
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 : به زور تایید شده، معمولاً از طریق shell
  • denied : به زور رد شده، معمولاً از طریق پوسته
  • migrated : تأیید حفظ‌شده از یک پاسخ قدیمی
  • restored : تأیید حفظ‌شده از بازیابی داده‌های کاربر
  • legacy_failure : توسط یک تأییدکننده‌ی میراث، به دلیل نامعلوم، رد شده است
  • system_configured : به طور خودکار توسط پیکربندی دستگاه تأیید می‌شود
  • >= 1024 : کد خطای سفارشی، که مختص تأییدکننده دستگاه است

گزینه‌ها عبارتند از:

  • --user user_id : include user selections. Include all domains, not just autoVerify ones.
reset-app-links [ options ] [ package ]

Reset domain verification state for the given package, or for all packages if none is specified.

  • package : the package to reset, or "all" to reset all packages

Options are:

  • --user user_id : include user selections. Include all domains, not just autoVerify ones.
verify-app-links [ --re-verify ] [ package ]

Broadcast a verification request for the given package , or for all packages if none is specified. Only sends if the package has previously not recorded a response.

  • --re-verify : send even if the package has recorded a response
set-app-links [--package package ] state domains

Manually set the state of a domain for a package. The domain must be declared by the package as autoVerify for this to work. This command will not report a failure for domains that could not be applied.

  • --package package : the package to set, or "all" to set all packages
  • state : the code to set the domains to. Valid values are:
    • STATE_NO_RESPONSE (0) : reset as if no response was ever recorded.
    • STATE_SUCCESS (1) : treat domain as successfully verified by domain verification agent. Note that the domain verification agent can override this.
    • STATE_APPROVED (2) : treat domain as always approved, preventing the domain verification agent from changing it.
    • STATE_DENIED (3) : treat domain as always denied, preventing the domain verification agent from changing it.
  • domains : space-separated list of domains to change, or "all" to change every domain.
set-app-links-user-selection --user user_id [--package package ] enabled domains

Manually set the state of a host user selection for a package. The domain must be declared by the package for this to work. This command will not report a failure for domains that could not be applied.

  • --user user_id : the user to change selections for
  • --package package : the package to set
  • enabled : whether to approve the domain
  • domains : space-separated list of domains to change, or "all" to change every domain
set-app-links-allowed --user user_id [--package package ] allowed

Toggle the auto-verified link-handling setting for a package.

  • --user user_id : the user to change selections for
  • --package package : the package to set, or "all" to set all packages; packages will be reset if no package is specified
  • allowed : true to allow the package to open auto-verified links, false to disable
get-app-link-owners --user user_id [--package package ] domains

Print the owners for a specific domain for a given user in low- to high-priority order.

  • --user user_id : the user to query for
  • --package package : optionally also print for all web domains declared by a package, or "all" to print all packages
  • domains : space-separated list of domains to query for

Call device policy manager ( dpm )

To help you develop and test your device management apps, issue commands to the device policy manager ( dpm ) tool. Use the tool to control the active admin app or change a policy's status data on the device.

While in a shell, the dpm syntax is:

dpm command

You can also issue a device policy manager command directly from adb without entering a remote shell:

adb shell dpm command

Table 3. Available device policy manager commands

فرمان توضیحات
set-active-admin [ options ] component Sets component as active admin.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
set-profile-owner [ options ] component Set component as active admin and its package as profile owner for an existing user.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
  • --name name : Specify the human-readable organization name.
set-device-owner [ options ] component Set component as active admin and its package as device owner.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
  • --name name : Specify the human-readable organization name.
remove-active-admin [ options ] component Disable an active admin. The app must declare android:testOnly in the manifest. This command also removes device and profile owners.

Options are:

  • --user user_id : Specify the target user. You can also pass --user current to select the current user.
clear-freeze-period-record Clear the device's record of previously set freeze periods for system OTA updates. This is useful to avoid the device scheduling restrictions when developing apps that manage freeze periods. See Manage system updates .

Supported on devices running Android 9.0 (API level 28) and higher.

force-network-logs Force the system to make any existing network logs ready for retrieval by a DPC. If there are connection or DNS logs available, the DPC receives the onNetworkLogsAvailable() callback. See Network activity logging .

This command is rate-limited. Supported on devices running Android 9.0 (API level 28) and higher.

force-security-logs Force the system to make any existing security logs available to the DPC. If there are logs available, the DPC receives the onSecurityLogsAvailable() callback. See Log enterprise device activity .

This command is rate-limited. Supported on devices running Android 9.0 (API level 28) and higher.

اسکرین شات بگیرید

The screencap command is a shell utility for taking a screenshot of a device display.

While in a shell, the screencap syntax is:

screencap filename

To use screencap from the command line, enter the following:

adb shell screencap /sdcard/screen.png

Here's an example screenshot session, using the adb shell to capture the screenshot and the pull command to download the file from the device:

$ adb shell
shell@ $ screencap /sdcard/screen.png
shell@ $ exit
$ adb pull /sdcard/screen.png

Alternatively, if you omit the filename, screencap writes the image to standard output. When combined with the -p option to specify PNG format, you can stream the device screenshot directly to a file on your local machine.

Here's an example of capturing a screenshot and saving it locally in a single command:

# use 'exec-out' instead of 'shell' to get raw data
$ adb exec-out screencap -p > screen.png

ضبط ویدیو

The screenrecord command is a shell utility for recording the display of devices running Android 4.4 (API level 19) and higher. The utility records screen activity to an MPEG-4 file. You can use this file to create promotional or training videos or for debugging and testing.

In a shell, use the following syntax:

screenrecord [options] filename

To use screenrecord from the command line, enter the following:

adb shell screenrecord /sdcard/demo.mp4

Stop the screen recording by pressing Control+C. Otherwise, the recording stops automatically at three minutes or the time limit set by --time-limit .

To begin recording your device screen, run the screenrecord command to record the video. Then, run the pull command to download the video from the device to the host computer. Here's an example recording session:

$ adb shell
shell@ $ screenrecord --verbose /sdcard/demo.mp4
(press Control + C to stop)
shell@ $ exit
$ adb pull /sdcard/demo.mp4

The screenrecord utility can record at any supported resolution and bit rate you request, while retaining the aspect ratio of the device display. The utility records at the native display resolution and orientation by default, with a maximum length of three minutes.

Limitations of the screenrecord utility:

  • Audio is not recorded with the video file.
  • Video recording is not available for devices running Wear OS.
  • Some devices might not be able to record at their native display resolution. If you encounter problems with screen recording, try using a lower screen resolution.
  • Rotation of the screen during recording is not supported. If the screen does rotate during recording, some of the screen is cut off in the recording.

Table 4. screenrecord options

گزینه‌ها توضیحات
--help Display command syntax and options
--size width x height Set the video size: 1280x720 . The default value is the device's native display resolution (if supported), 1280x720 if not. For best results, use a size supported by your device's Advanced Video Coding (AVC) encoder.
--bit-rate rate Set the video bit rate for the video, in megabits per second. The default value is 20Mbps. You can increase the bit rate to improve video quality, but doing so results in larger movie files. The following example sets the recording bit rate to 6Mbps:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4
--time-limit time Set the maximum recording time, in seconds. The default and maximum value is 180 (3 minutes).
--rotate Rotate the output 90 degrees. This feature is experimental.
--verbose Display log information on the command-line screen. If you do not set this option, the utility does not display any information while running.

Read ART profiles for apps

Starting in Android 7.0 (API level 24), the Android Runtime (ART) collects execution profiles for installed apps, which are used to optimize app performance. Examine the collected profiles to understand which methods are executed frequently and which classes are used during app startup.

Note: It is only possible to retrieve the execution profile filename if you have root access to the file system, for example, on an emulator.

To produce a text form of the profile information, use the following command:

adb shell cmd package dump-profiles package

To retrieve the file produced, use:

adb pull /data/misc/profman/package.prof.txt

Reset test devices

If you test your app across multiple test devices, it may be useful to reset your device between tests, for example, to remove user data and reset the test environment. You can perform a factory reset of a test device running Android 10 (API level 29) or higher using the testharness adb shell command, as shown:

adb shell cmd testharness enable

When restoring the device using testharness , the device automatically backs up the RSA key that allows debugging through the current workstation in a persistent location. That is, after the device is reset, the workstation can continue to debug and issue adb commands to the device without manually registering a new key.

Additionally, to help make it easier and more secure to keep testing your app, using the testharness to restore a device also changes the following device settings:

  • The device sets up certain system settings so that initial device setup wizards do not appear. That is, the device enters a state from which you can quickly install, debug, and test your app.
  • تنظیمات:
    • Disables lock screen.
    • Disables emergency alerts.
    • Disables auto-sync for accounts.
    • Disables automatic system updates.
  • دیگر:
    • Disables preinstalled security apps.

If your app needs to detect and adapt to the default settings of the testharness command, use the ActivityManager.isRunningInUserTestHarness() .

sqlite

sqlite3 starts the sqlite command-line program for examining SQLite databases. It includes commands such as .dump to print the contents of a table and .schema to print the SQL CREATE statement for an existing table. You can also execute SQLite commands from the command line, as shown:

$ adb -s emulator-5554 shell
$ sqlite3 /data/data/com.example.app/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions

Note: It is only possible to access a SQLite database if you have root access to the file system, for example, on an emulator.

For more information, see the sqlite3 command line documentation .

adb USB backends

The adb server can interact with the USB stack through two backends. It can either use the native backend of the OS (Windows, Linux, or macOS) or it can use the libusb backend. Some features, such as attach , detach , and USB speed detection, are only available when using libusb backend.

You can choose a backend by using the ADB_LIBUSB environment variable. If it isn't set, adb uses its default backend. The default behavior varies among OS. Starting with ADB v34 , the liubusb backend is used by default on all OS except Windows, where the native backend is used by default. If ADB_LIBUSB is set, it determines whether the native backend or libusb is used. See the adb manual page for more information about adb environment variables.

adb mDNS backends

ADB can use the multicast DNS protocol to automatically connect the server and devices. The ADB server ships with two backends, Bonjour (Apple's mdnsResponder) and Openscreen.

The Bonjour backend needs a daemon to be running on the host machine. On macOS Apple's built-in daemon is always running, but on Windows and Linux, the user must make sure the mdnsd daemon is up and running. If the command adb mdns check returns an error, it is likely that ADB is using the Bonjour backend but there is no Bonjour daemon running.

The Openscreen backend does not need a daemon to be running on the machine. Support for the Openscreen backend on macOS starts at ADB v35. Windows and Linux are supported as of ADB v34.

By default ADB uses the Bonjour backend. This behavior can be changed using the environment variable ADB_MDNS_OPENSCREEN (set to 1 or 0 ). See the ADB manual page for further details.

adb Burst Mode (starting with ADB 36.0.0)

Burst Mode is an experimental feature that lets ADB to keep on sending packets to a device even before the device has responded to the previous packet. This greatly increases the throughput of ADB when transferring large files and also reduces latency while debugging.

Burst Mode is disabled by default. To enable the feature, do one of the following:

  • Set the environment variable ADB_BURST_MODE to 1 .
  • In Android Studio, go to the debugger settings at File (or Android Studio on macOS) > Settings > Build, Execution, Deployment > Debugger and set ADB Server Burst Mode to Enabled .