Как запустить приложение с помощью инструментов Android ADB?

Ответы:

630
adb shell
am start -n com.package.name/com.package.name.ActivityName

Или вы можете использовать это напрямую:

adb shell am start -n com.package.name/com.package.name.ActivityName

Вы также можете указать действия, которые будут фильтроваться вашими фильтрами намерений:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 
Cristian
источник
23
Большое спасибо, я сделал так, чтобы функция оболочки в ~ / .bash_profile была намного быстрее function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }и ее использованиеandroidrun com.example.test
AbdullahDiaa
3
adb shell amдаст вам список других опций для передачи в amкоманду. Вы можете узнать больше на developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury
1
@shurane Как я могу найти опцию -a?
ericyoung
21
Можно ли выполнить действие по умолчанию, вместо того, чтобы быть настолько специфичным для какого действия я намерен начать?
Android-разработчик
1
У меня были проблемы с поиском приложения и активности. Я использовал эту линию, adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedчтобы перечислить все приложения, которые были показаны.
Att Righ
299

Можно запустить приложение с указанием имени пакета только с помощью инструмента обезьяна , следуя этой схеме:

adb shell monkey -p your.app.package.name -c android.intent.category.LAUNCHER 1

Команда используется для запуска приложения, используя инструмент обезьяны, который генерирует случайный ввод для приложения. Последняя часть команды - целое число, которое определяет количество сгенерированных случайных входных данных для приложения. В данном случае это номер 1, который фактически используется для запуска приложения (щелчок по значку).

Michal
источник
92
Launcher по умолчанию. Вы можете упростить доadb shell monkey -p your.app.package.name 1
Androiderson
3
Можно ли использовать имя файла APK вместо имени пакета? Предположим, у меня есть файл APK, и я хочу установить и запустить его, возможно ли это?
Android-разработчик
1
Что делать, если я получаю сообщение об ошибке: не найдено действий для запуска. прерывание ?
Игорь Ганапольский
3
@IgorGanapolsky, если никаких действий не найдено, это приложение-служба и вообще не имеет никаких действий.
3
1
@IgorGanapolsky, если это использование службы, adb shell am startservice com.some.package.name/.YourServiceSubClassNameсм. Здесь: stackoverflow.com/a/18703083/211292
ThomasW
123

Или вы можете использовать это:

adb shell am start -n com.package.name/.ActivityName
Joilnen
источник
76
Можно ли сделать это без указания имени действия, чтобы началось выполнение основного действия по умолчанию?
Android-разработчик
5
@androiddeveloper Смотрите команду обезьяны ниже от depodefi : не нужно указывать имя активности!
1111161171159459134
8
Что если я не знаю ActivityName ?
Игорь Ганапольский
2
Запустите ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, в котором будет показана следующая запись: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex
17
monkey -p com.package.name 1Виаadb shell
Денис Виталий
60

Пользователи linux / mac могут также создать скрипт для запуска apk с чем-то вроде следующего:

создайте файл с именем "adb-run.sh" с этими 3 строками:

pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act

затем "chmod + x adb-run.sh", чтобы сделать его исполняемым.

теперь вы можете просто:

adb-run.sh myapp.apk

Преимущество в том, что вам не нужно знать имя пакета или имя запускаемой деятельности. Точно так же вы можете создать "adb-uninstall.sh myapp.apk"

Примечание: для этого необходимо, чтобы у вас был путь на вашем пути. Вы можете найти его в новой папке инструментов сборки в SDK.

dljava
источник
для Windows вы можете попробовать с Cygwin (не проверено)
dljava
3
Ваш пост заставил меня посмотреть на AWK. Я пошел дальше и заново создал твой сценарий. pastebin.com/X7X1SsFa
Кайл,
2
Это невероятно. Почему это не стандартная команда adb, мы никогда не узнаем.
Джон Тайри
Вам не нужно иметь aapt на вашем пути (если «android»), если вы установите PATH в скрипте adb-run.sh, например: PATH = $ (dirname $ (which android)) /. ./build-tools/20.0.0:$PATH
Стив Лемке
@dljava, почему это не работает на play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS
21

Кроме того, я хочу упомянуть еще одну вещь.

Когда вы запускаете приложение из adb shell am, оно автоматически добавляет флаг FLAG_ACTIVITY_NEW_TASK, который меняет поведение. Смотрите код .

Например, если вы запускаете действие из Play Store из adb shell am, нажатие кнопки « Назад » (аппаратная кнопка «назад») не отнимает у вас ваше приложение, вместо этого вы перенесете предыдущую активность в Play Store, если она была (если не было задачи Play store). , тогда это займет у вас ваше приложение). Документация FLAG_ACTIVITY_NEW_TASK гласит:

если задача уже запущена для действия, которое вы сейчас запускаете, то новое действие не будет запущено; вместо этого текущее задание будет просто выведено на переднюю часть экрана с состоянием, в котором оно было последним

Это заставило меня потратить несколько часов, чтобы выяснить, что пошло не так.

Итак, имейте в виду, что adb shell am добавьте флаг FLAG_ACTIVITY_NEW_TASK .

김준호
источник
1
Кроме того , стоит отметить , что , что нет никакого способа , чтобы очистить указанный флаг, который раздражает
Кедар Paranjape
16

Мы также можем запустить приложение, зная тип приложения и предоставляя ему данные:

adb shell am start -d "file:///sdcard/sample.3gp" -t "video/3gp" -a android.intent.action.VIEW

Эта команда отображает доступные видеоплееры для воспроизведения файла sample.3gp

Анвеш Яламарти
источник
15

Шаг 1: Сначала получите все имена пакетов приложений, установленных на вашем устройстве, используя:

adb shell pm list packages

Шаг 2: Вы получите все имена пакетов, скопируйте тот, который вы хотите начать использовать с помощью adb.

Шаг 3: Добавьте желаемое имя пакета в приведенной ниже команде.

adb shell monkey -p 'your package name' -v 500

Например:
adb shell monkey -p com.estrongs.android.pop -v 500 запустить обозреватель Es.

Тушар Пандей
источник
11
Это запустит ваше приложение и отправит в него 500 псевдослучайных событий. Поэтому лучше использовать «1» вместо «500».
Лин
14

откройте ~ / .bash_profile и добавьте эти функции bash в конец файла

function androidinstall(){
   adb install -r ./bin/$1.apk
}
function androidrun(){
   ant clean debug
   adb shell am start -n $1/$1.$2
}

затем откройте папку проекта Android

androidinstall app-debug && androidrun com.example.app MainActivity
AbdullahDiaa
источник
2
Можете ли вы объяснить, что app-debugделает?
JayQuerie.com
3
@TrevorSenior app-debug - это заголовок apk-файла, обычно в режиме отладки сгенерированный apk-файл называется «APPLICATION NAME-debug.apk»
AbdullahDiaa
7

monkey --pct-syskeys 0 для разработчиков

Без этого аргумента приложение не будет открываться на плате разработки без клавиш / дисплея:

adb shell monkey --pct-syskeys 0 -p com.cirosantilli.android_cheat.textviewbold 1

и терпит неудачу с ошибкой:

SYS_KEYS has no physical keys but with factor 2.0%

Протестировано на HiKey960, Android O AOSP.

Извлечено из: https://github.com/ARM-software/lisa/pull/408

Также спрашивается по адресу: monkey test: Если в системе Android нет физических ключей, какие параметры необходимо включить в команду?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
источник
2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Пример:

adb shell am start -n 'com.android.settings/.wifi.WifiStatusTest'

Вы можете использовать приложение APK-INFO, чтобы узнать список действий приложения для каждого пакета приложения.

ImSaleem
источник
0

Попробуйте это, чтобы открыть приложение для Android с определенным файлом изображения, чтобы открыть в качестве параметра.

adb shell am start -n com.google.android.apps.photos/.home.HomeActivity -d file:///mnt/user/0/primary/Pictures/Screenshots/Screenshot.png

Он будет работать на последней версии Android, не появится всплывающее окно, чтобы выбрать приложение для открытия, поскольку вы даете конкретное приложение, для которого вы хотите открыть свое изображение с

Варун Шарма
источник
У меня есть приложение для плеера, которое может передавать видео с URL, как я могу передать этот URL в качестве параметра и потока с этого URL? Предположим, URL-адрес с YouTube?
Вишну