Android开发工具ADB教程之一:ADB概论

本文介绍了Android Debug Bridge(ADB)在Android开发中的重要角色,它作为一个桥梁连接开发者和设备。ADB由client、server和daemon三部分组成,分别在开发机器和目标设备上运行。client和server通过TCP端口5037交互,daemon则处理设备上的请求。通过阅读源代码,可以了解ADB如何处理client请求,与emulator或真实设备进行通信。整个流程包括client发起命令、server处理请求、转发到设备、设备处理并返回结果。

      Android开发人员进行Android开发时,会像其他开发一样需要进行各种调试。Android Debug Bridge即adb就是Android开发者必会的一种调试工具,它的功能非常丰富,正如其名一样,它在Android开发者和设备之间起了一个很好的桥梁的作用。

       adb的用法很简单,只要看完SDK文档关于ADB的部分,(android-sdk-linux_86/docs/guide/developing/tools/adb.html),再稍加练习,基本上就满上就能很熟练的使用了。但是对它的实现感兴趣,最好的途径就是阅读源代码,它android 2.2的位置是:system/core/adb

       adb是slient-server架构的,包含三个部分,

       1、client,运行于开发机器,你可以在shell中调用adb命令,其它的Android工具比如ADT插件和DDMS也包含adb client。

       2、server,作为后台进程同样运行于开发机器,server负责管理client和运行于目标机器或者emulator的守护进程之间的通信,就像一座桥一样。

       3、daemon,运行于目标机或者emulator的守护进程。

       上面这段话是SDK里面翻译过来的,我是看adb的代码看的有点迷糊,才去看sdk的,再返回来看代码的时候思路清晰很多。

       adb的功能强大,而且支持多平台,但是它的代码却非常精简,只有1.5万行左右,代价就是比较晦涩难懂(看懂以前),代码里面随处可见的各种宏让人眼花缭乱,其中一个重要的宏ADB_HOST,是用来区分本地主机和目标机器的。

       client和server调用的是adb:

       LOCAL_CFLAGS += -O2 -g -DADB_HOST=1  -Wall -Wno-unused-parameter
       LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE -DSH_HISTORY
       LOCAL_MODULE := adb

       而emulator/device调用adbd:

       LOCAL_CFLAGS := -O2 -g -DADB_HOST=0 -Wall -Wno-unused-parameter
       LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE
       LOCAL_MODULE := adbd

       1、在HOST端,adb会fork出一个守护进程(不是adbd),即server,而父进程继续处理client请求,所有的client通过TCP端口号5037进行与server通信,而server创建local socket与remote socket,前者用于和client通信,后者用与远端进行通信,emulator通过TCP,real device则通过usb。

       2、在emulator/device端,adbd也创建local socket和remote socket,前者与通过jdwp与Java虚拟机进层通信,后者通过TCP/USB与HOST通信。

       因此整个流程应该是这样的:

       1、client调用某个adb命令。

       2、adb进程fork出一个子进程作为server。

       3、server查找当前连接的emulator/device。

       4、server接收到来自client请求。

       5、server处理请求,将本地处理不了的请求发给emulator/device。

       6、位于emulator/device的adbd拿到请求后交给对应的java虚拟机进程。

       7、adbd将结果发回给server。

       8、server讲结果发回给client。

       如下图:

本文发布:Android开发网

本文地址:Android开发工具ADB教程之一:ADB概论-Android开发环境 -Android开发网

 

本帖最后由 591691826 于 2013-4-10 13:32 编辑 0.我只说些常用的以及目前用的到的 1.下载附件。解压后拷到c:windows\system32里面。 2.打开运行(快捷键windows键+R)输入cmd 回车。 3.输入adb devices 可以获取当前连接的设备。 4.输入adb shell 回车 接着输入su。这时候$变成#。说明你已经取得权限了,可以进行各项调试命令了。 5.如果要从电脑上传送文件到手机的话,使用adb push命令。格式:adb push 本地路径 手机路径 ;举例:把c盘根目录下的456.txt传送到system。则:adb push c:\456.txt /system/ 传送文件到system文件夹的话。需要先挂载system分区。再改读写权限。 如下:mount -o rw,remount -t yaffs2 /dev/block/mtdblock1 /system回车 (这是挂载分区) chmod 777 /system回车 (修改权限为可读) 这两步做完后退出shell指令端(exit回车 exit回车)就可以push文件到system里面去了。 如果push文件到sdcard卡的话。一般来说直接push就行。如果出现premission denied 的话,需要修改sdcard权限为可读写。即chmod 777 sdcard。 6。adb pull 是从手机传送文件到电脑上。格式: adb pull 手机路径 电脑路径 。会push的话pull很简单。大同小异嘛。 7.关于这个地方的权限,具体说下: 在Unix和Linux的各种操作系统下,每个文件(文件夹也被看作是文件)都按读、写、运行设定权限。例如我用ls -l命令列文件表时,得到如下输出: -rw-r--r-- 1 bu users 2254 2006-05-20 13:47 tt.htm 从第二个字符起rw-是说用户bu有读、写权,没有运行权,接着的r--表示用户组users只有读权限,没有运行权,最后的r--指其他人(others)只有读权限,没有写权和运行权。这是系统默认设置,我可以改写tt.htm,同组的人和其他人只有权读,没人有权运行,因为只是一个html文件,不必运行。这在Novell的directory services之前很先进。 读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,rw-r--r--用数字表示成644。 反过来说777就是rwxrwxrwx,意思是该登录用户(可以用命令id查看)、他所在的组和其他人都有最高权限。 再多说一句。我用chmod o-r tt.htm命令改权限,o-r是others的权限中减掉读。结果是 -rw-r----- 1 bu users 2254 2006-05-20 13:47 tt.htm 如果用命令chmod 777 tt.htm,结果是 -rwxrwxrwx 1 bu users 2254 2006-05-20 13:47 tt.htm 任何人都有读、写、运行三项权限。8。以后比如替换系统文件神马的不能开机。可以通过救援模式下adb命令替换系统文件并该权限即可。 .想写的就是这么多了。仅把我的心得告诉大家。内容编辑可能有些混乱。不好意思。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值