这篇文章上次修改于 485 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
设想你有很多手机,但是一般也就带两个手机在身边,多不方便...
结合本方案,再打通公网访问,就能随时随地访问你的『云真机』了
前言
在之前的文章中,介绍了ya-webadb + websockify
实现在浏览器中远程控制手机
但根据个人体验,基于无障碍实现的Android到Android远程控制体验并不好
综合体验还是scrcpy体验更好,所以这里就根据这篇文章再扩展一下,实现基于scrcpy的Android到Android远程控制
其实这个功能在ya-webadb的介绍中就已经说明了:
All features are working on Chrome for Android, use a C-to-C cable or run WebSockify in Termux to connect.
本文对run WebSockify in Termux to connect
进行实践
步骤
配置Termux(被控方手机)
下载安装:
配置环境:
- 选择一个国内源
termux-change-repo
- 更新升级
pkg update
pkg upgrade
- 安装
android-tools
pkg install android-tools
配置ADB
这一步的最终目的是开启ADB无线调试,并运行在固定端口,也就是adbd进程要监听在固定端口
如果你恰好有电脑、电脑配置好了ADB,并且能用数据线连接电脑,那么在手机连接好电脑之后,执行下面的命令即可:
adb tcpip 5555
如果没有电脑,但是有Android到Android远程控制
的需求,那么肯定有至少两个手机,那么按下面的步骤操作:
- 被控方手机连接到控制方手机的热点,因为无线调试必须要连接WIFI
- 打开开发者模式,进入开发者模式开启无线调试功能
- 进入无线调试界面,在该界面进行分屏,选择termux
- 点击
使用配对码配对设备
- 在termux中输入
adb pair ip:port
,回车输入无线调试界面上的配对码,再次回车确定
- 配对成功后输入
adb connect ip:port
进行连接,注意这里的端口和上一步的不一定相同,以你的界面上的端口为准 - 连接上之后输入
adb tcpip 5555
,这样ADB就会在5555上监听了
无线调试界面上的端口会再次刷新,但是已经不用担心了,这个时候关闭WIFI也不会影响了
用netstat可以发现监听了两个端口,如果断开WIFI,那么另外一个监听会消失,但是5555不会
oriole:/ # netstat -tunlp | grep adbd
tcp6 0 0 [::]:45579 [::]:* LISTEN 7498/adbd
tcp6 0 0 [::]:5555 [::]:* LISTEN 7498/adbd
PS,netstat这个命令root下才能看到进程名,这里是为了说明确实监听了5555端口
配置Termux(控制方手机)
控制方需要在termux中安装websockify
这个库,同样先安装好termux,然后执行下面的命令:
- 选择一个国内源
termux-change-repo
- 更新升级
pkg update
pkg upgrade
- 安装python等环境
pkg install python
pkg install rust
pkg install binutils
pip install cffi
pip install setuptools
pip install setuptools_rust
pkg install python-numpy
- 安装websockify
下载websockify代码,放入sdcard下并解压(记得先手动开启termux的存储访问权限)
当然直接在termux中下载解压也是一样的,解压路径没有要求
然后在termux中进入解压目录,执行下面的命令安装websockify
python setup.py install
最终成功安装的截图:
远控测试
在termux中执行下面的命令,其中192.168.1.118
是被控方手机ip
注意两个手机应该在同一个局域网,当然一个给另外一个开热点也行
python -m websockify 5555 192.168.1.118:5555
或者在termux中进入websockify解压目录,运行下面的命令
python websockify 5555 192.168.1.118:5555
然后打开在线网页:https://yume-chan.github.io/ya-webadb/scrcpy
点击Add
,选择WebSocket
,输入ws://127.0.0.1:5555
,然后点击Connect
注意第一次连接的时候,被控方手机会弹出USB调试授权,记得允许
在Scrcpy
一栏,将Forward Audio
关掉(可选,因为这个打开了可能会影响连接),然后点击Start
即可
最后来看一下效果吧
总结
被控方只要能开无线调试,然后控制方手机在同一局域网,那么adb配对也可以在控制方这边完成,这样被控方就不用安装termux了
- 我这里拆开步骤,主要是担心有用户的网络有问题,局域网不通什么的...
- 当然一个设备给另一个开热点肯定没问题
- ya-webadb在移动端全屏后,控制延时其实有一点高,主要是涉及编解码之类的,不过优势是操作跟手,双指缩放也能做到;最重要的是,全屏状态下和用自己手机一样,不像一些远程控制软件操作很割裂
应用场景:
- 控制电视端APP,有些APP的控件无法通过遥控器定位到,而且遥控器操作很慢
- 异地组网批量控制,虽然这个有更多方案,但这个方案作为自己用还是有可取之处
- ya-webadb除了scrcpy功能,还提供了文件管理、shell和安装apk等功能
缺点:
- 不管怎么设置清晰度似乎还是不够,但是用PC端scrcpy直接投屏清晰度明显好很多,不知道这个是怎么回事
- 解码都在手机上,控制方会多用些CPU算力
能实现本文效果的还有:
- 缺点:只有iOS
- 测试未成功
- 测试未成功
- 大体上还好,不过开发者似乎维护精力有限
上面的操作步骤总结如下:
- 被控方开启无线ADB,监听5555端口
- 控制方配置websockify,监听5555端口,转发远程websocket请求与被控方交互
- 控制方通过浏览器访问websocket,实现远程控制
这个过程可以也有其他组合,比如websockify这一部分也可以在被控方运行
不过这一定程度上会加重被控方的负担,自行取舍
比如被控方是安卓TV,众所周知安卓TV性能一般不咋样,而且要安装APP,还做这么多操作肯定很麻烦
这个时候安卓TV只管开无线调试即可,其他的都交给控制方实现
甚至可以让你的路由器、开发板来做websockify这一部分,啊,板子终于不用吃灰了
只有一条评论 (QwQ)
大佬牛逼,打卡一下