Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用ADB命令检测正在运行的应用程序_Android_Shell_Adb - Fatal编程技术网

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

Android 如何使用ADB命令检测正在运行的应用程序,android,shell,adb,Android,Shell,Adb,我有一个安卓设备运行果冻豆操作系统 如果我知道包名,是否有任何方法可以使用ADB命令检测进程是否正在运行?您可以使用 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.ap

我有一个安卓设备运行果冻豆操作系统

如果我知道包名,是否有任何方法可以使用
ADB
命令检测进程是否正在运行?

您可以使用

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}'
i、 e
adb shell ps | grep com.we7.player | awk'{print$9}'


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

无需使用grepps可以通过
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中,通过
ps
中的
COMM
值选项进行过滤。要在Android 7.0中按名称检查正在运行的进程,可以使用
pidof
命令:

adb shell pidof com.android.phone

如果找到这样的进程,则返回PID,否则返回空字符串。

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

您可以执行一个
adb shell pgrep com.example.app
,它只显示进程Id


建议您,因为Android是Linux,所以您可以将最基本的Linux命令与
adb shell
一起使用,以导航/控制:D

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

  adb shell
  top -m 5
监视占用CPU最多的五个进程


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

如果要直接获取当前应用程序的程序包名称,请使用以下adb命令-

adb shell dumpsys window windows | grep -E 'mFocusedApp'| cut -d / -f 1 | cut -d " " -f 7
使用cut命令删除adb命令结果中的额外信息。原汁原味。

试试:

adb shell pidof <myPackageName>
adb外壳pidof


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

感谢您的回复,我只想要进程列表,就像它在Eclipse设备下的DDMS工具中显示的那样。因此,我应该执行adb shell dumpsys活动进程| grep apps | awk'{print$9}?不,对不起,我已经更改了答案,使用上面显示的adb shell ps | grep apps | awk'{print$9}“运行6.0的Nexus6中的终端模拟器显示未找到awk。我是不是遗漏了什么?@GenePavlovsky,不需要使用
read
。只需使用
tr-s'
像这样删除连续的空格
adb shel“ps | tr-s'| cut-d'-f9 | grep'^com.google.android.gms$”
谢谢你的回复..但它在我的设备上给出了一个错误:,/system/bin/sh:pgrep:not foundAndroid不支持grep。@Rinkalkumar您需要安装busyboxi我感谢您的回答,但这不是我想要的!!很好,只需在-m标志中添加空格,如
-m5
注意,如果包名的最后15个字符以数字开头,则此操作将失败。(示例:com.number13.Example.debug,其中最后15个字符为“3.Example.debug”)。原因?如果第一个字符是数字,则该命令将按pid而不是进程名称进行过滤:
pidof
:当我
readlink/proc/$pid/exe
时,我有时会得到“删除”的进程。太棒了!谢谢它在Android 7.0(Galaxy S8+)和8.0(emulator)上运行,但根本不需要根设备或当前进度!:(我喜欢这个,虽然我不得不使用-f 6,但它是否总是产生相同的输出?@ArnaldoCapo对我来说,它不能与-f 6一起工作。如果没有cut命令,这就是我得到的完整输出:MFocuseapp=AppWindowToken{eb42ebb token=token{f96bf4a ActivityRecord{d040cb5 u0 com.package/.MainNavBarActivity t8679}},因此,-f 6产生“u0”.我还没有检查,但我希望它能在设备和android版本之间一致地生成相同的输出。你能粘贴整个输出而不剪切吗?效果很好。谢谢!
adb shell pidof <myPackageName>