• 通过adb shell dumpsys命令获取当前应用的component


    分类: adb2014-06-22 01:24 837人阅读 评论(0) 收藏 举报

    androidadb测试monkeyrunnerpython

    在android测试中,经常需要知道启动一个Activity所需要的component,例如在monkeyrunner中启动一个系统设置: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:Usersxuxu>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:Usersxuxu>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:

    [python] view plaincopy

    1. import os  
    2. import re  
    3.   
    4. def getFocusedPackageAndActivity():  
    5.   
    6.         pattern = re.compile(r"[a-zA-Z0-9.]+/[a-zA-Z0-9.]+")  
    7.         out = os.popen("adb shell dumpsys window windows | findstr / | findstr name=").read()  
    8.         list = pattern.findall(out)  
    9.         component = list[0]  
    10. 10.   
    11. 11.         return component  

    12. print getFocusedPackageAndActivity()  

     

     

    打印结果:com.android.settings/com.android.settings.Settings

    如此就可以在使用monkeyrunner中的startActivity方法时调用该方法将获取到的component传入参数了!

    附出处:http://blog.csdn.net/gb112211/article/details/33073191

  • 相关阅读:
    JAVA如何调用C/C++方法
    java如何去调用C++的方法详解
    在运行时刻更新功能模块
    运用加密技术保护Java源代码/定制ClassLoader
    JAVA 利用JNI加密class文件/自定义ClassLoader 类
    java本地方法如何调用其他程序函数,方法详解2
    java本地方法如何调用其他程序函数,方法详解
    JAVA本地方法详解,什么是JAVA本地方法?
    java随机生成简体中文取指定长度随机简体中文实用方法
    导入安全证书到jdk步骤详细说明-原
  • 原文地址:https://www.cnblogs.com/ouyang995948959/p/4539876.html
Copyright © 2020-2023  润新知