android adb 通信原理

adb 源码system/core/adb
adb是client-server构架,包含三个部分
1、client 运行于开发机器
2、server 作为后台进程同样运行于开发机器,server负责管理client和运行于目标机器或者emulator的守护进程之间的通信,就像一座桥一样。
3、daemon 运行于目标机或者emulator的守护进程。

源码中重要的宏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。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值