Android SDK中的必会工具-ADB

前面的内容请参见Android应用自动化测试-提纲。 这篇我们将介绍在Android SDK中一个非常关键的工具,ADB。可以说ADB是Android开发、自动化测试的基础。


ADB即Android Debug Bridge,android调试桥,是开发设备(PC)和android设备之间的连接通道,通过它,开发者可以在PC端实现对设备的连接、控制和一些基本操作。

ADB的组成如图

Android SDK中的必会工具-ADB_第1张图片

在PC端:
ADB由Client和Server两部分组成,client即我们运行ADB的命令行程序,用于接收我们的操作指定,并和server端通过5037端口进行通信,server端启动后和5037端口绑定,与client端交互并建立和设备端的adbd通信,一般设备端是5555端口,PC端则使用5554端口。多个不同设备会成对分配(5556:5557...)
在Device端:
则运行了adbd,即adb在设备上的守护进程,随时接收来自PC端的指令。模拟器是默认开启的,真机在我们开启了开发者的调试模式以后,也就是启动了adbd进程。

ADB工具的作用非常多,在命令行中运行adb help可以得到以下输出,列出了adb支持的使用命令清单。

c:>adb help
Android Debug Bridge version 1.0.36
Revision 0e9850346394-android

-a                            - directs adb to listen on all interfaces for a connection
-d                            - directs command to the only connected USB device
                                returns an error if more than one USB device is present.
-e                            - directs command to the only running emulator.
                                returns an error if more than one emulator is running.
-s           - directs command to the device or emulator with the given
                                serial number or qualifier. Overrides ANDROID_SERIAL environment variable.
-p      - simple product name like 'sooner', or a relative/absolute path to a product 
                                out directory like 'out/target/product/sooner'.If -p is not specified, the 
                                ANDROID_PRODUCT_OUT environment variable is used, which mustbe an absolute path.
-H                              - Name of adb server host (default: localhost)
-P                              - Port of adb server (default: 5037)
devices [-l]                   - list all connected devices
                             ('-l' will also list device qualifiers)
connect [:]       - connect to a device via TCP/IP
                             Port 5555 is used by default if no port number is specified.
 disconnect [[:]]  - disconnect from a TCP/IP device.
                             Port 5555 is used by default if no port number is specified.
                             Using this command with no additional arguments
                             will disconnect from all connected TCP/IP devices.

device commands:

adb push ... 
                           - copy files/dirs to device
adb pull [-a] ... 
                           - copy files/dirs from device
                             (-a preserves file timestamp and mode)
adb sync [  ]     - copy host->device only if changed
                             (-l means list but don't copy)
adb shell [-e escape] [-n] [-Tt] [-x] [command]
                           - run remote shell command (interactive shell if no command given)
                             (-e: choose escape character, or "none"; default '~')
                             (-n: don't read from stdin)
                             (-T: disable PTY allocation)
                             (-t: force PTY allocation)
                             (-x: disable remote exit codes and stdout/stderr separation)
adb emu             - run emulator console command
adb logcat [  ] - View device log
adb forward --list           - list all forward socket connections.
                             the format is a list of lines with the following format:
                                 " "  " "  "\n"
adb forward   - forward socket connections
                             forward specs are one of:
                               tcp:
                               localabstract:
                               localreserved:
                               localfilesystem:
                               dev:
                               jdwp: (remote only)
  adb forward --no-rebind  
                           - same as 'adb forward  ' but fails
                             if  is already forwarded
  adb forward --remove  - remove a specific forward socket connection
  adb forward --remove-all     - remove all forward socket connections
  adb reverse --list           - list all reverse socket connections from device
  adb reverse   - reverse socket connections
                             reverse specs are one of:
                               tcp:
                               localabstract:
                               localreserved:
                               localfilesystem:
  adb reverse --no-rebind  
                           - same as 'adb reverse  ' but fails
                             if  is already reversed.
  adb reverse --remove 
                           - remove a specific reversed socket connection
  adb reverse --remove-all     - remove all reversed socket connections from device
  adb jdwp                     - list PIDs of processes hosting a JDWP transport
adb install [-lrtsdg] 
                           - push this package file to the device and install it
                             (-l: forward lock application)
                             (-r: replace existing application)
                             (-t: allow test packages)
                             (-s: install application on sdcard)
                             (-d: allow version code downgrade (debuggable packages only))
                             (-g: grant all runtime permissions)
adb install-multiple [-lrtsdpg] 
                           - push this package file to the device and install it
                             (-l: forward lock application)
                             (-r: replace existing application)
                             (-t: allow test packages)
                             (-s: install application on sdcard)
                             (-d: allow version code downgrade (debuggable packages only))
                             (-p: partial application install)
                             (-g: grant all runtime permissions)
adb uninstall [-k]  - remove this app package from the device
                             ('-k' means keep the data and cache directories)
adb bugreport []       - return all information from the device that should be included in a       zipped bug report.
                             If  is a file, the bug report will be saved as that file.
                             If  is a directory, the bug report will be saved in that directory with the name provided by the device.
                             If  is omitted, the bug report will be saved in the current directory with the name provided by the device.
                             NOTE: if the device does not support zipped bug reports, the bug report will be output on stdout.
adb backup [-f ] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] []
                           - write an archive of the device's data to .
                             If no -f option is supplied then the data is written
                             to "backup.ab" in the current directory.
                             (-apk|-noapk enable/disable backup of the .apks themselves
                                in the archive; the default is noapk.)
                             (-obb|-noobb enable/disable backup of any installed apk expansion
                                (aka .obb) files associated with each application; the default
                                is noobb.)
                             (-shared|-noshared enable/disable backup of the device's
                                shared storage / SD card contents; the default is noshared.)
                             (-all means to back up all installed applications)
                             (-system|-nosystem toggles whether -all automatically includes
                                system applications; the default is to include system apps)
                             ( is the list of applications to be backed up.  If
                                the -all or -shared flags are passed, then the package
                                list is optional.  Applications explicitly given on the
                                command line will be included even if -nosystem would
                                ordinarily cause them to be omitted.)
adb restore            - restore device contents from the  backup archive
adb disable-verity           - disable dm-verity checking on USERDEBUG builds
adb enable-verity            - re-enable dm-verity checking on USERDEBUG builds
adb keygen             - generate adb public/private key. The private key is stored in ,
                             and the public key is stored in .pub. Any existing files
                             are overwritten.
adb help                     - show this help message
adb version                  - show version num

scripting:

adb wait-for[-]-
                           - wait for device to be in the given state:
                             device, recovery, sideload, or bootloader
                             Transport is: usb, local or any [default=any]
adb start-server             - ensure that there is a server running
adb kill-server              - kill the server if it is running
adb get-state                - prints: offline | bootloader | device
adb get-serialno             - prints: 
adb get-devpath              - prints: 
adb remount                  - remounts the /system, /vendor (if present) and /oem (if present) partitions on the device read-write
adb reboot [bootloader|recovery]
                           - reboots the device, optionally into the bootloader or recovery program.
adb reboot sideload          - reboots the device into the sideload mode in recovery program (adb root required).
adb reboot sideload-auto-reboot
                           - reboots into the sideload mode, then reboots automatically after the sideload regardless of the result.
adb sideload           - sideloads the given package
adb root                     - restarts the adbd daemon with root permissions
adb unroot                   - restarts the adbd daemon without root permissions
adb usb                      - restarts the adbd daemon listening on USB
adb tcpip              - restarts the adbd daemon listening on TCP on the specified port

networking:

adb ppp  [parameters]   - Run PPP over USB.
Note: you should not automatically start a PPP connection.
 refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
[parameters] - Eg. defaultroute debug dump local notty usepeerdns》
adb sync notes: adb sync [  ]
 can be interpreted in several ways:
- If  is not specified, /system, /vendor (if present), /oem (if present) and /data partitions will be updated.
- If it is "system", "vendor", "oem" or "data", only the corresponding partition is updated.

internal debugging:

adb reconnect                  Kick current connection from host side and make it reconnect.
adb reconnect device           Kick current connection from device side and make it reconnect.

environment variables:

ADB_TRACE                    - Print debug information. A comma separated list of the following values
                             1 or all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport, jdwp
ANDROID_SERIAL               - The serial number to connect to. -s takes priority over this if given.
ANDROID_LOG_TAGS             - When used with the logcat option, only these debug tags are printed.

其中有一些我们经常需要使用的命令,在此重点说明一下:

adb devices

adb devices用于列出当前连接到adb server的所有设备清单。

c:\>adb devices
List of devices attached
emulator-5554   device

其中 emulator-5554是DeviceID,device则是设备状态。
一般有以下状态:

offline — 实例未连接到 adb server或不响应。
device — 实例现在已连接到 adb server。
no device — 未连接模拟器/设备。

当连接了多个设备时,我们可以使用-s参数来指定需要操作的设备,-s所带参数即deviceid。另外如果多个连接的设备中只有一个通过USB连接的真机,可以使用-d参数,如果只有一个模拟器,可以使用-e参数(无需带deviceid)

adb install/uninstall

adb可以方便地向设备上进行应用的安装和卸载操作。

adb install [apkpath]      给定apk文件的路径,执行即可
adb uninstall packagename  uninstall操作需要给出应用的包名

packagename如何获得? 一般可以通过adb shell pm list packages列出确定。
通过adb shell进入/data/data目录,也可以看到所有的包

adb push/pull

adb push/pull则是文件操作
adb push [pc file path] [device file path]-- 将PC端文件上载到设备端
adb pull [device file path] [pc file path]--将设备端文件下载到PC端

adb forword

adb forward用于端口转发。可以使用 forward 命令设置将对特定主机端口的请求转发到模拟器/设备实例上的其他端口。

adb forward tcp:6100 tcp:7100

表示将PC端的6100端口的通信转发到设备端的7100端口上

adb kill-server/start-server

当adb server进程出现异常时,我们可以会用adb kill-server 命令来停止adb server进程。
adb start-server则用来启动adb server进程。但其实执行任何adb命令,在server没有运行时,都会启动adb server

adb connect/disconnect

当我们的设备在无线wifi环境下时,我们可以通过adb connect命令来连接指定ip的设备。默认设备端口是5555
adb disconnect则用于断开已经建立的连接
比如genymotion模拟器,就是默认模拟的这种连接方式

adb logcat

adb logcat用于将logcat日志信息输出到屏幕。logcat的作用我们在后文再详细说明

adb shell

adb shell则是可以直接进入设备并执行大量的系统指令。进入adb shell后,即可执行很多类linux的系统指令,如:
操作Activity manager的am命令,可以直接从命令行启动一个应用的Activity。

adb shell am start -a android.intent.action.VIEW

利用包管理器pm来卸载应用

adb shell pm uninstall com.example.MyApp

进行屏幕截图

adb shell screencap /sdcard/screen.png

录制操作视频

adb shell screenrecord /sdcard/demo.mp4

更多用法可参考: 官网说明

关于android自动化测试的更多实战操作可以参见慕课网实战课程 Android自动化测试实战 工具 框架 脚本


欢迎保留作者信息和出处进行转载,欢迎关注微信公众号:秋草说测试。 测试干货资源池


Android SDK中的必会工具-ADB_第2张图片

你可能感兴趣的:(Android SDK中的必会工具-ADB)