python语句来获取该component

52 篇文章 4 订阅 ¥39.90 ¥99.00
本文介绍了多种在Android设备上获取应用component(包名+活动)的方法,包括使用adb命令行工具、hierarchyviewer、aapt以及dumpsys。重点讲述了通过`adb shell dumpsys window w`结合grep/findstr过滤,最后展示如何用Python处理adb命令的输出,以获取当前运行应用的component。
摘要由CSDN通过智能技术生成

startActivity(component="com.android.settings/com.android.settings.Settings"),那如何获取该component 呢?

有如下方法:

1.在有root 权限并且开启了view server 的前提下,使用sdk/tools目录下hierarchyviewer.bat 工具可以获得

2.在sdk/build-tools目录下有个aapt工具,使用aapt dump badging *.apk可以获得

3.在CMD窗口中执行adb logcat -v time -s ActivityManager,然后点击应用进入,如点击系统设置,进入后会有相应的日志信息打印出来,在信息中查找 cmp=com.android.settings/.Settings

4.通过adb shell dumpsys命令获得,这也是我准备主要介绍的方法

在CMD窗口中执行adb shell dumpsys window -h,会显示下面的帮助内容:

C:\Users\xuxu>adb shell dumpsys window -h
Window manager dump options:
[-a] [-h] [cmd] ...
cmd may be one of:
l[astanr]: last ANR information
p[policy]: policy state
a[animator]: animator state
s[essions]: active sessions
d[isplays]: active display contents
 t[okens]: token list
w[indows]: window list
cmd may also be a NAME to dump windows.  NAME may
be a partial substring in a window name, a
Window hex object identifier, or
 "all" for all windows, or
 "visible" for the visible windows.
 -a: include all available server state.

我们使用windows选项,执行adb shell dumpsys window w,在输出结果中我们可以找到打开的当前应用的component,而component中总是含有斜杠“/”,所以我们可以使用这个命令得到输出(进入系统设置应用),adb shell dumpsys window w | findstr \/ ,需要转义斜杠“/”,在linux下需要把findstr换成grep,此时输出的内容还是会比较多,不容易查找,再结果分析,发现可以再查找字符串“name=”,

接下来重新执行adb shell dumpsys window w | findstr \/ | findstr name= ,会输出下面的结果:

C:\Users\xuxu>adb shell dumpsys window w | findstr \/ | findstr name=
      mSurface=Surface(name=com.android.settings/com.android.settings.Settings)

com.android.settings/com.android.settings.Settings 就是我们需要的component

接下来用python语句来获取该component:

import os
import re
 
def getFocusedPackageAndActivity():
 
        pattern = re.compile(r"[a-zA-Z0-9\.]+/[a-zA-Z0-9\.]+")
        out = os.popen("adb shell dumpsys window windows | findstr \/ | findstr name=").read()
        list = pattern.findall(out)
        component = list[0]
 
        return component
print getFocusedPackageAndActivity()

用adb命令快速查看某应用appPackage及appActivity的方法:

  1> adb shell pm list packages                                         列出所有的包名(不知道包名的情况,需要执行查找包名)appPackage
  2> adb shell dumpsys package XXX                               查看某个包的具体信息(前提是需要知道包名是什么)      appActivity
  3> adb shell dumpsys activity | grep mFocusedActivity  查看当前resume的是哪个activity 
  4> adb logcat | grep ActivityManager                              查看当前正在运行的Activity
  5> adb logcat | grep Displayed                                        查看当前正在运行的Activity

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值