可以直接在命令行中输入adb shell dumpsys window | findstr mCurrentFocus
以手机QQ为例,读取到的mCurrentFocus的信息为
mCurrentFocus=Window{cb7270e u0 com.tencent.mobileqq/com.tencent.mobileqq.activity.AddAccountActivity}
然后通过字符串分割,提取出包名 "com.tencent.mobileqq", 如果有需要的话同样可以获取到当前活动名。
如果在Python中使用的话,可以用如下方法
import osdata = os.popen("adb shell dumpsys window | findstr mCurrentFocus")mCurrentFocus = data.read()list1 = mCurrentFocus.split(' ')list2 = list1[4].split('/')packageName = list2[0]print(packageName)
在命令行中直接输入命令adb shell "ps | grep com.tencent.mobileqq"
可以得到这个应用所有的进程信息,有的App只有一个进程,有些App会有多个进程。这里注意 grep命令是在Linux 下使用的,如果想在Windows环境下使用,前后需要加上双引号,否则会报错。
u0_a98 991 744 2202676 125564 0 0 S com.tencent.mobileqq:toolu0_a98 31810 744 1938984 68956 0 0 S com.tencent.mobileqq:MSFu0_a98 32714 744 2218736 226968 0 0 S com.tencent.mobileqq
其中第二列为进程的PID,然后我们可以通过Python中的分割字符串等操作来获取PID。
网上一些帖子都使用了find
方法或者grep
方法,这些在查找的时候都会附加一些其他的日志,通过查看adb logcat的帮助文档,发现其中有一条
--pid=<pid> Only prints logs from the given pid
这样我们可以通过如下命令来获取制定的PID的日志
adb shell logcat --pid=32714
或者更简便的
adb shell logcat --pid=$(pidof -s com.tencent.mobileqq)
同时我们还可以加以约束,比如只要Warning以上的日志
adb shell logcat *:W --pid=$(pidof -s com.tencent.mobileqq)
得到的日志如下
--------- beginning of main06-04 20:39:56.804 32714 710 E DingdongPluginBizHandler: 0x51d_1 respond msf error: retCode[1002].06-04 20:40:52.953 32714 32714 W InputMethodManager: startInputReason = 106-04 20:40:52.971 32714 32747 W libEGL : EGLNativeWindowType 0xe0e6d808 disconnect failed
有两种方法
1.一种是在命令中直接添加> filepath
,命令如下
adb shell logcat *:W > E:/log.txt
2.更改subprocess.Popen的属性
logfile = open("E:/log.txt", 'w')command = "adb shell logcat *:W"subprocess.Popen(command, stdout = logfile, shell=True)
运行代码后,一共会打开两个进程, 一个是 cmd.exe
,第二个是adb.exe
,都要关闭
log = subprocess.Popen(command)##关闭try: log.terminate() #关闭 cmd.exe os.popen("adb kill-server") #关闭 adb.exeexcept: pass
通过更改subprocess 中的startupinfo
st = subprocess.STARTUPINFOst.dwFlags = subprocess.STARTF_USESHOWWINDOWst.wShowWindow = subprocess.SW_HIDEcmd = subprocess.Popen(command, startupinfo=st)