如何使用ADB命令检测正在运行的应用程序

时间:2013-05-22 12:15:06

标签: android shell adb

我有一台运行Jelly Bean OS的Android设备。

如果我知道包名称,有没有办法检测流程是否正在运行ADB命令?

6 个答案:

答案 0 :(得分:65)

无需使用grep。 Android中的ps可以按COMM值进行过滤(在java应用的情况下,包名称的最后15个字符)

假设我们要检查com.android.phone是否正在运行:

adb shell ps m.android.phone
USER     PID   PPID  VSIZE  RSS     WCHAN    PC         NAME
radio     1389  277   515960 33964 ffffffff 4024c270 S com.android.phone

在Android 7.0中从COMMps值选项has been removed进行过滤。要在Android 7.0中按名称检查正在运行的进程,可以使用pidof命令:

adb shell pidof com.android.phone

如果找到此类进程则返回PID,否则返回空字符串。

答案 1 :(得分:30)

您可以使用

adb shell ps | grep apps | awk '{print $9}'

生成如下输出:

com.google.process.gapps
com.google.android.apps.uploader
com.google.android.apps.plus
com.google.android.apps.maps
com.google.android.apps.maps:GoogleLocationService
com.google.android.apps.maps:FriendService
com.google.android.apps.maps:LocationFriendService

adb shell ps返回Android设备上所有正在运行的进程的列表,grep apps搜索包含“apps”的任何行,如上所示,它们都是com.google.android.APPS。或者GAPPS,awk提取第9列,在这种情况下是包名。

要搜索特定包裹

adb shell ps | grep PACKAGE.NAME.HERE | awk '{print $9}'

adb shell ps | grep com.we7.player | awk '{print $9}'

如果它正在运行,则会出现名称,否则将不会返回结果。

答案 2 :(得分:11)

如果您想直接获取当前应用的包名称,请使用此adb命令 -

adb shell dumpsys window windows | grep -E 'mFocusedApp'| cut -d / -f 1 | cut -d " " -f 7

使用cut命令删除adb命令结果中的额外信息。来自here的原始解决方案。

答案 3 :(得分:9)

我刚刚注意到 adb 中提供了 top ,因此您可以执行以下操作:

  adb shell
  top -m 5

监控前五个CPU占用过程。

或者

  adb shell top -m 5 -s cpu -n 20 |tee top.log

将此记录一分钟并将输出收集到计算机上的文件中。

答案 4 :(得分:5)

尝试:

adb shell pidof <myPackageName>

如果应用程序未运行,则标准输出将为空。否则,它将输出PID。

答案 5 :(得分:3)

或者,您可以使用pgrep或Process Grep。 (需要Busybox)

您可以执行adb shell pgrep com.example.app,它只会显示进程ID。

作为建议,由于Android是Linux,因此您可以使用adb shell的大多数基本Linux命令来导航/控制。 :d

相关问题