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

328

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

Теги:
adb

9 ответов

464
Лучший ответ
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 
  • 19
    Большое спасибо, я сделал функцию оболочки в ~ / .bash_profile намного более быстрой function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity } и ее использование androidrun com.example.test
  • 3
    adb shell am предоставит вам список других опций, которые нужно передать команде am . Вы можете узнать больше на developer.android.com/tools/help/adb.html#am
Показать ещё 10 комментариев
173

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

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

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

  • 61
    Launcher по умолчанию. Вы можете упростить adb shell monkey -p your.app.package.name 1
  • 2
    Можно ли использовать имя файла APK вместо имени пакета? Предположим, у меня есть файл APK, и я хочу установить и запустить его, возможно ли это?
Показать ещё 7 комментариев
105

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

adb shell am start -n com.package.name/.ActivityName
  • 71
    Можно ли сделать это без указания имени действия, чтобы началось выполнение основного действия по умолчанию?
  • 5
    @androiddeveloper Смотрите команду обезьяны ниже от depodefi : не нужно указывать название активности!
Показать ещё 5 комментариев
53

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

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

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.

  • 0
    для Windows вы можете попробовать с Cygwin (не проверено)
  • 3
    Ваш пост заставил меня посмотреть на AWK. Я пошел дальше и заново создал твой сценарий. pastebin.com/X7X1SsFa
Показать ещё 5 комментариев
16

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

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

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

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

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

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

12

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

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

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

12

открыть ~/.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
  • 2
    Можете ли вы объяснить, что делает app-debug ?
  • 2
    @TrevorSenior app-debug - это заголовок apk-файла, обычно в режиме отладки сгенерированный apk-файл называется «APPLICATION NAME-debug.apk»
0

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

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

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню