如何使用Android ADB工具启动应用程序?


Answers:


629
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 

23
非常感谢,我使它在〜/ .bash_profile中的shell函数变得更快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 2013年

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,实际上是用于启动应用程序(单击图标)。


91
启动器是默认设置。您可以简化为adb shell monkey -p your.app.package.name 1
Androiderson

3
是否可以使用APK文件名代替软件包名称?假设我有一个APK文件,并且希望能够安装并运行它,这可能吗?
Android开发者

1
如果出现错误怎么办:找不到要运行的活动。流产吗?
IgorGanapolsky '16

3
@IgorGanapolsky(如果未找到任何活动),它是一个Service应用程序,根本没有Activity(活动)。
m3nda

1
@IgorGanapolsky(如果它是一种服务使用),adb shell am startservice com.some.package.name/.YourServiceSubClassName请参见此处:stackoverflow.com/a/18703083/211292
ThomasW

122

或者,您可以使用以下代码:

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

75
是否可以在不指定活动名称的情况下执行此操作,以便默认的主要活动将启动?
android开发人员

5
@androiddeveloper见猴子命令从下面depodefi:不需要指定活动名称!
1111161171159459134 2015年

8
如果我不知道ActivityName怎么办?
IgorGanapolsky '16

2
运行〜/ Android的SDK-LINUX /编译工具/ 20.0.0 / AAPT转储徽章yourapp.apk,它会列出以下条目:启动的活动:名称= 'com.company.android.package.YourLaunchableActivity'
JohnyTex

17
monkey -p com.package.name 1通过adb shell
Denys Vitali

60

linux / mac用户还可以使用以下内容创建脚本来运行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”

注意:这要求您的路径中包含aapt。您可以在SDK中的新构建工具文件夹下找到它。


对于Windows,您可以尝试使用cygwin(未经测试)
dljava

3
您的帖子使我查找AWK。我继续并重新创建了您的脚本。pastebin.com/X7X1SsFa
Kyle

2
这太棒了。为什么这不是我们永远不会知道的标准adb命令。
约翰·泰瑞

如果您在adb-run.sh脚本中设置PATH,则无需在路径中使用aapt(只要是“ android”),就像这样:PATH = $(dirname $(which android))/。 ./build-tools/20.0.0:$PATH-
史蒂夫·莱姆克


21

另外,我想提一件事。

从以下位置启动应用程序时 adb shell am它会自动添加FLAG_ACTIVITY_NEW_TASK标志,以更改行为。参见代码

例如,如果您从以下位置启动Play商店活动 adb shell am,则按“ 后退 ”按钮(后退硬件按钮)不会带您进入您的应用,相反,如果有(如果没有Play商店任务, ,那么它将带您使用您的应用)。FLAG_ACTIVITY_NEW_TASK文档说:

如果您正在启动的活动已经在运行任务,则不会启动新的活动;取而代之的是,当前任务将以其上次进入的状态简单地显示在屏幕的前面。

这使我花了几个小时来找出问题所在。

因此,请记住adb shell am 添加FLAG_ACTIVITY_NEW_TASK标志


1
另外,值得一提的是,没有办法清除上述标记,这很烦人
Kedar 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 Explorer。


11
这将启动您的应用程序并向其发送500个伪随机事件。因此,使用“ 1”代替“ 500”更好。
Lyn

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

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%

已在Android O AOSP的HiKey960上测试。

从中学习:https : //github.com/ARM-software/lisa/pull/408

还在以下位置询问:Monkey test:如果Android系统没有物理键,则该命令中需要包含哪些参数


2
adb shell am start -n '<appPackageName>/.<appActitivityName>

例如:

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

您可以使用APK-INFO应用程序了解有关每个应用程序包的应用程序活动列表


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流式传输?假设来自youtube的网址?
毗湿奴
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.