你的位置:首页 > 操作系统

[操作系统]常用的adb命令


在平时的工作中,会经常用到adb命令,在这里稍微整理了一下。那标题也许改为“我常用的adb命令”也许更确切一些。anyway,进入正题。

一.概要

1.什么是adb?

adb全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方便通过DDMS来调试Andriod程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。

2.adb工作原理

不是很理解?那就来看看它的工作原理吧。

adb

上图是一个简单的adb工作原理图。adb本身是一个客户端服务器应用程序,由三个组件组成:Client,Server,Daemon。

当你启动一个adb Client(客户端),客户端首先确认是否已有一个adb Server(服务器)进程在运行。如果没有,则启动服务进程。当服务器运行, adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令。

接着服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到 了adb daemon(守护程序),它将建立一个到该端口的连接。请注意任何模拟器或设备实例会取得两个连续的端口:一个偶数端口用来相应控制台的连接,和一个奇数端口用来响应adb连接。

一旦服务器与模拟器/设备实例建立连接,就可以使用adb命令控制和访问该实例。

3.adb的作用

借助adb工具,我们可以管理设备或手机模拟器的状态,还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。简而言之,adb就是连接Android手机和PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。

二.常用命令

这个部分当然是介绍adb到底怎么用了。

1. adb devices

查看当前连接的设备(连接计算机的Android设备或者模拟器)。

image

 

2.adb install

adb install <apk文件路径>,将指定的apk安装到设备上,安装的apk包会放在/data/app目录下。

几个参数:

-r 强制安装

-d(真机,多个设备中只有一个真机时适用)

-e(模拟器,多个设备中只有一个模拟器时适用)

-s(指定设备,后接序列号)

adb –s 44a188f9 install –r test.apk(其中44a188f9即序列号,通过adb devices可获取)

 

3.adb uninstall

adb uninstall <apk包名>

adb uninstall –k <apk包名>

-k参数为卸载软件时保留配置和缓存文件

 

4.adb reboot

重启设备

 

5.adb shell

通过adb shell 命令,就可以进入设备或者模拟器的shell环境了,在这个Linux shell中,我们就可以执行各种Linux命令了。

如果只想执行一条shell命令,就可以采用:adb shell [shell_command]

使用时常与grep或findstr一起使用,起到过滤作用。

 

6.adb shell su

前提手机已经root。获取adb shell的root权限。

用su提权,用户命令提示符有$变成#,如果手机没有root,会提示su:permission denied。

 

7.adb shell ps/top

查看当前终端中的进程信息,如pid等

 

8.adb shell am/pm

am全称为activity manager,使用am模拟各种系统的行为,如去启动一个activity,强制停止进程,发送广播进程,修改设备屏幕属性等。

如:adb shell am start <apk包名>/<activityName>:启动一个activity。

pm全称为package manager,利用pm命令可模拟android行为或查询设备上的应用等。

如:adb shell pm list packages

列出当前设备所有已安装的程序的包名。

更详细的内容可查看参考文献3和参考文献4。

image

说明:

管道符“|”:可以把标准的输入流与标准的输出流进行合并,或者把某个命令的标准输出流作为另一个命令的标准输入流。exit退出shell。

由于grep为linux命令,运行单条adb shell 时并没有进入linux shell环境,并不能用grep等其他linux命令,只能用window cmd的命令。

在这里可以用findstr来代替grep,使用 findstr [keyword]

对于常用的linux命令和常用的windows 控制台命令,再另作介绍。

 

9.adb pull 和 adb push

adb pull <remote> <local>:从模拟器或设备中复制文件到本地。

adb push <local> <remote>:将本地文件或目录复制到模拟器或设备。

 

10.adb shell dumpsys

Android提供的dumpsys工具用于查看感兴趣的系统服务信息与状态。

参考下表:

11

 

11.adb shell monkey

跑monkey是android自动化测试的一种手段,monkey测试本身很简单,就是模拟用户的按键输入,触摸屏输入,手势输入等。当Monkey程序在模拟器或设备运行的时候,如果用户比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件。

image

说明:第一个-s指定设备,如果只连接了一台设备,可省略。

-p <apk包名>只允许系统启动指定的app,如果不指定,将允许系统启动设备中的所有app,也可指定多个包。

--throttle <毫秒数> 指定用户操作(事件)间的时延。

--ignore-crashes 指定当应用程序崩溃时,Monkey依然发送事件,直到事件计数完成。

--ignore-timeouts 当应用程序发生ANR错误时,Monkey依然会发送事件,直到事件计数完成。

第2个-s,用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

-v 用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别。level 0 1 2,其中level 2说明是最详细的日志,包括了测试中选中/未选中的Activity信息。

最后的数字(这里是500)表示Monkey程序模拟500次随机用户事件。

>输出测试结果到D:\monkeylog.txt

更详细的参数可查看参考文献5。

部分测试结果如下:

image

 

参考文献:

1.Android调试桥:http://www.iteye.com/topic/260042

2.Android性能分析工具dumpsys的使用:http://www.open-open.com/lib/view/open1405061994872.html

3.adb shell 中的am pm命令:http://www.android100.org/html/201312/09/4957.html

4.adb shell 启动应用程序的方法:http://blog.chinaunix.net/uid-26997997-id-3350449.html

5.Monkey压力测试详解:http://blog.csdn.net/huangbiao86/article/details/8490743