Использование am через adb shell: кратко и на практике
Команда am позволяет запускать активности, сервисы и отправлять интенты прямо из adb shell — достаточно подключить устройство (adb devices), выполнить adb shell и использовать am start, am broadcast, am startservice и т.д. Ниже — компактное практическое руководство с командами и трюками.
Подготовка и базовый синтаксис
- Включите USB‑отладку в настройках разработчика и подключите устройство:
- Проверка:
adb devices - Войти в shell:
adb shell
- Проверка:
- Общий формат:
am <команда> [параметры]
Основные команды:start,startservice,broadcast,force-stop,kill,dumpheap.
Пример простого запуска activity:
adb shell am start -n com.android.settings/.Settings
-n package/activity— явно указывает компонент.-a— action,-d— data (URI),-t— MIME,--es/--ei— extras (строка/инт).
Тестируйте команды сначала на эмуляторе AVD: не придется восстанавливать разрешения или рисковать данными.
Запуск активностей, интентов и сервисов (примеры)
- Запуск главного экрана приложения:
adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n com.example.app/.MainActivity
- Открыть URL в браузере:
adb shell am start -a android.intent.action.VIEW -d "https://example.com"
- Передать extra:
adb shell am start -a android.intent.action.SEND -t "text/plain" --es "android.intent.extra.TEXT" "Пример"
- Запуск сервиса:
adb shell am startservice -n com.example/.MyService
adb shell am stopservice -n com.example/.MyService
- Отправка broadcast:
adb shell am broadcast -a com.example.ACTION_TEST --es message "Hello"
Работа с пользователями и флагами
- Выполнить для конкретного пользователя:
--user 0 - Запуск без добавления в историю: добавить флаг
-f 0x20000000
Продвинутые команды, отладка и трюки
- Принудительная остановка приложения:
adb shell am force-stop com.example.app
- Убить процесс:
adb shell am kill com.example.app
- Дамп кучи:
adb shell am dumpheap com.example.app /sdcard/app_heap.hprof
- Логи ActivityManager:
adb logcat ActivityManager:I *:S
- Скрипт автоматизации (пример .sh):
#!/system/bin/sh
am start -n com.android.camera/.Camera
sleep 2
input keyevent 26
Сравнение ключевых опций am
| Опция | Что делает | Пример |
|---|---|---|
| start | Запускает activity | am start -n pkg/.Activity |
| startservice | Запускает сервис | am startservice -n pkg/.Service |
| broadcast | Отправляет интент | am broadcast -a ACTION |
| force-stop | Принудительно останавливает app | am force-stop pkg |
| kill | Завершает процесс | am kill pkg |
| dumpheap | Снимает дамп памяти | am dumpheap pkg /sdcard/heap.hprof |
На Android 12+ некоторые команды ограничены политиками безопасности. Для операций с системными/чувствительными приложениями могут потребоваться root-права или особые разрешения. Не экспериментируйте с банковскими приложениями.
Частые ошибки
- Неправильно указан component: убедитесь в точном имени пакета и Activity (
adb shell pm list packagesиpm dumpпомогают`). - Команда игнорируется: проверьте права (особенно на Android 12+), попробуйте эмулятор.
- Интент не доставлен: проверьте action/data/MIME и наличие соответствующего receiver/activity.
FAQ
- Как узнать имя activity?
Используйтеadb shell dumpsys package com.example.app | grep -A 10 "Activity"или смотрите манифест в исходниках. - Можно ли отправлять extras сложных типов?
Да:--es(string),--ei(int),--ez(boolean). Для сериализуемых объектов нужен другой подход. - Нужно ли root?
Большинство команд работают без root; но операции с системными сервисами или dumpheap могут потребовать повышенных прав.
Используйте am --help для полного списка опций и экспериментируйте на тестовых устройствах — это ускорит отладку и автоматизацию.