پل اشکالزدایی اندروید ( 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 یا یک کد جفتسازی به ایستگاه کاری خود جفت کنید. ایستگاه کاری و دستگاه شما باید به یک شبکه بیسیم یکسان متصل باشند. برای اتصال به دستگاه خود، این مراحل را دنبال کنید:
اندروید استودیو را باز کنید و از منوی تنظیمات اجرا، گزینه Pair Devices Using Wi-Fi را انتخاب کنید.
شکل ۱. منوی تنظیمات را اجرا کنید.پنجره جفتسازی دستگاهها از طریق وایفای ، همانطور که در شکل ۲ نشان داده شده است، ظاهر میشود.
شکل ۲. پنجره بازشو برای جفت کردن دستگاهها با استفاده از کد QR یا کد جفتسازی.در دستگاه خود، روی اشکالزدایی بیسیم (Wireless debugging) ضربه بزنید و دستگاه خود را جفت کنید:
شکل ۳. تصویر صفحه تنظیمات اشکالزدایی بیسیم در گوشی گوگل پیکسل.برای جفت کردن دستگاه خود با کد QR، گزینه جفت کردن دستگاه با کد QR را انتخاب کنید و کد QR دریافت شده از پنجره Pair devices over Wi-Fi که در شکل 2 نشان داده شده است را اسکن کنید.
برای جفت کردن دستگاه خود با کد جفتسازی، از پنجرهی بازشو «جفت کردن دستگاهها از طریق وایفای» گزینهی «جفت کردن دستگاه با کد جفتسازی» را انتخاب کنید. در دستگاه خود، «جفت کردن با استفاده از کد جفتسازی» را انتخاب کنید و کد شش رقمی ارائه شده را یادداشت کنید. پس از نمایش دستگاه شما در پنجرهی «جفت کردن دستگاهها از طریق وایفای» ، میتوانید «جفت کردن» را انتخاب کرده و کد شش رقمی نشان داده شده در دستگاه خود را وارد کنید.
شکل ۴. نمونهای از ورود کد شش رقمی.
پس از جفت شدن دستگاه، میتوانید برنامه خود را روی دستگاهتان نصب کنید.
برای جفت کردن یک دستگاه دیگر یا فراموش کردن دستگاه فعلی روی ایستگاه کاری خود، به بخش اشکالزدایی بیسیم (Wireless debugging) در دستگاه خود بروید. روی نام ایستگاه کاری خود در زیر دستگاههای جفتشده (Paired devices) ضربه بزنید و فراموش کردن (Forget) را انتخاب کنید.
اگر میخواهید اشکالزدایی بیسیم را به سرعت روشن و خاموش کنید، میتوانید از کاشیهای توسعهدهنده تنظیمات سریع برای اشکالزدایی بیسیم ، که در گزینههای توسعهدهنده > کاشیهای توسعهدهنده تنظیمات سریع موجود است، استفاده کنید.
شکل 5. تنظیمات سریع کاشیهای توسعهدهنده به شما امکان میدهد اشکالزدایی بیسیم را به سرعت روشن و خاموش کنید.
اتصال وایفای با استفاده از خط فرمان
روش دیگر، برای اتصال به دستگاه خود با استفاده از خط فرمان بدون اندروید استودیو، این مراحل را دنبال کنید:
همانطور که قبلاً توضیح داده شد، گزینههای توسعهدهنده را در دستگاه خود فعال کنید.
همانطور که قبلاً توضیح داده شد، اشکالزدایی بیسیم را در دستگاه خود فعال کنید.
در سیستم عامل خود، یک پنجره ترمینال باز کنید و به
android_sdk/platform-toolsبروید.با انتخاب گزینه جفتسازی دستگاه با کد جفتسازی، آدرس IP، شماره پورت و کد جفتسازی خود را پیدا کنید. به آدرس IP، شماره پورت و کد جفتسازی نمایش داده شده روی دستگاه توجه کنید.
در ترمینال کامپیوتر خود،
adb pair ipaddr:portرا اجرا کنید. از آدرس IP و شماره پورت بالا استفاده کنید.وقتی از شما خواسته شد، کد جفتسازی را مطابق شکل زیر وارد کنید.
شکل ۶. پیامی نشان میدهد که دستگاه شما با موفقیت جفت شده است.
حل مشکلات اتصال بیسیم
اگر در اتصال بیسیم به دستگاه خود مشکل دارید، مراحل عیبیابی زیر را برای حل مشکل امتحان کنید.
بررسی کنید که آیا ایستگاه کاری و دستگاه شما پیشنیازها را برآورده میکنند یا خیر
بررسی کنید که ایستگاه کاری و دستگاه، پیشنیازهای ذکر شده در ابتدای این بخش را برآورده کنند.
سایر مشکلات شناخته شده را بررسی کنید
در زیر لیستی از مشکلات شناخته شده فعلی در مورد اشکال زدایی بی سیم (با adb یا Android Studio) و نحوه حل آنها آمده است:
وایفای متصل نمیشود : شبکههای وایفای امن، مانند شبکههای وایفای شرکتی، ممکن است اتصالات p2p را مسدود کنند و به شما اجازه اتصال از طریق وایفای را ندهند. سعی کنید با کابل یا شبکه وایفای دیگری (غیر شرکتی) متصل شوید. اتصال بیسیم با استفاده از
adb connect ip : portover 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 دنبال کنید:
- دستگاه اندروید و کامپیوتر میزبان
adbخود را به یک شبکه وایفای مشترک وصل کنید. - دستگاه را با کابل USB به کامپیوتر میزبان وصل کنید.
- دستگاه هدف را طوری تنظیم کنید که به اتصال TCP/IP روی پورت ۵۵۵۵ گوش دهد:
adb tcpip 5555
- کابل USB را از دستگاه هدف جدا کنید.
- آدرس IP دستگاه اندروید را پیدا کنید. برای مثال، در یک دستگاه Nexus، میتوانید آدرس IP را در تنظیمات > درباره تبلت (یا درباره تلفن ) > وضعیت > آدرس IP پیدا کنید.
- با استفاده از آدرس IP به دستگاه متصل شوید:
adb connect device_ip_address:5555
- تأیید کنید که رایانه میزبان شما به دستگاه هدف متصل است:
$ adb devices List of devices attached device_ip_address:5555 device
توجه: توجه داشته باشید که همه نقاط دسترسی مناسب نیستند. ممکن است لازم باشد از نقطه دسترسی استفاده کنید که فایروال آن به درستی پیکربندی شده باشد تا از adb پشتیبانی کند.
دستگاه شما اکنون به 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 باید دستگاه هدف را مشخص کنید. برای مشخص کردن دستگاه هدف، این مراحل را دنبال کنید:
- برای دریافت شماره سریال دستگاه هدف، از دستور
devicesاستفاده کنید. - وقتی شماره سریال را دارید، از گزینه
-sبه همراه دستوراتadbبرای مشخص کردن شماره سریال استفاده کنید.- اگر قصد دارید دستورات
adbزیادی صادر کنید، میتوانید متغیر محیطی$ANDROID_SERIALرا طوری تنظیم کنید که به جای آن، شماره سریال را در خود جای دهد. - اگر از هر دو گزینه
-sو$ANDROID_SERIALاستفاده کنید،-sجایگزین$ANDROID_SERIALمیشود.
- اگر قصد دارید دستورات
در مثال زیر، لیست دستگاههای متصل به سیستم به دست میآید و سپس از شماره سریال یکی از دستگاهها برای نصب helloWorld.apk روی آن دستگاه استفاده میشود:
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
توجه: اگر در حالی که چندین دستگاه در دسترس هستند، دستوری را بدون مشخص کردن دستگاه هدف صادر کنید، adb خطای "adb: 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 به مشخصات مراجعه کنید. گزینهها عبارتند از:
|
startservice [ options ] intent | Service مشخص شده توسط intent را شروع کنید.برای آرگومانهای intent به مشخصات مراجعه کنید. گزینهها عبارتند از:
|
force-stop package | هر چیزی که مربوط به package باشد را به اجبار متوقف کنید. |
kill [ options ] package | تمام فرآیندهای مرتبط با package را از بین میبرد. این دستور فقط فرآیندهایی را از بین میبرد که از بین بردن آنها بیخطر است و تاثیری بر تجربه کاربری ندارند.گزینهها عبارتند از:
|
kill-all | تمام فرآیندهای پسزمینه را متوقف کنید. |
broadcast [ options ] intent | یک قصد پخش (broadcast intent) صادر کنید. برای آرگومانهای intent به مشخصات مراجعه کنید. گزینهها عبارتند از:
|
instrument [ options ] component | نظارت را با یک نمونه Instrumentation شروع کنید. معمولاً component هدف، فرم test_package / runner_class است.گزینهها عبارتند از:
|
profile start process file | پروفایلر را روی process اجرا کن، نتایج را در file بنویس. |
profile stop process | پروفایلر را در process متوقف کنید. |
dumpheap [ options ] process file | توده process را خالی کن، در file بنویس.گزینهها عبارتند از:
|
dumpbitmaps [ options ] [-p process ] | اطلاعات بیتمپ را از process (سطح API ۳۶ و بالاتر) حذف کنید.گزینهها عبارتند از:
process مشخص نشده باشد، بیتمپهای تمام فرآیندها حذف خواهند شد. |
set-debug-app [ options ] package | package برنامه را روی اشکالزدایی تنظیم کنید.گزینهها عبارتند از:
|
clear-debug-app | پاک کردن تنظیمات قبلی بسته برای اشکالزدایی با set-debug-app . |
monitor [ options ] | نظارت بر خرابیها یا ANRها را شروع کنید. گزینهها عبارتند از:
|
screen-compat {on | off} package | حالت سازگاری صفحه نمایش package را کنترل کنید. |
display-size [reset | width x height ] | نادیده گرفتن اندازه صفحه نمایش دستگاه. این دستور برای آزمایش برنامه شما در اندازههای مختلف صفحه نمایش با تقلید از وضوح صفحه نمایش کوچک با استفاده از دستگاهی با صفحه نمایش بزرگ و برعکس مفید است. مثال: |
display-density dpi | تراکم نمایشگر دستگاه را نادیده بگیرید. این دستور برای آزمایش برنامه شما در تراکمهای مختلف صفحه نمایش با تقلید از یک محیط صفحه نمایش با تراکم بالا با استفاده از یک صفحه نمایش با تراکم پایین و برعکس مفید است. مثال: |
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 است.گزینهها:
|
list permission-groups | تمام گروههای مجوز شناختهشده را چاپ کن. |
list permissions [ options ] group | تمام مجوزهای شناختهشده، و در صورت تمایل فقط مجوزهای group را چاپ کن.گزینهها:
|
list instrumentation [ options ] | تمام بستههای آزمایشی را فهرست کنید. گزینهها:
|
list features | تمام ویژگیهای سیستم را چاپ کنید. |
list libraries | تمام کتابخانههای پشتیبانیشده توسط دستگاه فعلی را چاپ کن. |
list users | تمام کاربران سیستم را چاپ کنید. |
path package | مسیر APK package داده شده را چاپ کن. |
install [ options ] path | یک بسته، که توسط path مشخص شده است، را روی سیستم نصب میکند.گزینهها:
|
uninstall [ options ] package | یک بسته را از سیستم حذف میکند. گزینهها:
|
clear package | تمام دادههای مرتبط با یک بسته را حذف کنید. |
enable package_or_component | بسته یا کامپوننت داده شده را فعال کنید (که به صورت "package/class" نوشته میشود). |
disable package_or_component | بسته یا کامپوننت داده شده را غیرفعال کنید (به صورت "package/class" نوشته میشود). |
disable-user [ options ] package_or_component | گزینهها:
|
grant package_name permission | اعطای مجوز به یک برنامه. در دستگاههایی که اندروید ۶.۰ (سطح API ۲۳) و بالاتر را اجرا میکنند، مجوز میتواند هر مجوزی باشد که در مانیفست برنامه اعلام شده است. در دستگاههایی که اندروید ۵.۱ (سطح API ۲۲) و پایینتر را اجرا میکنند، باید یک مجوز اختیاری باشد که توسط برنامه تعریف شده است. |
revoke package_name permission | لغو مجوز از یک برنامه. در دستگاههایی که اندروید ۶.۰ (سطح API ۲۳) و بالاتر را اجرا میکنند، مجوز میتواند هر مجوزی باشد که در مانیفست برنامه اعلام شده است. در دستگاههایی که اندروید ۵.۱ (سطح API ۲۲) و پایینتر را اجرا میکنند، باید یک مجوز اختیاری باشد که توسط برنامه تعریف شده است. |
set-install-location location | تغییر محل نصب پیشفرض. مقادیر محل نصب:
توجه: این فقط برای اشکالزدایی در نظر گرفته شده است. استفاده از آن میتواند باعث خرابی برنامهها و سایر رفتارهای نامطلوب شود. |
get-install-location | محل نصب فعلی را برمیگرداند. مقادیر برگشتی:
|
set-permission-enforced permission [true | false] | مشخص کنید که آیا مجوز داده شده باید اجرا شود یا خیر. |
trim-caches desired_free_space | فایلهای کش را برش دهید تا به فضای خالی داده شده برسید. |
create-user user_name | یک کاربر جدید با user_name داده شده ایجاد میکند و شناسه کاربر جدید را چاپ میکند. |
remove-user user_id | کاربر را با user_id داده شده حذف میکند و تمام دادههای مرتبط با آن کاربر را حذف میکند. |
get-max-users | حداکثر تعداد کاربران پشتیبانی شده توسط دستگاه را چاپ کنید. |
get-app-links [ options ] [ package ] | وضعیت تأیید دامنه را برای package داده شده یا در صورت عدم تعیین هیچ موردی برای همه بستهها چاپ کنید. کدهای وضعیت به شرح زیر تعریف میشوند:
گزینهها عبارتند از:
|
reset-app-links [ options ] [ package ] | Reset domain verification state for the given package, or for all packages if none is specified.
Options are:
|
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.
|
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.
|
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.
|
set-app-links-allowed --user user_id [--package package ] allowed | Toggle the auto-verified link-handling setting for a package.
|
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.
|
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:
|
set-profile-owner [ options ] component | Set component as active admin and its package as profile owner for an existing user. Options are:
|
set-device-owner [ options ] component | Set component as active admin and its package as device owner. Options are:
|
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:
|
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_MODEto1. - 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 .