adb(Android Debug Bridge)是Android 提供的一个通用的调试工具,借助这个工具,可以管理设备模拟器的状态 。还可以进行以下的操作:
1、快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
2、在设备上运行shell命令;
3、管理设备或手机模拟器上的预定端口;
4、在设备或手机模拟器上上传下载文件


Android的linux shell做了大量精简,很多linux常用指令都不支持

1.adb shell

通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux 的命令,如果只想执行一条命令,可以输入adb shell cmd

eg:adb shell dmesg会打印出内核的调试信息

adb shell logcat v会打印出log信息

adb shell ls列出设备的目录列表

2.上传文件: adb push <PC文件> </tmp/...>
下载文件: adb pull </tmp/...> <PC文件>

/tmp/...指的是在设备linux环境中要操作文件的路径

eg: adb push key data/app 就是将key文件上传到用户目录中

3.安装程序: adb install <*.apk>
卸载软件: adb unistall apk(注意卸载的时候和安装的时候的文件名是不一样的,例如安装的时候adb shell GPSStatus2b2.apk,这个apk文件就被安装在data/app目录下,但是使用uninstall的时候,首先要到、data/app目 录下查看安装的apk文件在linux目录下的文件名,发现是com.eclipsim.gpsstatus.apk,使用adb uninstall com.eclipsim.gpsstatus.注意不要加apk后缀。返回success结果证明文件卸载成功)。
补充一点,通过adb安装的软件(*.apk)都在"/data/app/"目录下,所以安装时不必制定路径。

卸载的时候当然也可以直接到目录下使用rm命令也可。

4.显示android模拟器状态:
adb devices列出所有连接的设备

adb get-serialno 打印设备序列号

adb version 列出ADB的版本号

adb get-state 打印出的结果一般是offline | bootloader | device

5.等待正在运行的设备: adb wait-for-device

6.adb start-server

adb kill-server 一般在键入adb shell命令后显示device offline或者是显示有多个设备的情况下使用

7.adb remount 重新挂载系统分区,就是将系统分区重新挂载为可写。

8. adb root使用管理员权限

9. adb bugreport打印除所有的bug信息

10.adb shell logcat -b radio 记录无线通讯日志: 一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:

11.adb emu
12.端口转发: adb forward adb forward tcp:5555 tcp:1234
(将默认端口TCP 5555转发到1234端口上)

补充一下adb的构架:

adb 是一个客户端—服务器程序,它包括三个组件:

1.client

which runs on your development machine. You can invoke a client from a shell by issuing an adb command. Other Android tools such as the ADT plugin and DDMS also create adb clients.

感性的认识,也就是右边这张图片:

2. server

which runs as a background process on your development machine. The server manages communication between the client and the adb daemon running on an emulator or device.

这里值得一提的是,这里的 client server 应该都只是线程的,而不是像我之前所理解的是两个进程。因为在 Process Explorer 中,我只找到了一个 adb 进程。在打开模拟器之前,该进程共有两个线程;而打开了模拟器之后,一共有四个线程,见下面两张图。再次把 Eclipse 关闭,发现这个 adb 进程还在:线程为两个,说明这两个应该就是服务器端。

3.daemon (守护进程):

which runs as a background process on each emulator or device instance.

client server 的连接(当开启 adb 命令行时):

客户端检查下服务进程是否存在?如果不存在的话,就启动服务进程。然后服务进程绑定到 5037 端口开始监听客户端的请求。

server daemon 的连接:

server 通过扫描 5555 5585 的奇数端口来定位模拟器实例,一旦在这些端口中找到模拟器中的 daemon ,就和这个端口建立连接。

server 工作的单一性:

虽然 server 在两端能连接多个 client 和模拟器,但是一次只能把 commands 传送给一个模拟器。也就是说,你要操作另外一个模拟器了,你必须用下面的命令来切换( Directing Commands to a Specific Emulator/Device Instance ):

adb -s <serialNumber> <command>

结语:

因为觉得 adb 整个架构还蛮好玩的(从来没写过这种架构的完整程序,以后可以看下 adb 的源码,应该是开源的吧!),所以就写下了这篇文章,不知道是不是做了一件无聊的事 ( o )

更多相关文章

  1. adb(Android(安卓)Debug Bridge)(一)
  2. 页面调用ADB操作Android设备
  3. android adb介绍
  4. 提升基于英特尔® 架构的 Android* 模拟器的速度
  5. Android(安卓)设备关闭实体按键
  6. Android(安卓)渗透测试学习手册 第一章 Android(安卓)安全入门
  7. 使用fastboot命令刷机流程详解
  8. 解决AndroidStudio连不上Android设备真机的问题
  9. Android* 4.3 (Jelly Bean) x86 模拟器系统映像

随机推荐

  1. android使用全局变量的两种方法
  2. pygame for android汉字显示问题
  3. 四大布局 使用详解
  4. android gradle plugin 1.3.0 以上使用 p
  5. Android NestedScrolling机制完全解析 带
  6. android - SAX解析XML数据
  7. Android内存分析和调优(下)
  8. ubuntu12.04 64bit编译android ics4.0代
  9. 【Android开篇】开始 Hello Android
  10. 短信的收发及在android模拟器之间实践(3)