Android自动化初探:ADB
Info:经过一段时间的准备,从今天开始自学Android之旅,初步学习会有疏漏,以后的每篇文章,我都会不断修改补全,直到完美。
2014-10-09:初版
--------------------------------------------
Google官方文档连接:http://developer.android.com/tools/help/adb.html
ADB概述:
Android Debug Bridge,Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具,采用了客户端-服务器模型,包括三个部分:
1、客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端。
2、服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。
3、守护进程部分,运行于模拟器或手机的后台。
当启动adb客户端时,客户端首先检测adb服务端进程是否运行,如果没有运行,则启动服务端。当服务端启动时,它会绑定到本地的TCP5037端口,并且监听从adb客户端发来的命令——所有的adb客户端都使用5037端口与adb服务端通信。
接下来服务端与所有正在运行的模拟器或手机连接。它通过扫描5555-5585之间的奇数号端口来搜索模拟器或手机,一旦发现adb守护进程,就通过此端 口进行连接。需要说明的是,每一个模拟器或手机使用一对有序的端口,偶数号端口用于控制台连接,奇数号端口用于adb连接,例如:
Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557 ...
即如果模拟器与adb在5555端口连接,则其与控制台的连接就是5554端口。
当服务端与所有的模拟器建立连接之后,就可以使用adb命令来控制或者访问了。因为服务端管理着连接并且可以接收到从多个adb客户端的命令,所以可以从任何一个客户端或脚本来控制任何模拟器或手机设备。
ABD位置:
adb
tool in <sdk>/platform-tools/
.
adb命令:
从开发用电脑的命令行或脚本文件中使用adb命令的用法是:
adb [-d|-e|-s <serialNumber>] <command>
当使用的时候,程序会调用adb客户端。因为adb客户端不需要关联到任何模拟器,所以如果有多个模拟器或手机正在运行,就需要使用-d参数指定要操作的是哪一个。
查看adb版本信息
adb version
查询模拟器或手机状态
adb devices
执行结果是adb为每一个设备输出以下状态信息:
序列号(serialNumber) — 由adb创建的使用控制台端口号的用于唯一标识一个模拟器或手机设备的字符串,格式是 <设备类型>-<端口号>,例如: emulator-5554
状态(state) — 连接状态,其值是:
offline — 未连接或未响应
device —已经连接到服务商。注意这个状态并不表示Android系统已经完全启动起来,系统启动的过程中已经可以连接adb,但这个状态是正常的可操作状态。
每一个设备的输出形如:
[serialNumber] [state]
下面是 devices 命令和其执行结果:
$ adb devices List of devices attached emulator-5554 device emulator-5556 device emulator-5558 device
如果没有模拟器或手机在运行,则什么都不返回。
启动和结束adb服务:实际调试过程中,经常有连接上手机但是adb devices查不到手机状态的情况,可通过下面的命令重启adb服务
adb kill-server :结束adb服务
adb start-server :启动adb服务
安装apk
adb -e install c:\apps\MyFirstApp.apk只有一个设备的时候:
adb -s emulator-5554 install c:\apps\MyFirstApp.apk :安装指定手机指定目录下的apk(真实手机是-d),成功后返回success。
如果输入错误,会报错。
卸载APK
方法一:
adb uninstall [-k] <package>。
其中package表示需要卸载的应用的包的名字,k表示是否保留应用的配置信息和cache数据。
adb -s emulator-5554 uninstall com.example.myfirstapp :卸载程序(根据包名), 成功后返回success。
方法二:
手动删除。
adb shell
cd /data/app
rm myfirstapp.apk
然后 rm com.example.myfirstapp-1.apk ,不过好像模拟器没有实时更新,图标还在,不过尝试打开的时候,会报错。
复制apk到sd卡
adb -s emulator-5554 push c:\apps\ESFileExplorer.apk /sdcard/delon/123.apk :复制apk到sd卡(从C盘目录下的ESFileExplorer.apk复制到sd卡中以123.apk命名,也可以复制目录)
复制apk到本地磁盘
adb -s emulator-5554 pull /sdcard/delon/123.apk c:\test\ESFile.apk :复制apk到本地磁盘(从sd卡中的123.apk复制到c盘,有重命名功能)
删除掉sd卡中的制定目录
adb -s emulator-5554 shell rm -R /sdcard/delon : 无任何提示表示删除成功(同时会删除掉文件夹内的所有文件)
如果删除失败,则提示:
写入日志文件:
adb -s emulator-5554 logcat > c:\info.txt :将日志信息写入到文件中-这个等下次monkey的学习阶段,在详细介绍。
------------------------写在后面---------------------------
看不懂英文,又觉得文章内容不够的,可以去看google文档中文翻译:http://www.jizhuomi.com/android/environment/191.html