美文网首页
adb 常用命令

adb 常用命令

作者: DC_ing | 来源:发表于2017-06-26 00:05 被阅读0次

    adb 常用命令

    ADB的全称为Android Debug Bridge,就是起到调试桥的作用。ADB是android sdk(Android专属的软件开发工具包)里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备。
    它的主要功能有:运行设备的shell(命令行);管理模拟器或设备的端口映射;计算机和设备之间上传/下载文件;将本地apk软件安装至模拟器或android设备。

    开启/关闭服务

    有时候 adb 运行异常,就需要重启关闭开启 adb 服务。

    adb kill-server         # 关闭服务
    adb start-server        # 开启服务
    

    查看当前连接的设备

    示例:

    $ adb devices
    List of devices attached
    192.168.91.185:5555 device
    

    连接 USB 转为 WIFi

    1. 先使用 usb 连接到电脑上。

    2. 设置目标设备以侦听端口 5555 上的 TCP/IP 连接。

      $ adb tcpip 5555
      restarting in TCP mode port: 5555
      
    3. 断开 usb 连接,并访问设备的内部网址

      $ adb connect device_ip_address
      connected to device_ip_address:5555
      
    4. 查看设备是否已连接

      $ adb devices
      List of devices attached
      192.168.2.127:5555  device
      
    5. 断开WiFi 连接的设备

      $ adb disconnect
      disconnected everything
      

    给指定设备发送命令

    当电脑连接多个设备时,发出 adb 命令,必须指定一个设备

    adb -s serial_number command
    

    例如:

    adb -s BY2XEE157 install path_to_apk
    

    安装/卸载应用

    1. 安装应用

      adb install path_to_apk
      
    2. 覆盖安装应用

      adb install -r path_to_apk
      
    3. 卸载应用

      adb uninstall com.package.name
      

    电脑与设备间的文件复制

    1. 从设备复制文件

      adb pull remote local
      
    2. 复制文件到设备

      adb push local remote
      

    在上述命令中,localremote 指的是开发计算机(本地)和模拟器/设备实例(远程)上目标文件/目录的路径。例如:

    adb push foo.txt /sdcard/foo.txt
    

    输入设备日志到终端上

    1. 一直显示设备日志,直到你手动 (Ctrl + C) 停止

      adb logcat
      
    2. 将设备缓存的日志输入到终端上,不会阻塞

      adb logcat -d
      
    3. 将日志以文件形式输出到手机设备上,会阻塞,需手动 (Ctrl + C) 停止

      adb logcat -f /sdcard/log.txt
      

      PS:
      (1). 如果在后台自动手机,不阻塞终端,则可在命令最后加一个 & 的参数;
      (2). 加了&的命令,需要在不收集的时候手动停止,否则再次使用该命令时,会造成2个 logcat 的命令都写在同一个文件中。

      停止方法:

      adb shell kill -9 <logcat pid>
      

      其中logcat_pid 通过 如下命令获取

      adb shell ps | grep logcat          # Linux & macOS 平台
      adb shell ps | findstr "logcat"    # Windows 平台
      
    4. 清空日志缓存信息

      adb logcat -c
      
    5. 过滤指定等级以上的日志

      adb logcat "*:<level>"
      

      日志等级列表:

      -- V : Verbose (明细);
      -- D : Debug (调试);
      -- I : Info (信息);
      -- W : Warn (警告);
      -- E : Error (错误);
      -- F : Fatal (严重错误);
      -- S : Silent(Super all output) (最高的优先级, 可能不会记载东西);
      

      示例:命令 $ adb logcat "*:E" ,只显示错误级别以上的日志

    查看设备已安装应用

    查看设备所有应用包名,包括:系统应用、第三方应用

    adb shell pm list package
    

    查看设备所有第三方应用包名

    adb shell pm list package -3
    

    清除指定应用的所有数据(不卸载应用)

    adb shell pm clear com.package.name
    

    强制关闭应用

    adb shell am force-stop com.package.name
    

    截屏

    adb shell screencap /sdcard/screen.png
    

    录制视频

    adb shell screenrecord /sdcard/demo.mp4
    

    如果需要停止录制视频,需要等待3分钟或输入快捷键Ctrl + C停止,也可以加 --time-limit TIME单位为秒
    如:录制5分钟

    adb shell screenrecord /sdcard/demo.mp4 --time-limit 300
    

    当然还可以设置分辨率720P

    adb shell screenrecord /sdcard/demo.mp4 --size 1280x720
    

    获取输入法

    1. 获取当前设备默认输入法

      adb shell settings get secure default_input_method
      
    2. 设置指定的输入法(设输入法为:com.android/input)为默认

      adb shell ime set com.android/input                 # 两条命令作用一样
      adb shell settings put secure default_input_method com.android/input
      

    获取设备信息参数

    adb shell getprop
    

    重启手机命令

    1. 重启手机

      adb reboot
      
    2. 重启手机到recovery界面

      adb reboot recovery
      
    3. 重启手机到bootloader界面

      adb reboot bootloader
      
    4. 重启手机到fastboot界面

      adb reboot fastboot
      

    获取设备属性

    使用命令adb shell getprop+下面的属性,即可获取相应的属性

    属性名 含义
    ro.build.version.sdk SDK 版本
    ro.build.version.release Android 系统版本
    ro.product.model 型号
    ro.product.brand 品牌
    ro.product.name 设备名
    $ adb shell getprop ro.product.model
    vivo X9i
    

    查看实时资源占用情况

    示例:

    $ adb shell top
    
    User 4%, System 2%, IOW 0%, IRQ 0%
    User 108 + Nice 0 + Sys 68 + Idle 2284 + IOW 0 + IRQ 6 + SIRQ 6 = 2472
    
      PID PR CPU% S  #THR     VSS     RSS PCY UID      Name
     2003  5   3% S    64 1257132K 154860K  fg u0_a19   com.android.systemui
      521  5   2% D    13 145376K  23044K  fg system   /system/bin/surfaceflinger
    19825  4   0% R     1   6516K   1416K  fg shell    top
    18585  7   0% S     1      0K      0K  fg root     kworker/u16:2
    19563  7   0% D     1      0K      0K  fg root     mdss_fb0
     1452  5   0% S   178 2458344K 190788K  fg system   system_server
    19795  7   0% S     1      0K      0K  fg root     kworker/u16:6
    17950  7   0% S     1      0K      0K  fg root     kworker/u16:0
       53  4   0% S     1      0K      0K  fg root     rcuop/6
     2151  6   0% S    55 1708748K  76084K  fg system   com.vivo.daemonService
    

    更多用法:

        -m num  显示最多的进程数目
        -n num  刷新多少次后退出
        -d num  刷新时间间隔
        -s col  以什么数据排列 (cpu,vss,rss,thr).
        -t      显示线程信息代替进程
        -h      显示帮助文档
    

    查看内存信息

    adb shell dumpsys meminfo                   # 查看整个设备的内存信息
    adb shell dumpsys meminfo pid               # 查看指定进程的内存信息
    adb shell dumpsys meminfo com.package.name  # 查看指定应用的内存信息
    

    提示:

    dalvik:是指dalvik所使用的内存。 native:是被native堆使用的内存。应该指使用C\C++在堆上分配的内存。
    VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
    RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存)
    PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
    USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
    一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
    

    查看指定应用的指定页面启动时间

    1. 可通过启动页面指定页面获得时间
    adb shell am start -W -n  com.package.name/.activity
    
    1. 查看设备日志获得打开指定页面时间
      示例:
    $ adb shell logcat | grep ActivityManager
    
    06-22 16:27:43.827  1452  2446 I ActivityManager: START u0 {cmp=com.babychat.parent.test/com.babychat.module.setting.view.SettingAty} from uid 10113 on display 0
    06-22 16:27:43.967  1452  1609 I ActivityManager: Displayed com.babychat.parent.test/com.babychat.module.setting.view.SettingAty: +115ms
    06-22 16:27:44.847  1452  2158 I ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.android.packageinstaller cmp=com.android.packageinstaller/.permission.ui.GrantPermissionsActivity (has extras)} from uid 10113 on display 0
    06-22 16:27:44.867  1452  2473 I ActivityManager: START u0 {cmp=com.babychat.parent.test/com.babychat.activity.OutBoxActivity (has extras)} from uid 10113 on display 0
    06-22 16:27:44.997  1452  1609 I ActivityManager: Displayed com.babychat.parent.test/com.babychat.activity.OutBoxActivity: +117ms
    06-22 16:27:46.017  1452 26437 I ActivityManager: START u0 {act=android.content.pm.action.REQUEST_PERMISSIONS pkg=com.android.packageinstaller cmp=com.android.packageinstaller/.permission.ui.GrantPermissionsActivity (has extras)} from uid 10113 on display 0
    06-22 16:28:30.527  1452  2446 I ActivityManager: START u0 {cmp=com.babychat.parent.test/com.babychat.activity.UserHomeHistoryAty (has extras)} from uid 10113 on display 0
    06-22 16:28:30.687  1452  1609 I ActivityManager: Displayed com.babychat.parent.test/com.babychat.activity.UserHomeHistoryAty: +140ms (total +44s660ms)
    

    查看当前 activity

    示例:

    $ adb shell dumpsys window | grep mCurrentFocus
    mCurrentFocus=Window{2cf7a4d u0 com.babychat.parent.test/com.babychat.module.chatting.groupmemberlist.GroupMemberListActivity}
    

    获取流量

    adb 命令获取流量有多种方式。

    需提前准备的数据

    1. 获取指定应用的 pid

      adb shell ps | grep com.package.name
      

      如:

      $ adb shell ps | grep com.babychat.parent.test
      u0_a113   9483  773   2033552 243156 SyS_epoll_ 0000000000 S com.babychat.parent.test
      u0_a113   9518  773   1603852 48948 SyS_epoll_ 0000000000 S com.babychat.parent.test:pushservice
      

      其中logcat_pid 通过 如下命令获取

      adb shell ps | grep logcat          # Linux & macOS 平台
      adb shell ps | findstr "logcat"     # Windows 平台
      

      第二列的数值就是 pid

    2. 获取指定应用的 uid

      adb shell cat /proc/<pid>/status
      

      PS:pid 第一点获取的数值
      如:

      $ adb shell cat /proc/2076/status
      Name:   hat.parent.test
      State:  S (sleeping)
      Tgid:   9483
      Pid:    9483
      PPid:   773
      TracerPid:  0
      Uid:    10113   10113   10113   10113
      Gid:    10113   10113   10113   10113
      Ngid:   0
      FDSize: 256
      Groups: 3003 9997 50113 
      VmPeak:  2210788 kB
      VmSize:  2033632 kB
      VmLck:         0 kB
      VmPin:         0 kB
      VmHWM:    362872 kB
      VmRSS:    244244 kB
      VmData:   378084 kB
      VmStk:      8196 kB
      VmExe:        20 kB
      VmLib:    121404 kB
      VmPTE:      1772 kB
      VmSwap:        0 kB
      Threads:    170
      SigQ:   0/13358
      SigPnd: 0000000000000000
      ShdPnd: 0000000000000000
      SigBlk: 0000000000001204
      SigIgn: 0000000000000000
      SigCgt: 00000002000094f8
      CapInh: 0000000000000000
      CapPrm: 0000000000000000
      CapEff: 0000000000000000
      CapBnd: 0000000000000000
      Seccomp:    0
      Cpus_allowed:   ff
      Cpus_allowed_list:  0-7
      voluntary_ctxt_switches:    17297
      nonvoluntary_ctxt_switches: 10150
      

      命令结果中第7行就是 uid 的结果了

    1、读取/proc/uid_stat/<UID> 目录下的文件

    流量数据分为接收流量(tcp_rcv)和发送流量(tcp_snd)两部分,这两个状态数值我们可以通过读取/proc/uid_stat/<UID>目录下的两个文件得到。

    $ adb shell cat /proc/uid_stat/10114/tcp_rcv
    100046432
    $ adb shell cat /proc/uid_stat/10114/tcp_snd
    2020511
    

    PS:

    1. 以上命令只能获取 TCP 协议的流量,UDP 等其他协议没有计算在内;
    2. 以上数据的单位为(Byte),且此数据是一直累加的,直到卸载应用才会删除
    3. 使用以上方法获取流量,需在操作前和操作后各获取一次数据,得到得到之间的相差值就可以了。

    2、读取/proc/net/xt_qtaguid/stats | grep <uid> 流量数值

    通过使用以下命令获取设备流量信息,如果指定应用,则获取应用的 uid,在该命令后添加参数| grep uid

    adb shell cat /proc/net/xt_qtaguid/stats
    

    如:

    $ adb shell cat /proc/net/xt_qtaguid/stats | grep 10114
    40 wlan0 0x0 10114 0 6306390 5007 276578 3966 6306390 5007 0 0 0 0 276578 3966 0 0 0 0
    41 wlan0 0x0 10114 1 104210738 82998 5295286 65789 104210738 82998 0 0 0 0 5295286 65789 0 0 0 0
    

    PS:

    1. 第6列是接收的流量数值,单位:bytes;
    2. 第8列是发送的流量数值,单位:bytes;
    3. 如果结果出现多行数据,相加的总数即为结果

    3、读取 /proc/<pid>/net/dev 数值

    通过获取到的 pid ,使用命令可得到:

    $ adb shell cat /proc/<Pid>/net/dev
    
    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    rmnet_ipa0:     716       7    0    0    0     0          0         0      880      12    0    0    0     0       0          0
    r_rmnet_data7:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data4:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data3:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
     wlan0: 320261121 1225926    0  124    0     0          0         0 28315746  159136    0    0    0     0       0          0
    rmnet_data5:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data7:     620       8    0    0    0     0          0         0      880      12    0    0    0     0       0          0
    dummy0:       0       0    0    0    0     0          0         0      210       3    0    0    0     0       0          0
      p2p0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data6:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data3:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data8:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data4:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
        lo:    2272      27    0    0    0     0          0         0     2272      27    0    0    0     0       0          0
    r_rmnet_data5:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    rmnet_data6:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    r_rmnet_data2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    

    PS:
    1.wlan0 代表是 WiFi 接收发送的流量数值,单位为:bytes

    获取电量

    未完待续

    相关文章

      网友评论

          本文标题:adb 常用命令

          本文链接:https://www.haomeiwen.com/subject/rqhdcxtx.html