app测试之ADB

ADB,即 Android Debug Bridge,ADB具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能,是 Android 开发/测试人员不可替代的强大工具,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中。

一、ADB安装

下载adt-bundle-windows,并解压到本地文件夹:D:\adt-bundle-windows;并配置其环境变量。

在cmd窗口验证ADB安装是否成功:

C:\Users\chang>adb version
Android Debug Bridge version 1.0.31

二、ADB连接手机或模拟器

当您连接运行 Android 4.2.2 或更高版本的设备时,系统将显示一个对话框,询问您是否接受允许在这台计算机上调试的 RSA 密钥。这种安全机制可以保护用户设备,因为它可以确保只有在您能够解锁设备并确认对话框的情况下才能执行 USB 调试和其他 ADB 命令。

  • Android手机用usb数据线连接到pc的usb口上(或启动模拟器)
  • 打开手机的开发者模式(默认没打开):设置->关于手机->版本号10.0.0.162,连续点五次以上,会提示已经打开开发者模式
  • 在设置的最上端,搜索“开发人员选项”,点进去
  • 勾选其中的USB调试,确定弹出的提示框
  • 在屏幕的通知栏,点击usb连接的通知,选传输文件mtp
  • 在cmd->adb devices,如果能够列出设备的序列号就说明环境搭建成功
C:\Users\chang>adb devices
List of devices attached
127.0.0.1:56001 device

三、常见的ADB命令

0、连接和断开设备

以夜神为例,下面指令中的端口号,可能会与电脑中其他的进程端口冲突,可以尝试查询夜神安装目录下文件中的分配端口。

查看其中guestport为5555的host端口号。

//如果查不到设备,可以尝试链接一下,以夜神为例子
C:\Users\chang>adb connect 127.0.0.1:62001
already connected to 127.0.0.1:62001
//如果想断开连接,可以使用
C:\Users\chang>adb disconnect 127.0.0.1:62001

1、列出所有的设备(模拟器、真机)

//再查看链接的设备信息
C:\Users\chang>adb devices
List of devices attached
127.0.0.1:56001 device

2、获取设备状态

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

  • device:设备正常连接
  • offline:连接出现异常,设备无响应
  • unknown:没有连接设备
C:\Users\chang>adb get-state
device

3、 开启adb服务

C:\Users\chang>adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *

4、关闭adb服务

C:\Users\chang>adb kill-server

5、adb logcat 查看Log日志信息(熟练掌握)

    #比较直接的方法
adb logcat
#-v的选项:brief(默认的、简要的) process tag thread raw time threadtime long
adb logcat -v time
#打印在控制台上,不太好查阅,能不能直接写到文件中去
adb logcat -v time > e:\log.txx
#日志等级,每一条日志记录都有一个等级的
V:所有的信息都打印
D:debug调试信息
I: Information,信息
W:warning,警告,编译器认为你可能有问题;实际上可能没问题
E:error,错误
F: fatal,致命的
S:静默的,啥也不打印到日志
#通过分析,v、s没啥用,D、I、W对我们测试人员来说用处也不大,需要过滤掉
adb logcat -v time *:W > e:\log1.txt

6、挂载到Linux的空间

C:\Users\chang>adb shell
root@iToolsAVM_T0018628S:/ # ls
ls
acct
cache
config
d
data
default.prop
dev
etc
file_contexts
fstab.vbox86
init
init.environ.rc
init.rc
init.trace.rc
init.usb.rc
init.vbox86.rc
init.vbox86p.rc
mnt
proc
property_contexts
root
sbin
sdcard
seapp_contexts
sepolicy
storage
sys
system
ueventd.goldfish.rc
ueventd.rc
ueventd.vbox86.rc
vendor

7、 获取linux下运行系统进程

如果有多个设备连接的话,在使用ADB的时候需要使用-s参数指定设备的序列号,如adb -s emulator-5554 shell top。

  • -n 1:表示获取后台进程的次数
  • -d 1:获取多次的时候,每次之间的时间间隔1秒
  • -m 10:每次显示最多10条进程
  • -t:显示线程而不是进程
  • -h:帮助
C:\Users\chang>adb shell top -n 1 -d 1

User 0%, System 0%, IOW 0%, IRQ 0%
User 1 + Nice 0 + Sys 1 + Idle 400 + IOW 0 + IRQ 0 + SIRQ 0 = 402

PID PR CPU% S #THR VSS RSS PCY UID Name
2029 2 0% S 61 998000K 72336K system system_server
2 0 0% S 1 0K 0K root kthreadd
3 0 0% S 1 0K 0K root ksoftirqd/0
4 0 0% S 1 0K 0K root kworker/0:0
5 0 0% S 1 0K 0K root kworker/0:0H
6 0 0% S 1 0K 0K root kworker/u8:0
7 2 0% S 1 0K 0K root rcu_preempt
8 3 0% S 1 0K 0K root rcu_sched
9 0 0% S 1 0K 0K root rcu_bh
10 3 0% S 1 0K 0K root rcuop/0
11 2 0% S 1 0K 0K root rcuos/0
12 0 0% S 1 0K 0K root rcuob/0

8、 安装应用程序手机或模拟器

C:\Users\chang>adb install e:\data\2048.apk
3428 KB/s (24140275 bytes in 6.875s)
pkg: /data/local/tmp/2048.apk
Success

此安装方式,如果应用已经存在,会安装失败,推荐使用覆盖安装,可以保留数据:

adb install  -r e:\data\2048.apk

9、获取应用程序的包名并卸载应用

C:\Users\chang>adb shell dumpsys window | findstr mCurrentFocus
mCurrentFocus=Window{4a9e5314 u0 com.lilysgame.calculatorjw/com.lilysgame.calculator.b.Es}
C:\Users\chang>adb uninstall com.lilysgame.calculatorjw
Success

10、将本地的文件推送到远程设备上

adb push <local> <remote>

C:\Users\chang>adb push e:\data\2048.apk /data
3051 KB/s (24140275 bytes in 7.724s)

11、将远程设备上文件拉取到本地(pc)

adb pull <remote> <local>

C:\Users\chang>adb pull /data/2048.apk d:\
2247 KB/s (24140275 bytes in 10.490s)

12、获取设备安装的应用包名

adb shell pm -h

获取所有的包名,包括内置的和第三方的包:adb shell pm list package

C:\Users\chang>adb connect 127.0.0.1:62001
connected to 127.0.0.1:62001

C:\Users\chang>adb shell pm list package
package:com.android.providers.telephony
package:io.appium.settings
package:com.android.providers.calendar
package:com.android.providers.media
package:com.android.wallpapercropper
package:com.when.coco
package:com.android.documentsui
package:com.android.externalstorage
package:com.android.htmlviewer
package:com.android.mms.service
package:com.android.providers.downloads
package:com.android.browser
package:com.android.soundrecorder
....

获取第三方包名:

C:\Users\chang>adb shell pm list package -3
package:com.example.weixindemo
package:com.when.coco

package:com.tencent.mm

13.获取当前焦点的包名及activity名

C:\Users\chang>adb shell dumpsys window | findstr
 mCurrentFocus

mCurrentFocus=Window{4a9e5314 u0 com.lilysgame.calculatorjw/com.
lilysgame.calculator.b.Es}

14.根据包名及activity名启动app


C:\Users\chang>adb shell am start -n com.zkzk945.zk2048cn/com.zkzk945.zk2048cn
.MainActivity

Starting: Intent { cmp=com.zkzk945.zk2048cn/.MainActivity }

C:\Users\chang>adb shell am start -n com.zkzk945.
zk2048cn/.MainActivity

Starting: Intent { cmp=com.zkzk945.zk2048cn/.MainActivity }
Warning: Activity not started, its current task
has been brought to the front

C:\Users\chang>adb shell am start -n com.
zkzk945.zk2048cn/.MainActivity

Starting: Intent { cmp=com.zkzk945.zk2048cn/.MainActivity }