专栏首页UrlteamAndroid自动化之-ADB与ADB shell常用命令

Android自动化之-ADB与ADB shell常用命令

针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中。

目录:

  1. ADB原理
  2. ADB常用命令
  3. adb shell 命令
  • pm(包管理系列命令)
  • am 系列:控制应用
  • input 系列,向安卓设备发送按键事件
  • screencap截图录像系列
  • uiautomator 获取当前界面的控件信息
  • ime 输入法系列:
  • wm 获取设备分辨率
  • monkey :发送伪随机用户事件流
  • settings 更改系统设置中的参数

4. ADB查看设备信息–完整版

ADB原理:

adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具,ADB使用端口为 5037 :主要由 3 部分组成

1:运行在 PC 端的 Client : 可以通过它对 Android 应用进行安装、卸载及调试

  • Eclipse 中的 ADT、SDK Tools 目录下的 DDMS、Monitor 等工具,都是同样地用到了 adb 的功能来与 Android 设备进行交互。 PC 端的手机助手,诸如 360 手机助手、豌豆荚、应用宝等,其除了安装第三方应用方便,其他的功能,基本上都可以通过 adb 命令去完成,这里建议测试人员尽量不要在电脑上安装这类手机助手,因为其自带的 adb 程序可能会与 Android SDK 下的 adb 程序产生冲突,5037 端口被占用,导致使用 adb 命令时无法连接到设备

2:运行在 PC 端的 Service : 其管理客户端到 Android 设备上 adb 后台进程的连接

  • adb 服务启动后,Windows 可以在任务管理器中找到 adb.exe 这个进程

3:运行在 Android 设备上的 adb 后台进程

  • 执行 adb shell ps | grep adbd ,可以找到该后台进程,windows 请使用 findstr 替代 grep
adb shell ps | grep adbd
root      23227 1     6672   832   ffffffff 00019bb4 S /sbin/adbd

ADB命令:

如果多设备需要单独控选定调试则:

adb [-e | -d | -s <设备序列号>] <子命令>

常用的命令:

  • adb devices , 获取设备列表及设备状态
  • adb get-state , 获取设备的状态:device:设备正常连接 offline:连接出现异常,设备无响应 unknown:没有连接设备
  • adb kill-server , adb start-server , 结束 adb 服务, 启动 adb 服务,通常两个命令一起用
  • adb install , 安装应用,覆盖安装是使用 -r 选项,安装中文为名的APK则需要使用另外的其他大牛修改的ADB软件,
  • adb uninstall , 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名, -k 选项,卸载时保存数据和缓存目录
  • adb pull , 将 Android 设备上的文件或者文件夹复制到本地如下:
adb pull sdcard/pull.txt d:\
<span class="n">adb</span> <span class="n">pull</span> <span class="n">sdcard</span><span class="o">/</span><span class="n">pull</span><span class="o">.</span><span class="na">txt</span> <span class="nl">d:</span><span class="err">\</span><span class="n">rename</span><span class="o">.</span><span class="na">txt</span>

注意权限,复制系统权限的目录下的文件,需要 root ,并且一般的 Android 机 root 之后并不能使用命令去复制,而需要在手机上使用类似于 RE 的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复制移动系统文件

  • adb push , 推送本地文件至 Android 设备
adb push d:\push.txt sdcard/
  • 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 shell 命令

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

pm(包管理系列命令)可以用获取到一些安装在 Android 设备上得应用信息

直接运行 adb shell pm 可以获取到该命令的帮助信息

  • pm list package 列出安装在设备上的应用
  • adb shell pm list package(列出全部)
  • adb shell pm list package –s (列出系统应用)
  • adb shell pm list package –3(列出第三方应用)
  • adb shell pm list package –f(列出应用包名及对应的apk名及存放位置)
  • adb shell pm list package –i(命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用如下)
C:\Users\Administrator>adb shell pm list package -i ali
package:com.aliyun.ams.tyid  installer=null
package:com.alicom.smartdail  installer=com.meizu.mstore
  • pm path 列出对应包名的 .apk 位置
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 dump , 后跟包名,列出指定应用的 dump 信息,里面有各种信息,自行查看
  • pm install , 安装Android 设备上APK应用(目标 apk 存放于 PC 端,请用 adb install 安装;目标 apk 存放于 Android 设备上,请用 pm install 安装)
  • pm uninstall , 卸载应用,同 adb uninstall , 后面跟的参数都是应用的包名
  • pm clear , 清除应用数据
  • pm set-install-location , pm get-install-location , 设置应用安装位置,获取应用安装位置
  • 如何通过adb 获取应用的版本号
  • windows: adb shell pm dump com.android.dialer | findstr “versionName” linux: adb shell pm dump com.android.dialer | grep “versionName”

am 系列:控制应用

  • adb shell am start –n com.android.camera/.Camera   启动相机
  • adb shell am start –S com.android.camera/.Camera  先停止目标应用,再启动
  • adb shell am start –W com.android.camera/.Camera  等待应用完成启动
  • adb shell am start –a android.intent.action.VIEW –d http://testerhome.com  启动默认浏览器打开一个网页
  • adb shell am start –a android.intent.action.CALL –d tel:10086  启动拨号器拨打 10086
  • am instrument , 启动一个 instrumentation , 单元测试或者 Robotium 会用到
  • am monitor , 监控 crash 与 ANR
  • am force-stop , 后跟包名,结束应用
  • am startservice , 启动一个服务
  • am broadcast , 发送一个广播

input 系列,向安卓设备发送按键事件

  • adb shell input text test123456  发送文本内容,不能发送中文
  • adb shell input keyevent KEYCODE_HOME  发送按键事件模拟按下 Home 键
  • adb shell input tap 500 500  对屏幕发送一个触摸事件
  • adb shell input swipe 900 500 100 500   对屏幕发送一个滑动事件

screencap截图录像系列:没有sd卡就在自带存储的根目录sdcard

  • adb shell screencap –p /sdcard/screen.png  截屏,保存至 sdcard 目录
  • adb shell screenrecord /sdcard/record.mp4  录制命令,执行命令后操作手机,ctrl + c 结束录制,录制结果保存至 sdcard

uiautomator 获取当前界面的控件信息:

  • adb shell uiautomator dump 获取控件信息默认放在 /storage/emulated/legacy/window_dump.xml

ime 输入法系列:

  • adb shell ime list –s  列出设备上的输入法
  • adb shell ime set com.baidu.input_mi/.ImeService   选择输入法

wm 获取设备分辨率

  • adb shell wm size   获取设备分辨率

monkey :发送伪随机用户事件流

它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入、触摸屏输入、手势输入等),可以对待测的目标应用或整个 Android 系统进行压力测试。因此 Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法

  • 完整资料:http://xuxu1988.com/2015/05/14/2015-05-02-Monkey/

settings 更改系统设置中的参数

  • adb shell settings get secure default_input_method  获取系统默认输入法
  • adb shell settings get secure default_input_method  默认为Appium使用中文输入时安装的输入法
  • adb shell settings put secure default_input_method com.sohu.inputmethod.sogouoem/.SogouIME   put命令更改默认输入法
  • adb shell settings get system screen_brightness_mode  获取亮度是否为自动获取
  • adb shell settings get system screen_brightness  获取亮度是否为自动获取
  • adb shell settings put system screen_brightness 150  更改亮度值(亮度值在0—255之间)

ADB查看设备信息–完整版

此部分参考:https://www.jianshu.com/p/811741a2ad97

注: 有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。

  • [查看设备信息]
    • [型号]
    • [电池状况]
    • [屏幕分辨率]
    • [屏幕密度]
    • [显示屏参数]
    • [android_id]
    • [IMEI]
    • [Android 系统版本]
    • [IP 地址]
    • [Mac 地址]
    • [CPU 信息]
    • [内存信息]
    • [更多硬件与系统属性]

查看设备信息

型号 :

adb shell getprop ro.product.model

输出示例:

Nexus 5

电池状况

adb shell dumpsys battery

输入示例:

Current Battery Service state:
  AC powered: false
  USB powered: true
  Wireless powered: false
  status: 2
  health: 2
  present: true
  level: 44
  scale: 100
  voltage: 3872
  temperature: 280
  technology: Li-poly

其中 scale 代表最大电量,level 代表当前电量。上面的输出表示还剩下 44% 的电量。

屏幕分辨率

adb shell wm size

输出示例:

Physical size: 1080x1920

该设备屏幕分辨率为 1080px * 1920px。

如果使用命令修改过,那输出可能是:

Physical size: 1080x1920
Override size: 480x1024

表明设备的屏幕分辨率原本是 1080px * 1920px,当前被修改为 480px * 1024px。

屏幕密度

adb shell wm density

输出示例:

Physical density: 420

该设备屏幕密度为 420dpi。

如果使用命令修改过,那输出可能是:

Physical density: 480
Override density: 160

表明设备的屏幕密度原来是 480dpi,当前被修改为 160dpi。

显示屏参数

adb shell dumpsys window displays

输出示例:

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731
    deferred=false layoutNeeded=false

其中 mDisplayId 为 显示屏编号,init 是初始分辨率和屏幕密度,app 的高度比 init 里的要小,表示屏幕底部有虚拟按键,高度为 1920 – 1794 = 126px 合 42dp。

android_id

WINDOW MANAGER DISPLAY CONTENTS (dumpsys window displays)
  Display: mDisplayId=0
    init=1080x1920 420dpi cur=1080x1920 app=1080x1794 rng=1080x1017-1810x1731
    deferred=false layoutNeeded=false

输出示例:

51b6be48bac8c569

IMEI

在 Android 4.4 及以下版本可通过如下命令获取 IMEI:

adb shell dumpsys iphonesubinfo

输出示例:

Phone Subscriber Info:
  Phone Type = GSM
  Device ID = 860955027785041

其中的 Device ID 就是 IMEI。

而在 Android 5.0 及以上版本里这个命令输出为空,得通过其它方式获取了(需要 root 权限):

adb shell
su
service call iphonesubinfo 1

输出示例:

Result: Parcel(
  0x00000000: 00000000 0000000f 00360038 00390030 '........8.6.0.9.'
  0x00000010: 00350035 00320030 00370037 00350038 '5.5.0.2.7.7.8.5.'
  0x00000020: 00340030 00000031                   '0.4.1...        ')

把里面的有效内容提取出来就是 IMEI 了,比如这里的是 860955027785041

参考:adb shell dumpsys iphonesubinfo not working since Android 5.0 Lollipop

Android 系统版本

命令:

adb shell getprop ro.build.version.release

输出示例:

5<span class="hljs-selector-class">.0</span><span class="hljs-selector-class">.2</span>

IP 地址

每次想知道设备的 IP 地址的时候都得「设置」-「关于手机」-「状态信息」-「IP地址」很烦对不对?通过 adb 可以方便地查看。

adb shell ifconfig | grep Mask

输出示例:

inet addr:10.130.245.230  Mask:255.255.255.252
inet addr:127.0.0.1  Mask:255.0.0.0

那么 10.130.245.230 就是设备 IP 地址。

在有的设备上这个命令没有输出,如果设备连着 WiFi,可以使用如下命令来查看局域网 IP:

adb shell ifconfig wlan0

输出示例:

wlan0: ip 10.129.160.99 mask 255.255.240.0 flags [up broadcast running multicast]

wlan0     Link encap:UNSPEC
          inet addr:10.129.168.57  Bcast:10.129.175.255  Mask:255.255.240.0
          inet6 addr: fe80::66cc:2eff:fe68:b6b6/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:496520 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68215 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3000
          RX bytes:116266821 TX bytes:8311736

如果以上命令仍然不能得到期望的信息,那可以试试以下命令(部分系统版本里可用):

adb shell netcfg

输出示例:

wlan0    UP                               10.129.160.99/20  0x00001043 f8:a9:d0:17:42:4d
lo       UP                                   127.0.0.1/8   0x00000049 00:00:00:00:00:00
p2p0     UP                                     0.0.0.0/0   0x00001003 fa:a9:d0:17:42:4d
sit0     DOWN                                   0.0.0.0/0   0x00000080 00:00:00:00:00:00
rmnet0   DOWN                                   0.0.0.0/0   0x00000000 00:00:00:00:00:00

可以看到网络连接名称、启用状态、IP 地址和 Mac 地址等信息。

Mac 地址

adb shell cat /sys/class/net/wlan0/address

输出示例:

f8:a9:d0:17:42:4d

这查看的是局域网 Mac 地址,移动网络或其它连接的信息可以通过前面的小节「IP 地址」里提到的 adb shell netcfg 命令来查看。

CPU 信息

adb shell cat /proc/cpuinfo

输出示例:

Processor       : ARMv7 Processor rev 0 (v7l)
processor       : 0
BogoMIPS        : 38.40

processor       : 1
BogoMIPS        : 38.40

processor       : 2
BogoMIPS        : 38.40

processor       : 3
BogoMIPS        : 38.40

Features        : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
CPU implementer : 0x51
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0x06f
CPU revision    : 0

Hardware        : Qualcomm MSM 8974 HAMMERHEAD (Flattened Device Tree)
Revision        : 000b
Serial          : 0000000000000000

这是 Nexus 5 的 CPU 信息,我们从输出里可以看到使用的硬件是 Qualcomm MSM 8974,processor 的编号是 0 到 3,所以它是四核的,采用的架构是 ARMv7 Processor rev 0 (v71)

内存信息

adb shell cat /proc/meminfo

输出示例:

MemTotal:        1027424 kB
MemFree:          486564 kB
Buffers:           15224 kB
Cached:            72464 kB
SwapCached:        24152 kB
...

其中,MemTotal 就是设备的总内存,MemFree 是当前空闲内存。

更多硬件与系统属性

设备的更多硬件与系统属性可以通过如下命令查看:

adb shell cat /system/build.prop

这会输出很多信息,包括前面几个小节提到的「型号」和「Android 系统版本」等。

输出里还包括一些其它有用的信息,它们也可通过 adb shell getprop <属性名> 命令单独查看,列举一部分属性如下:

属性名

含义

ro.build.version.sdk

SDK 版本

ro.build.version.release

Android 系统版本

ro.build.version.security_patch

Android 安全补丁程序级别

ro.product.model

型号

ro.product.brand

品牌

ro.product.name

设备名

ro.product.board

处理器型号

ro.product.cpu.abilist

CPU 支持的 abi 列表[节注一]

persist.sys.isUsbOtgEnabled

是否支持 OTG

dalvik.vm.heapsize

每个应用程序的内存上限

ro.sf.lcd_density

屏幕密度

节注一:

一些小厂定制的 ROM 可能修改过 CPU 支持的 abi 列表的属性名,如果用 ro.product.cpu.abilist 属性名查找不到,可以这样试试:

adb shell cat /system/build.prop | grep ro.product.cpu.abi

示例输出:

ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi

原创文章,转载请注明: 转载自URl-team

本文链接地址: Android自动化之-ADB与ADB shell常用命令

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 知乎爬虫-指定问题采集全回答

    只需运行主程序html.py即可。书籍信息保存在read2.txt中  源代码保存已注释。

    十四君
  • Linux下,删除大于固定大小的文件

    十四君
  • scrapy笔记六 scrapy运行架构的实例配合解析

    在之前的项目中已经可以正常运行出scrapy框架下的爬虫程序,但是如果换一个项目换一个爬取任务,要活学活用还需要进行针对scrapy是如何运行的进行深入的学习.

    十四君
  • [android]常见的adb指令

    /**********************2016年4月23日 更新**************************************/

    陶士涵
  • ADB调试篇

    1.首先在手机上开启USB调试功能,并安装驱动(这一步很多手机助手都可以完成)。 2.用USB电缆连接手机和电脑。 3.确保手机和电脑在一个局域网内,简单的...

    bering
  • How to Use ADB Command Line Tool

    How to Use Android ADB Command Line Tool Android Debug Bridge (adb) is a tool th...

    晚晴幽草轩轩主
  • Mac和Linux下连接手机进行USB调试

    如果在Windows平台进行Android开发或者使用adb工具,你不得不安装对应的USB驱动,各种厂商驱动都不相同。

    gigiwangs
  • 常用adb操作命令详解

    这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示

    软件测试君
  • ADB配置提权漏洞(CVE-2017-13212)原理与利用分析

    0x01 背景 adb由于拥有shell权限,因此仅在授权PC端后才可使用shell权限,而通过该漏洞,可以实现在移动端获取shell权限,以致于可随意删除应用...

    FB客服
  • 使用hive客户端java api读写hive集群上的信息

    上文介绍了hdfs集群信息的读取方式,本文说hive 1、先解决依赖 <properties> <hive.version>1.2.1</hiv...

    用户1225216

扫码关注云+社区

领取腾讯云代金券