博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
adb通信协议分析以及实现(三):adb网络通信部分解析
阅读量:5885 次
发布时间:2019-06-19

本文共 825 字,大约阅读时间需要 2 分钟。

这篇文章说下adb和adb服务进程之间通信的socket协议。

adb服务进程启动之后,会监视本地的5037端口,使用的是TCP协议,所以adb发送的命令其实就是往本地的5037端口发送数据,做过网络编程的都知道,本机可以用127.0.0.1 IP地址。有了IP地址和端口号socket通讯就没问题。

1.命令发送方式:

  命令以字节流发送,字符串需要编码城uft8。一个命令需要发送两部分内容。先把命令的长度发送过去,然后发送命令本身。比如“abcdeffddssddssd”

  1)先发送命令的长度:

  int iLen = strlen("abcdefghijklmn");

  char tmp[5];

  sprintf(tmp, "%04x", iLen);

  senddata(tmp,4);  //发送数据的函数,tmp 缓存地址,4 表示 4个字节大小

  2)发送命令本身:

  senddata("abcdefghijklmn",iLen);

  3)命令发送完之后,需要接收服务器的数据。正常情况下服务器会返回一个4字节的状态。    OKAY,表示处理成功

  char tmp[5];

  int iRead = readdata((byte*)tmp,4);

  if (0 == memcmp(tmp,"OKAY",4)){

  //接收成功

  }else{

  //失败了

  }

以上就是非常简单的命令。有些复杂的命令处理方式,比如安装apk,那就需要做更多的事情。要把文件传输到手机,然后发送安装命令。 这些复杂的命令也只是处理的命令,格式多一些。参照adb 的源码就可以自己写出来了。

这里大致说一下

1) 发送一个sync 命令,带上需要拷贝文件的目的路径

2) 发送文件的内容

3) 发送一个 shell:pm 命令启动安装

adb通信协议分析以及实现(一):

adb通信协议分析以及实现(二):

adb通信协议分析以及实现(三):

adb通信协议分析以及实现(四):

转载地址:http://rmlix.baihongyu.com/

你可能感兴趣的文章
U盘启动盘制作工具箱 v1.0
查看>>
增强myEclipse的提示功能
查看>>
Zabbix汉化方法
查看>>
Java I/O系统基础知识
查看>>
Java多线程设计模式(2)生产者与消费者模式
查看>>
对象并不一定都是在堆上分配内存的
查看>>
刘宇凡:罗永浩的锤子情怀只能拿去喂狗
查看>>
php晚了8小时 PHP5中的时间相差8小时的解决办法
查看>>
JS(JavaScript)的初了解7(更新中···)
查看>>
svn文件管理器的使用
查看>>
for/foreach/linq执行效率测试
查看>>
js /jquery停止事件冒泡和阻止浏览器默认事件
查看>>
[翻译]Protocol Buffer 基础: C++
查看>>
runloop与线程的关系
查看>>
[Bzoj2246]迷宫探险(概率+DP)
查看>>
详解消息队列的设计与使用
查看>>
使用Sqoop从mysql向hdfs或者hive导入数据时出现的一些错误
查看>>
控制子窗口的高度
查看>>
处理 Oracle SQL in 超过1000 的解决方案
查看>>
Alpha线性混合实现半透明效果
查看>>