zoukankan      html  css  js  c++  java
  • adb

    ADB(Android Debug Bridge)    ANR(Application No Responding)

    adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具

    这里介绍一些里面常用的命令:

    • adb devices , 获取设备列表及设备状态

      [xuxu:~]$ adb devices
      List of devices attached 
      44c826a0    device  
    • adb get-state , 获取设备的状态

      [xuxu:~]$ adb get-state  
      device

      设备的状态有 3 钟,device , offline , unknown

      device:设备正常连接

      offline:连接出现异常,设备无响应

      unknown:没有连接设备

    • adb kill-server , adb start-server , 结束 adb 服务, 启动 adb 服务,通常两个命令一起用

      一般在连接出现异常,使用 adb devices 未正常列出设备, 设备状态异常时使用 kill-server,然后运行 start-server 进行重启服务

    • adb logcat , 打印 Android 的系统日志,这个可以单独拿出来讲

    • adb bugreport , 打印dumpsys、dumpstate、logcat的输出,也是用于分析错误

      输出比较多,建议重定向到一个文件中

      adb bugreport > d:ugreport.log
    • adb install , 安装应用,覆盖安装是使用 -r 选项

      windows 下如果需要安装含有中文名的 apk ,需要对 adb 进行修改,百度可以找到做出修改的adb , 支持中文命令的 apk,请自行搜索

    • adb uninstall , 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名

      '-k' means keep the data and cache directories , -k 选项,卸载时保存数据和缓存目录

    • adb pull , 将 Android 设备上的文件或者文件夹复制到本地

      例如复制 Sdcard 下的 pull.txt 文件到 D 盘:

      adb pull sdcard/pull.txt d:

      如果需要重命名为 rename.txt:

      adb pull sdcard/pull.txt d:rename.txt
    • adb push , 推送本地文件至 Android 设备

      例如推送 D 盘下的 push.txt 至 Sdcard:

      adb push d:push.txt sdcard/

      sdcard 后面的斜杠不能少,否则会出现下面的错误:

      [xuxu:~]$ adb push push.txt sdcard
      failed to copy 'push.txt' to 'sdcard': Is a directory

      权限问题同 pull 命令

    • 导入/导出log:
    • 打开log指令: logon#
      打开Slog指令:  adb shell slogctl enable    
      
      
      导出log指令: adb pull storage/emulated/legacy/Location.txt
      导出slog指令:adb pull data/slog
    • adb root , adb remount, 只针对类似小米开发版的手机有用,可以直接已这两个命令获取 root 权限,并挂载系统文件系统为可读写状态

    • adb reboot , 重启 Android 设备

      bootloader , 重启设备,进入 fastboot 模式,同 adb reboot-bootloader 命令

      recovery , 重启设备,进入 recovery 模式,经常刷机的同学比较熟悉这个模式

    • adb forward , 将 宿主机上的某个端口重定向到设备的某个端口

      adb forward tcp:1314 tcp :8888

      执行该命令后所有发往宿主机 1314 端口的消息、数据都会转发到 Android 设备的 8888 端口上,因此可以通过远程的方式控制 Android 设备。

    • adb connect 远程连接 Android 设备

    adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下

    • pm list package 列出安装在设备上的应用

      不带任何选项:列出所有的应用的包名(不知道怎么找应用的包名的同学看这里)

      adb shell pm list package

      -s:列出系统应用

      adb shell pm list package -s 

      -3:列出第三方应用

      adb shell pm list package -3

      -f:列出应用包名及对应的apk名及存放位置

      adb shell pm list package -f

      -i:列出应用包名及其安装来源,结果显示例子:

      package:com.zhihu.android installer=com.xiaomi.market

      adb shell pm list package -i

      命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用

      参数组合使用,例如,查找三方应用中知乎的包名、apk存放位置、安装来源:

      [xuxu:~]$ adb shell pm list package -f -3 -i zhihu
      package:/data/app/com.zhihu.android-1.apk=com.zhihu.android  installer=com.xiaomi.market
    • 查看设备上进程的cpu和内存占用情况

      adb shell top

    • 查看顶层应用

            adb shell dumpsys activity | findstr mFocusedActivity (windows 7.0)

       adb shell dumpsys activity activities | findstr mResumedActivity(windows8.0)

            adb shell dumpsys activity | grep “mFocusedActivity”(linux 7.0)

      adb shell dumpsys activity activities | grep mResumedActivity(linux 7.0)

      发送广播:

      adb shell am broadcast -a "broadcastactionfilter"

    • 启动Activity:

      adb shell am start 包名/完整Activity路径
         例如:

             adb shell am start com.zhy.aaa/com.zhy.aaa.MainActivity

             adb shell am monitor监控应用,显示报名

      屏幕截图:

    • 截屏

      adb shell /system/bin/screencap -p 路径/文件名.后缀名

      adb shell /system/bin/screencap -p /sdcard/screenshot.png     (保存到SDCard,手机端无截图动态,在图库可查看)

      adb pull 手机图片路径 电脑图片路径

      adb pull /sdcard/screenshot.png D:/log     (保存到电脑)

          可以使用screenrecord[options] filename命令来录制屏幕视频,例如:

          adb shell screenrecord /sdcard/demo.mp4

      • 查看手机电量信息
        adb shell dumpsys battery

      • 模拟手机充电状态
        adb shell dumpsys battery set status 2

      • 模拟手机为非充电状态
        adb shell dumpsys battery set status 1

      • 模拟手机断开充电
        adb shell dumpsys battery unplug

      • 模拟手机电量
        adb shell dumpsys battery set level X
        X 代表电池百分比

      • 复位,恢复实际状态
        adb shell dumpsys battery reset

    dumpsys:
    dumpsys命令可以提供非常多的系统信息。可以通过adb shell service list来查看dumpsys能提供查询信息的服务,常用的有:

    服务类名功能
    activity ActivityManagerService AMS相关信息
    package PackageManagerService PMS相关信息
    window WindowManagerService WMS相关信息
    input InputManagerService IMS相关信息
    power PowerManagerService PMS相关信息
    procstats ProcessStatsService 进程统计
    battery BatteryService 电池信息
    alarm AlarmManagerService 闹钟信息
    meminfo MemBinder 内存

    adb shell dumpsys [options]

    该命令用于打印出当前系统信息,默认打印出设备中所有service的信息。由于service比较多,这里选几个用的比较多的service来进行讲解:

    battery-----------------------电池状态

    batteryproperties-------------电池属性

    batterystats-------------------电池状态

    cpuinfo--------------------------cpu信息

    devicestoragemonitor----------------设备存储监视器

    diskstats----------------------------磁盘统计

    ioinfo---------------------------I/O信息

    meminfo-----------------------------内存信息

    mount--------------------------------挂载信息

    netstats-------------------------------网络统计

    network_management----------网络管理

    package-------------------------------包信息

    processinfo---------------------------进程信息

    procstats------------------------------进程统计

    gfxinfo-------------------------------有关与录制阶段期间发生的动画帧相关的性能信息

    要查看电池信息,命令行输入adb shell dumpsys battery

    C:UsersAdministrator>adb shell dumpsys battery
    Current Battery Service state:
      AC powered: false
      USB powered: true
      Wireless powered: false
      Max charging current: 500000
      Max charging voltage: 4748000
      Charge counter: 380000
      status: 2
      health: 2
      present: true
      level: 36
      scale: 100
      voltage: 3831
      temperature: 330
      technology: Li-poly
    • pm path 列出对应包名的 .apk 位置

      [xuxu:~]$ adb shell pm path com.tencent.mobileqq
      package:/data/app/com.tencent.mobileqq-1.apk
    • pm list instrumentation , 列出含有单元测试 case 的应用,后面可跟参数 -f (与 pm list package 中一样),以及 [TARGET-PACKAGE]

      • pm clear , 清除应用数据

      • pm set-install-location , pm get-install-location , 设置应用安装位置,获取应用安装位置[0/auto]:默认为自动

      • [1/internal]:默认为安装在手机内部

        [2/external]:默认安装在外部存储

      • 打电话:adb shell am start -a android.intent.action.CALL -d tel:10086

      • input事件输入:

    • 这个命令可以向 Android 设备发送按键事件,其源码 Input.java

      • input text , 发送文本内容,不能发送中文

        adb shell input text test123456

        前提先将键盘设置为英文键盘

      • input keyevent , 发送按键事件,KeyEvent.java

        adb shell input keyevent KEYCODE_HOME

        模拟按下 Home 键 ,源码里面有定义:

        public static final int KEYCODE_HOME = 3;

        因此可以将命令中的 KEYCODE_HOME 替换为 3

      •  adb shell input keyevent <keycode> 命令,不同的 keycode 能实现不同的功能,完整的 keycode 列表详见 KeyEvent,摘引部分我觉得有意思的如下:

        keycode含义
        3 HOME 键
        4 返回键
        5 打开拨号应用
        6 挂断电话
        24 增加音量
        25 降低音量
        26 电源键
        27 拍照(需要在相机应用里)
        64 打开浏览器
        82 菜单键
        85 播放/暂停
        86 停止播放
        87 播放下一首
        88 播放上一首
        122 移动光标到行首或列表顶部
        123 移动光标到行末或列表底部
        126 恢复播放
        127 暂停播放
        164 静音
        176 打开系统设置
        187 切换应用
        207 打开联系人
        208 打开日历
           
        210 打开计算器
        220 降低屏幕亮度
        221 提高屏幕亮度
        223 系统休眠
        224 点亮屏幕
        231 打开语音助手
        276 如果没有 wakelock 则让系统休眠
      • input tap , 对屏幕发送一个触摸事件

        adb shell input tap 500 500

        点击屏幕上坐标为 500 500 的位置

      • input swipe , 滑动事件

        adb shell input swipe 900 500 100 500

        从右往左滑动屏幕

        如果版本不低于 4.4 , 可以模拟长按事件

        adb shell input swipe 500 500 501 501 2000
      • wm

        [xuxu:~]$ adb shell wm size
        Physical size: 1080x1920 
      • 这是一个对指定应用(Android自带的系统设置应用)进行 Monkey 测试的例子,发送的事件流数目为1000:

        1
        adb shell monkey -p com.android.settings 1000
      • 常用选项及参数说明
        • -p 允许的包名列表,可同时指定多个包名,每个包都需要使用“-p”参数指定。包名的获取,可参考 python 脚本get_package_name.py
        • —ignore-crashes 忽视应用 crash 报错,不指定该参数时,应用出现 crash,monkey 会自动停止发送事件,指定该参数后,mongkey 会在 crash 后也一直发送事件,知道所有事件发送完成
        • —ignore-timeouts 忽视超时导致的错误,即ANR的错误
        • —ignore-security-exceptions 忽视权限方面的错误
        • —monitor-native-crashes 监控由 C/C++ 代码引起的 crash
        • —ignore-native-crashes 忽视由 C/C++ 代码引起的 crash
        • —kill-process-after-error 当出现错误后杀掉应用的进程
        • —hprof 指定该选项后,monkey会在发送事件完成后生成性能报告,报告一般存放于/data/misc目录下,对报告的分析,需要使用Traceview
        • —pct-touch 设定 touch 事件比例
        • —pct-motion 设定手势事件比例,例如滑动事件
        • —pct-trackball 设定跟踪球事件的比例
        • —pct-syskeys 设定系统按键事件的比例,如 Home、Back、音量+/-等
        • —pct-nav 设定”基本”导航事件的比例
        • —pct-majornav 设定”主要”导航事件比例
        • —pct-appswitch 设定启动 Activity 的事件比例
        • —pct-pinchzoom 设定缩放事件比例
        • —pct-anyevent 设定其他事件比例
        • -s 设定种子数,方便用于重现 bug
        • -v 设定输出信息的详细级别,1个 -v 表示级别为1,2个 -v 表示级别为2;仅提供启动提示、测试完成和最终结果等少量信息;提供较为详细的日志,包括每个发送到Activity的事件信息;包括了测试中选中/未选中的Activity信息;
        • —throttle 设定事件之间的延时,单位为毫秒
        • COUNT 事件数目
        • 结束Monkey进程

          执行 Monkey 的过程中如果想中途停止 Monkey 程序的运行,需要将 Monkey 的进程杀掉。

          • windows 下使用findstr,linux/mac 下用grep
          • 执行adb shell ps | findstr monkey
          • 获取到 monkey 进程的 pid 之后运行adb shell kill 进程ID
  • 相关阅读:
    React.Fragment
    微信分享
    视频H5 video标签最佳实践
    详解vue2.0+vue-video-player实现hls播放全过程
    call()和appl()的理解
    JS 原生面经从初级到高级
    vue面试
    面试题2
    IdentityServer4 实现 OpenID Connect 和 OAuth 2.0
    DDD关键知识点整理汇总
  • 原文地址:https://www.cnblogs.com/laurarararararara/p/13476440.html
Copyright © 2011-2022 走看看