Поради та підказки ADB: команди, про які повинен знати кожен досвідчений користувач

У Android Debug Bridge є багато такого, про що ви можете не знати. Натисніть тут, щоб отримати корисні поради та підказки щодо використання ADB!

Швидкі посилання

  • Доступ до оболонки
  • Підключення до кількох пристроїв
  • Передача файлів
  • Лісозаготівля
  • Перелік встановлених програм через ADB
  • Встановлення та видалення програм через ADB
  • Розпакування APK за допомогою ADB
  • Резервне копіювання та відновлення даних програми
  • Перелік компонентів програми
  • Запуск заходів, послуг і приймачів мовлення
  • Вимкнення та ввімкнення майже будь-якої програми
  • Створення скріншотів
  • Передача двійкових даних між ПК і пристроєм Android

Якщо ви були ентузіастом Android, який ховається на сцені моддингу, або розробником додатків протягом будь-якої тривалості рано чи пізно ви натрапите на чудовий інструмент під назвою Android Debug Bridge або ADB для короткий. Він широко використовується в Android Studio як допоміжна утиліта командного рядка. Розробники Android також використовують його як окреме рішення для ручного встановлення та тестування програм Android смартфони а також емульовані пристрої Android.

Але ADB може багато чого зробити, і більшість із них корисні не лише розробникам. Навіть якщо ви не розробник і читаєте цю статтю, є хороший шанс, що ви, напевно, використовували ADB раз чи двічі, щоб стороннє завантаження програми або налаштувати дозвіл. Але це ще не все, для чого можна використовувати ADB. Продовжуйте читати, щоб отримати поради та підказки щодо використання ADB, про які ви могли не знати.

На вашому комп’ютері потрібно встановити та запустити ADB. Обов’язково ознайомтеся з нашою статтею про як встановити ADB якщо вам потрібна допомога. Якщо ви використовуєте Windows, вам також потрібно інсталюйте відповідні USB-драйвери OEM для вашого пристрою Android.

Доступ до оболонки

Якщо ви раніше користувалися ADB, можливо, ви звикли виконувати всі команди в одному рядку. Але ви також можете використовувати ADB, щоб відкрити оболонку терміналу на своєму пристрої та запускати команди безпосередньо. І це легко!

У вікні терміналу або командного рядка:

adb shell

Потім вас привітає a $ символ, де можна запускати команди безпосередньо на своєму пристрої.

Підключення до кількох пристроїв

ADB може спілкуватися з кількома пристроями одночасно. Однак ви повинні вказати цільовий пристрій під час видачі команд ADB у таких сценаріях.

Для цього вам потрібно знати серійний номер цільового пристрою. Ви можете отримати серійний номер за допомогою команди devices:

adb devices

Тепер використовуйте -s параметр для вказівки серійного номера цільового пристрою. приклад:

adb -s <serialnumber> shell

Передача файлів

Для любителів командного рядка ADB надає дуже простий спосіб передачі файлів на пристрій Android і з нього. Просто використовуйте pull команда для копіювання файлів і каталогів із пристрою та push команда для копіювання файлів і каталогів на пристрій:

Якщо ви хочете скопіювати файл або каталог із його підкаталогами на пристрій Android:

adb push local_path device_path
  • приклад: adb push D:\image.png /sdcard

Наступна команда скопіює файл або каталог із підкаталогами з пристрою Android на головний ПК:

adb pull device_path local_path
  • приклад: adb pull /sdcard/backup_April.tar D:\Backup

Лісозаготівля

Android Studio надає Вікно Logcat, який підтримує відображення журналів з вашого пристрою в реальному часі. Однак це не зовсім корисно для пакетної обробки. На щастя, Android-пристрої постачаються з командою logcat, доступною через ADB, яку можна використовувати для скидання системних і програмних повідомлень журналу та друку їх на екрані.

Основний синтаксис такий:

adb logcat

Щоб дізнатися більше, перегляньте наш підручник із як отримати системні logcats, журнали ядра та dmesg на Android.

Великодні яйця

Google пропонує дві чудові пасхальні яйця, пов’язані з командою logcat.

  1. Перший — lolcat, кивок на Мем LOLcat. Він дає той самий результат, що й звичайна команда logcat.
    adb lolcat
  2. Другий — longcat, який еквівалентний команді logcat -v long. Він відображає всі поля метаданих і окремі повідомлення з порожнім рядком.
    adb longcat

Перелік встановлених програм через ADB

Щоб переглянути встановлені програми на вашому пристрої, ви можете скористатися такою командою:

adb shell pm list packages

Це поверне список імен пакетів встановлених програм, у кожному з яких стоїть окремий рядок package:.

Опції

Є також деякі параметри, які можна використовувати для отримання більш конкретних списків.

  • -f міститиме шлях до базового APK для кожної програми разом із назвою її пакета.
  • переконається, що всі відомі пакунки, відмінні від APEX, повернуто.
  • призведе до того, що команда повертатиме лише вимкнені пакунки.
  • призведе до того, що команда повертатиме лише активовані пакети.
  • -s призведе до того, що команда повертатиме лише системні пакунки.
  • -3 призведе до того, що команда повертатиме лише пакети сторонніх розробників.
  • міститиме назву пакета інсталятора для кожного пакета.
  • міститиме UID пакета для кожного пакета.
  • включатиме невстановлені пакунки.
  • --show-versioncode міститиме код версії для кожного пакета.
  • --лише верхівка повертатиме лише пакети APEX.
  • --uid відображатиме лише пакети з заданим UID.
  • --користувач відображатиме лише пакети, що належать даному ідентифікатору користувача.

Встановлення та видалення програм через ADB

Це відносно поширене використання ADB, але все одно варто згадати про це. Крім інших способів, ви також можете використовувати ADB для встановлювати та видаляти програми Android на пристрій Android.

Встановлення APK

Якщо у вас на комп’ютері є файл APK, ви можете встановити його на свій пристрій за допомогою:

adbinstall-rsomeapk.apk

Не забудьте замінити someapk.apk із повним шляхом до файлу .apk, який потрібно встановити.

Опції

Є купа варіантів встановлення APK через ADB.

  • The дозволяє ADB інсталювати поверх існуючої програми (тобто оновлювати). В Android Pie і новіших версіях вам не потрібно вказувати цей параметр.
  • The варіант для Android Pie і пізніших спричинить помилку встановлення, якщо програму вже встановлено.
  • The параметр дозволяє вказати назву пакета інсталятора. Це те, що повертається, якщо Android хоче знати, що встановило APK.
  • The параметр дозволяє APK з android: testOnly="true" у своєму маніфесті, який потрібно встановити.
  • The Параметр дозволяє вказаному файлу .apk повернутися до вже встановленої програми. Це працює, лише якщо обидві версії програми можна налагодити.
  • The -g опція для Android Marshmallow, а пізніше автоматично надає всі дозволи на виконання для встановленої програми.

Це ще не всі. Якщо вам потрібен повний список, ви можете переглянути вбудовану документацію.

Кілька файлів APK і пакетів

Якщо у вас є купа файлів .apk, які ви хочете встановити одночасно, або з кількох програм, або через те, що ви встановлюєте пакет програм, ви можете використовувати ADB install-multiple і install-multi-package особливості.

Якщо всі ваші файли .apk для однієї програми, використовуйте install-multiple:

adbinstall-multipleapk1.apkapk2.apk ...

В іншому випадку використовуйте install-multi-package:

adbinstall-multi-packageapp1.apkapp2.apk ...

Параметри цих команд подібні до install, але з деякими обмеженнями. Перегляньте вбудовану документацію ADB щодо доступних варіантів.

Видалення програми

Щоб видалити за допомогою ADB, вам знадобиться назва пакета програми, яку ви хочете видалити. Перегляньте розділ для Список встановлених програм якщо ви ще цього не зробили.

Отримавши назву пакета, видалити його можна так просто:

adb uninstall <packagename>

Зазвичай ви не можете видалити системні або попередньо встановлені програми за допомогою цієї команди. Однак ви можете вимкнути їх за допомогою ADB. Перегляньте розділ Вимкнення та ввімкнення майже будь-якої програми для деталей.

Розпакування APK за допомогою ADB

Є багато причин, чому ви можете витягнути файли .apk для програми. Можливо, ви хочете створити його резервну копію для подальшого використання, або, можливо, він більше не доступний в Інтернеті, і ви хочете перенести його на інший пристрій.

Розпакувати програму за допомогою ADB досить просто. По-перше, ви захочете знайти назву пакета програми, яку ви хочете розпакувати. Існує кілька способів зробити це, але найпростішим є використання програми «Налаштування» вашого пристрою для перегляду список усіх встановлених програм, виберіть потрібну та прокрутіть вниз, доки не знайдете назву пакета або програми ID.

Отримавши назву пакета, виконайте таку команду:

adb shell pm path <packagename>

Ця команда поверне шлях до всіх файлів APK для цієї назви пакета.

Потім ви можете використати наведену нижче команду, щоб завантажити кожен APK на свій комп’ютер:

adb pull /path/to/apk.apk

Резервне копіювання та відновлення даних програми

Хоча Google ще не розробив методологію резервного копіювання в один клік у стилі iOS, ви можете використовувати ADB для резервного копіювання та відновлення встановлених програм разом із їхніми даними. Однак функціональність далека від досконалості, і Google уже є позначив функцію як застарілу.

Резервне копіювання

Щоб створити резервну копію однієї програми з її APK:

adb backup -apk <packagename> -f package_name_backup.ab

Якщо ви хочете створити резервну копію всіх даних програми одночасно:

adb backup -f all -all -apk -nosystem

Оскільки модуль відновлення не може виконувати відновлення окремої програми, краще створити резервні копії окремого пакета. Цей фрагмент команди (сумісний із Linux/macOS і підсистемою Windows для Linux) може зробити це за вас:

for APP in $(adb shell pm list packages -3)
do
APP=$( echo${APP} | sed "s/^package://")
adb backup -f ${APP}.backup ${APP}
done

Відновлення

Спочатку вам потрібно встановити збережений APK;

adb install <packagename>.apk

Потім ви можете відновити його дані:

adbrestorepackage_name_backup.ab

Повторюємо, функції резервного копіювання та відновлення ADB мають кілька застережень, включаючи змінні результати залежно від ПЗУ

Перелік компонентів програми

Компонентами програми є її дії, приймачі трансляції, служби тощо. Іноді корисно знати назви цих компонентів у певній програмі, особливо якщо ви хочете запустити приховані дії або надіслати трансляцію з певними даними.

На жаль, ADB не має чіткого способу переліку компонентів програми. Але це можливо. Виконайте таку команду:

adb shell dumpsys package

Повернеться ціла купа тексту.

  • Прокручуйте, доки не знайдете Таблиця вирішувачів активності назву, щоб переглянути дії.
  • Подивіться вниз Таблиця резольвера приймача для BroadcastReceivers.
  • Перевірте Таблиця розв’язувачів послуг для послуг.
  • І так далі.

Кожен компонент покаже дію, необхідну для його запуску, назву компонента та, можливо, додаткову інформацію.

Крім того, якщо вам потрібен простий спосіб перегляду дій, служб і приймачів, ви можете скористатися програмою Root Activity Launcher від визнаного розробника XDA Захарій1. Він покаже вам ці компоненти для кожної програми разом із купою інших зручних функцій.

Коренева програма запуску активностіРозробник: Захарі Вандер

Ціна: 0,99 грн.

Завантажити

Запуск заходів, послуг і приймачів мовлення

ADB також можна використовувати для запуску дій, запуску служб і сповіщення BroadcastReceivers. За потреби можна навіть вказати URI даних і додаткові функції Intent.

Щоб запустити компоненти, вам знадобиться назва компонента, який ви хочете запустити. Ви можете побачити, як отримати це з Перелік компонентів програми розділ.

Синтаксис команди для запуску Activity виглядає приблизно так:

am start -a <action> -n <component>

Синтаксис команди для запуску служби приблизно такий:

am startservice -a <action> -n <component>

Синтаксис команди для сповіщення BroadcastReceiver приблизно такий:

am broadcast -a <action> -n <component>

У більшості випадків для дій і служб вам не потрібно явно вказувати дію. Зазвичай він знадобиться, лише якщо компонент використовує інше, ніж android.intent.action. ГОЛОВНА.

Крім основного синтаксису, ось як вказати більше даних для передачі. Загалом усі значення даних слід брати в подвійні лапки.

  • дозволяє вказати URI даних.
  • або --es дозволяє вказати додатковий рядок.
  • --esn дозволяє вказати додатковий нульовий рядок.
  • --ез використовується для визначення логічного додаткового.
  • --ei використовується для визначення додаткового цілого числа.
  • --ел призначений для вказівки довгого додаткового.
  • --еф передасть float extra.
  • --ЄС передає додатковий URI.
  • --ecn можна використовувати для визначення додаткового імені компонента.
  • --eia ,,... передасть значення як додатковий Integer[].
  • --eial ,,... передасть значення як список.
  • Ті самі аргументи масиву та списку також працюють для довгих, плаваючих і рядкових. Просто замініть i з відповідним листом.
  • -f дозволяє вказати прапор.

Існує ще більше параметрів поведінки, які можна використовувати, тому ознайомтеся з вбудованою документацією, щоб дізнатися більше.

Вимкнення та ввімкнення майже будь-якої програми

Системні програми в Android не можна видалити, і, на жаль, багато з них також не можна вимкнути в налаштуваннях. Хоча ADB не дозволить вам видалити їх, це може допомогти вам їх вимкнути.

Спочатку переконайтеся, що отримали назву пакета програми, яку потрібно вимкнути. Потім спробуйте ці команди. Якщо один не вдається, спробуйте наступний варіант.

  • вечора відключити
    • Щоб повторно ввімкнути, скористайтеся pm увімкнути
  • pm disable-user --user 0
    • Щоб повторно ввімкнути, скористайтеся pm увімкнути
  • pm приховати
    • Щоб повторно ввімкнути, скористайтеся pm показати
  • вечора призупинити
    • Щоб повторно ввімкнути, скористайтеся вечора скасувати призупинення
  • pm uninstall -k --user 0
    • Щоб повторно ввімкнути, скористайтеся pm встановити існуючий
      • Це фактично видаляє програму з вашого профілю користувача. Поки команда для повторного включення повинен працювати, немає гарантії, що це буде. Можливо, вам знадобиться скинути заводські налаштування, щоб відновити програму.
      • Якщо ви використовуєте кілька профілів користувачів на своєму пристрої, обов’язково замініть 0 у наведених вище командах фактичним ідентифікатором користувача, який у вас є.

Щоб дізнатися більше, ознайомтеся з нашим підручником як видалити розповсюджене програмне забезпечення оператора та OEM без доступу root.

Створення скріншотів

Більшість ПЗУ Android пропонують дві зручні утиліти оболонки — screencap і screenrecord — для створення скріншотів і запису дій на екрані відповідно. Ви можете викликати їх безпосередньо з оболонки ADB, щоб зробити статичний знімок екрана або фрагмент відео з екрана телефону та зберегти його безпосередньо у внутрішній пам’яті пристрою.

Синтаксис для створення знімка екрана досить простий:

adb shell screencap /sdcard/screenshot.png

Подібним чином, якщо вам потрібно зробити динамічний знімок екрана, виконайте такі дії:

adb shell screenrecord /sdcard/recording.mp4

Як і слід було очікувати, інструмент створення екрану досить простий, тоді як утиліта screenrecord пропонує кілька параметрів. Варіанти останнього наступні:

  • --розмір WIDTHxHEIGHT
    • Встановіть роздільну здатність відеофайлу (наприклад, «1280x720»). За замовчуванням він намагається прийняти роздільну здатність основного дисплея цільового пристрою (якщо підтримується) і повертається до 1280x720, якщо ні.
  • --бітрейт RATE
    • Встановіть бітрейт відео в бітах на секунду. Значення може бути вказано у бітах або мегабітах, напр. «4000000» еквівалентно «4M».
  • --повідомлення про помилку
    • Ви можете додати додаткову інформацію, таку як накладання позначки часу, яка може бути корисною для ілюстрації помилок.
  • --time-limit ЧАС
    • Встановіть максимальний час запису в секундах. За замовчуванням / максимум 180.
  • --display-id ID
    • Укажіть ідентифікатор фізичного дисплея для запису. За замовчуванням встановлено основний дисплей. Перегляньте "dumpsys SurfaceFlinger --display-id", щоб дізнатися про дійсні ідентифікатори дисплея.
  • -- багатослівний
    • Відображення докладної інформації про сеанс запису.

Ви можете ще більше розширити можливості вбудованих утиліт Android для захоплення екрана scrcpy. Це рішення для віддзеркалення екрана з відкритим кодом, яке використовує потужність ADB.

Передача двійкових даних між ПК і пристроєм Android

Якщо ви не хочете створювати повноцінну оболонку ADB, але бажаєте інтегрувати спрощену передачу двійкових даних між головним ПК і цільовим пристроєм Android, ви можете скористатися exec-in і exec-out команди.

Незважаючи на їх тривале існування, команди exec-in і exec-out досі не задокументовані. Вони можуть призвести до пошкодження файлів через те, як різні оболонки обробляють вхідні та вихідні дані. Використовуйте з обережністю.

Перший допомагає вам виконати команду на Android і подати нефільтрований вхід консолі як її параметр, тоді як другий робить прямо протилежне, тобто виконує команду на Android і захоплює її невідфільтрований двійковий вихід головною ОС.

приклад:

adb exec-out "screencap -p" > "D:\screenshot.png"

Це буде використовувати screencap команду Android, щоб зробити знімок екрана дисплея телефону, але безпосередньо зберігає його як screenshot.png у розділі D: головного ПК (за умови, що він працює під керуванням Windows). З іншого боку,

adb exec-in"cd /sdcard && tar -xf -" < "D:\backup.tar"

Це призведе до вилучення вмісту файлу backup.tar, який зберігається в розділі D: головного ПК (під керуванням Windows) у корені внутрішньої пам’яті пристрою Android.


ADB є неймовірно потужним інструментом, і він може робити набагато більше, ніж просто те, що описано вище. Команди в цій статті є лише корисною відправною точкою. Для більш розширеного використання перегляньте такі команди, як cmd -l щоб побачити різні служби, з якими ви могли б взаємодіяти, і ls -l /system/bin щоб побачити різні виконувані файли команд, доступні у вашому Android ROM.

Щоб дізнатися про інші подорожі та позначки Android, перегляньте наші путівники на як рутувати ваш смартфон Android, як встановити TWRP recovery, і як встановити спеціальну ПЗУ на свій пристрій Android.