谷歌网站排名,wordpress北欧控,坑梓网站建设哪家好,温州网站制作推广从零搭建一套远程手机的桌面操控和文件传输的小工具
--ADB连接专题
一、前言
前面的篇章中#xff0c;我们确定了通过基于TCP连接的ADB控制远程手机的操作思路。本篇中我们将进行实际的ADB桥接的具体链路搭建工作#xff0c;从原理和实际部署和操作层面上#xff0c;从零…从零搭建一套远程手机的桌面操控和文件传输的小工具
--ADB连接专题
一、前言
前面的篇章中我们确定了通过基于TCP连接的ADB控制远程手机的操作思路。本篇中我们将进行实际的ADB桥接的具体链路搭建工作从原理和实际部署和操作层面上从零开始搭建出一个最小巧的“在本地控制位于远程且连接了局域网的Android手机设备”的系统架构和部署方案。
在方案中本文主要阐述实现原理和事件的交互方式讲述如何通过ADB中继线路的方式实现外部阿里云的公网服务器某一个公开的TCP端口对应映射一台内网手机的ADB链路的连接办法。从而实现远程访问本地Android手机的ADB数据的操控方式。 二、方案选型
既然是TCP数据转发而且运行在Android设备当中通常需要在Android的APP中进行一个ADB中继线路调度通过监听或连接转发实现远程连接过来的ADB数据能够正常发送到Android手机的“无线调试”端口或者5555的默认ADB数据端口。
我们随机在某个检索引擎中对“转发adb数据”这个描述进行数据启发性搜索。发现真的是好简单几下的步骤就搞定了内容如下 通过检索到的数据内容来看既然ADB数据是基于网络TCP连接来进行传输这么看来如果要实现ADB中继的效果将会面临的问题有两点
做ADB桥接工作Android中继APP到底是TCP服务端来做监听还是做TCP客户端去连别人如何把阿里云服务器上的公网端口上监听并接收的数据同步转发到这个手机的APP桥接的链路上进而发送到本地手机的“无线调试”端口或5555默认端口 这样的话我们可以简单的找一个黑板或白纸在上面罗列出所有的问题和设想的解决方案然后像走迷宫一样把不可行的路径给划掉剩下的就是最可能实现的候选解的方案。方案最优解自然也包含在内。
Android中App的ADB中继线路应该是TCP客户端由它来连接阿里云服务器的某个TCP端口当连接完成并且存在远程ADB客户端连接时所有的ADB数据全部经由这个TCP协议的Socket来做转发。
因为手机位于局域网内监听TCP端口没有意义阿里云服务器的连接无法直接连接进来
阿里云服务器上监听的TCP端口用于远程ADB客户端adb connect连接进来的公网端口应该是单独使用的而且最好只支持一个客户端连接。只有这样才能最大限度的保障ADB过程数据不会被加工和干扰也就是这条链路是ADB独占式使用的。这样的话手机APP的ADB中继线路就要连接阿里云服务器的另一个TCP监听端口收到ADB数据后才在这两个Socket客户端之间做完全的数据交换。
如果都连接到同一个端口就需要区分出哪个是A路和B路就需要增加额外的指令。当然这样做也是可以的只要能确保手机ADB中继线路要先于远程ADB客户端之前连接上来就能实现正常的数据转发。
Android中App不用急着连接手机5555默认ADB端口应等待远程ADB客户端发出数据过来到手机时再向本地手机5555端口建立新的TCP客户端连接连接成功后再转发数据和接收数据返回即可。 经过以上三步即可正常的实现ADB数据的桥接和数据中继转发。然而问题来了Android的App如何知道要连接阿里云服务器的哪个端口以及什么时候连接、什么时候断开这条中继ADB线路的连接
这个问题我觉得很简单App启动的时候直接连接云服务器的固定端口App退出的时候就断开云服务器的TCP连接即可。^V^。
如果想要灵活的控制想在App运行的过程中需要的时候再连接不需要的时候就断开ADB中继那么就需要App和阿里云服务器之间保持一条TCP长连接由外部APP或网页根据需要去下发指令来开启或关闭ADB中继线路。
其实没有必要搞那么复杂净整些没用的
这样经由我们简单的分析就初步得出了本次主题目标“通过ADB中继线路的方式实现外部阿里云的公网服务器某一个公开的TCP端口对应映射一台内网手机的ADB链路的连接办法”从理论上应该是没有问题正常能数据收发的。 附注在这里还会有另外一个问题假设不想让“无线调试”端口变动能不能用代码的方式自动将默认ADB调试端口映射到5555上
我们也简单的检索了一下发现很难目前现有的方案都是在Root的手机上使用su权限来执行的如下图所示。专门为了一个每次重启手机后只要设置一次就可以一直使用的功能专门限定在Root环境着实没有必要。手动执行adb tcpip 5555去配置吧。反正重启手机这个操作频率非常的低。 三、GitHub上可供参考的方案
接下来就处于实际搭建环境的验证思路的过程。作为一个正常的中国人为了不闭门造车在动手之前我们应该要先去GitHub等开源方案上找一找看看是不是已经有现成的方案了有的话直接部署验证就行没有的才说要自己动手实现一遍进行开发。非常的合理。
我们在GitHub上使用【ADB】和【Remote ADB】作为检索关键字提取了一堆的内容粗略筛选了一下大致有下面4个项目库跟本次主题沾边内容描述如下
AdbLib下载路径为https://github.com/cgutman/AdbLib也是adbLib下载路径为https://codeload.github.com/tananaev/adblibAdbLib下载路径为https://codeload.github.com/tytydraco/LADBRemoteADB下载路径为https://github.com/jarhot1992/Remote-ADB
事实上这一堆的GitHub内容不能说毫无用处基本就是瞎扯淡。都是一些如下图这样的内容我们自己又不做ADB客户端整这堆花里胡哨的有什么用。还不如专注自己的主题方向。 四、程序的部署方式和运作原理
如上面第二章节的内容所述【
Android中App的ADB中继线路应该是TCP客户端由它来连接阿里云服务器的某个TCP端口当连接完成并且存在远程ADB客户端连接时所有的ADB数据全部经由这个TCP协议的Socket来做转发。
因为手机位于局域网内监听TCP端口没有意义阿里云服务器的连接无法直接连接进来
阿里云服务器上监听的TCP端口用于远程ADB客户端adb connect连接进来的公网端口应该是单独使用的而且最好只支持一个客户端连接。只有这样才能最大限度的保障ADB过程数据不会被加工和干扰也就是这条链路是ADB独占式使用的。这样的话手机APP的ADB中继线路就要连接阿里云服务器的另一个TCP监听端口收到ADB数据后才在这两个Socket客户端之间做完全的数据交换。
如果都连接到同一个端口就需要区分出哪个是A路和B路就需要增加额外的指令。当然这样做也是可以的只要能确保手机ADB中继线路要先于远程ADB客户端之前连接上来就能实现正常的数据转发。
Android中App不用急着连接手机5555默认ADB端口应等待远程ADB客户端发出数据过来到手机时再向本地手机5555端口建立新的TCP客户端连接连接成功后再转发数据和接收数据返回即可。
】
我们就简单的搭建了一个位于阿里云服务器的程序以及一个运行于本地Android手机的APP程序用于ADB中继线路和ADB数据的桥接实现效果如下 本地手机App的ADB中继连接的输出日志如下 这样当一切就绪后在远程的电脑上使用【adb connect 120.78.211.195:20377】即可正常的ADB连接到目标手机。
远程电脑中安装并使用Scrcpy/QtScrcpy界面工具操作手机双击后会弹出新的界面框显示本地手机当前的桌面界面远程操作人员可以直接在图中滑动和点击像操作本地放在电脑旁边的手机一样操作远程的手机设备如下图所示 五、前提条件和风险点
前文也说了要想实现这么一套逻辑需要依赖3大硬件和软件条件如下
有一台具有公网IP和端口的云服务器阿里云/腾讯云/华为云等。有一台Android手机作为被控制的目标手机。^V^。目标Android手机要开启【开发者模式】并使用【adb tcpip 5555】命令将ADB映射的端口强制转换到手机的5555端口。
三者缺一不可搞定了之后就可以使用电脑或者手机版本的Scrcpy/QtScrcpy客户端对被控制的手机进行直接的操作啦非常的简单。 六、总结
一顿操作我们采用了最简洁的方式实现了通过ADB中继线路的方式实现外部阿里云的公网服务器某一个公开的TCP端口对应映射一台内网手机的ADB链路的连接办法。从而实现远程访问本地Android手机的ADB数据的操控方式。
如果要并发上线的话这个模式可以支持成千上万的手机连接到公网服务器的映射端口每个手机只需要分配一个单独的端口即可。
服务器也可以灵活的实现使用的时候再分配端口给某个具体的目标被控手机通过下发指令的方式让目标手机主动建立ADB中继连接降低服务器资源的负担。 上一篇本地Android手机如何被远程访问和文件上传下载操作
下一篇编写中。