adb 常用命令

news/2024/7/24 12:49:24 标签: shell, 移动开发, ui

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.sdkSDK 版本
ro.build.version.releaseAndroid 系统版本
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

获取电量

等待完善


http://www.niftyadmin.cn/n/980068.html

相关文章

1120. Friend Numbers (20)(朋友数)

Friend Numbers (20) Two integers are called “friend numbers” if they share the same sum of their digits, and the sum is their “friend ID”. For example, 123 and 51 are friend numbers since 123 51 6, and 6 is their friend ID. Given some numbers, you a…

移植cjson到windows下编译

起因 在工作过程中发现需要让Lua支持json库&#xff0c;如果直接用lua版本的json解析器的话效率不够高&#xff0c;所以找了一个用C实现的json库--cjson&#xff0c;据说此库比lua版本的效率高10-20倍。但是cjson是一个安卓的库&#xff0c;所以需要将其移植到VC中进行使用。 环…

MSP432单片机学习记录(二)

文章目录1、复位视图2、代码提示3、新建自己的硬件库&#xff08;hardware&#xff09;4、中断的使用前面的文章提到了ccs工程的创建&#xff0c;下面继续介绍msp432的使用&#xff0c;上一篇文章链接如下所示&#xff1a;MSP432单片机学习记录&#xff08;Code Composer Studi…

Mongo第三个参数的用法

Mongo update的用法 Update( array $criteria , array $new_object [, array $options array() ] ) 第一个参数是条件&#xff0c;第二个参数是需要改变的变量 前面两个变量就不多说了 第三个变量&#xff0c; Options 【multiple 】 作用&#xff1a;是否更新满足条件的多条的…

opencv(c++)学习记录

文章目录1、opencv的安装1、vs2017安装2、opencv的下载和配置2、基本函数学习1、读取图片2、读取视频3、读取摄像头4、图片转换1、opencv的安装 1、vs2017安装 这里首先是安装vs2017&#xff0c;这里直接去官网安装即可&#xff0c;下载2017时因为好像新的有的不太适应&#…

给你一个云端的大脑01:印象笔记小技巧

我在上课时&#xff0c;很多学员们给我的反馈都是&#xff1a;老师你讲的太精彩啦&#xff0c;但我记不住。我最重视的就是学员的反馈&#xff0c;因为我是一个完美主义者&#xff0c;凡事既然做就要做到最好。而学员就像我的一面镜子&#xff0c;反馈是我改进的方向。很久以前…

51单片机学习记录(EIDE开发)

文章目录1、前期准备2、程序编写3、烧录使用的开发板如下&#xff0c;其实一些其他的51也是可以的&#xff0c;EIDE都提供了相关的库&#xff0c;这里就拿手头上有的进行实验测试吧&#xff01; 1、前期准备 前面讲过一篇文章关于EIDE的使用&#xff0c;建议提前看一下&…

hdu 4995

2019独角兽企业重金招聘Python工程师标准>>> #include <stdio.h> #include <string.h>#define MAXN 100010 #define MAXK 15#define CLR(vec) memset(vec, 0, sizeof(vec))struct point{int id;int pos; }table[MAXN];double val[MAXN]; /*val o…