前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android自动化之-ADB与ADB shell常用命令

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

作者头像
十四君
修改2019-11-26 11:25:35
4.6K1
修改2019-11-26 11:25:35
举报
文章被收录于专栏:UrlteamUrlteam

针对移动端 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
代码语言:javascript
复制
adb shell ps | grep adbd
root      23227 1     6672   832   ffffffff 00019bb4 S /sbin/adbd

ADB命令:

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

代码语言:javascript
复制
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 设备上的文件或者文件夹复制到本地如下:
代码语言:javascript
复制
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 设备
代码语言:javascript
复制
adb push d:\push.txt sdcard/
  • adb reboot , 重启 Android 设备
代码语言:javascript
复制
bootloader , 重启设备,进入 fastboot 模式,同 adb reboot-bootloader 命令
recovery , 重启设备,进入 recovery 模式,经常刷机的同学比较熟悉这个模式
  • adb forward , 将 宿主机上的某个端口重定向到设备的某个端口
代码语言:javascript
复制
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:过滤关键字,可以很方便地查找自己想要的应用如下)
代码语言:javascript
复制
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 位置
代码语言:javascript
复制
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 信息]
    • [内存信息]
    • [更多硬件与系统属性]

查看设备信息

型号 :

代码语言:javascript
复制
adb shell getprop ro.product.model

输出示例:

代码语言:javascript
复制
Nexus 5

电池状况

代码语言:javascript
复制
adb shell dumpsys battery

输入示例:

代码语言:javascript
复制
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% 的电量。

屏幕分辨率

代码语言:javascript
复制
adb shell wm size

输出示例:

代码语言:javascript
复制
Physical size: 1080x1920

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

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

代码语言:javascript
复制
Physical size: 1080x1920
Override size: 480x1024

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

屏幕密度

代码语言:javascript
复制
adb shell wm density

输出示例:

代码语言:javascript
复制
Physical density: 420

该设备屏幕密度为 420dpi。

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

代码语言:javascript
复制
Physical density: 480
Override density: 160

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

显示屏参数

代码语言:javascript
复制
adb shell dumpsys window displays

输出示例:

代码语言:javascript
复制
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

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

输出示例:

代码语言:javascript
复制
51b6be48bac8c569

IMEI

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

代码语言:javascript
复制
adb shell dumpsys iphonesubinfo

输出示例:

代码语言:javascript
复制
Phone Subscriber Info:
  Phone Type = GSM
  Device ID = 860955027785041

其中的 Device ID 就是 IMEI。

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

代码语言:javascript
复制
adb shell
su
service call iphonesubinfo 1

输出示例:

代码语言:javascript
复制
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 系统版本

命令:

代码语言:javascript
复制
adb shell getprop ro.build.version.release

输出示例:

代码语言:javascript
复制
5<span class="hljs-selector-class">.0</span><span class="hljs-selector-class">.2</span>

IP 地址

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

代码语言:javascript
复制
adb shell ifconfig | grep Mask

输出示例:

代码语言:javascript
复制
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:

代码语言:javascript
复制
adb shell ifconfig wlan0

输出示例:

代码语言:javascript
复制
wlan0: ip 10.129.160.99 mask 255.255.240.0 flags [up broadcast running multicast]

代码语言:javascript
复制
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

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

代码语言:javascript
复制
adb shell netcfg

输出示例:

代码语言:javascript
复制
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 地址

代码语言:javascript
复制
adb shell cat /sys/class/net/wlan0/address

输出示例:

代码语言:javascript
复制
f8:a9:d0:17:42:4d

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

CPU 信息

代码语言:javascript
复制
adb shell cat /proc/cpuinfo

输出示例:

代码语言:javascript
复制
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)

内存信息

代码语言:javascript
复制
adb shell cat /proc/meminfo

输出示例:

代码语言:javascript
复制
MemTotal:        1027424 kB
MemFree:          486564 kB
Buffers:           15224 kB
Cached:            72464 kB
SwapCached:        24152 kB
...

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

更多硬件与系统属性

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

代码语言:javascript
复制
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 属性名查找不到,可以这样试试:

代码语言:javascript
复制
adb shell cat /system/build.prop | grep ro.product.cpu.abi

示例输出:

代码语言:javascript
复制
ro.product.cpu.abi=armeabi-v7a
ro.product.cpu.abi2=armeabi

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

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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-042,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录:
  • ADB原理:
  • ADB命令:
  • adb shell 命令
    • pm(包管理系列命令)可以用获取到一些安装在 Android 设备上得应用信息
      • am 系列:控制应用
        • input 系列,向安卓设备发送按键事件
        • screencap截图录像系列:没有sd卡就在自带存储的根目录sdcard
        • uiautomator 获取当前界面的控件信息:
      • ime 输入法系列:
        • wm?获取设备分辨率
        • monkey :发送伪随机用户事件流
        • settings?更改系统设置中的参数
    • ADB查看设备信息–完整版
    • 查看设备信息
      • 型号 :
        • 电池状况
          • 屏幕分辨率
            • 屏幕密度
              • 显示屏参数
                • android_id
                  • IMEI
                    • Android 系统版本
                      • IP 地址
                        • Mac 地址
                          • CPU 信息
                            • 内存信息
                              • 更多硬件与系统属性
                              相关产品与服务
                              访问管理
                              访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                              http://www.vxiaotou.com