⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/android-dex-phone-to-pc/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

用过三星手机的人多半见过 DeX,一根线插上去,手机当场变成一台能办公的电脑。东西是好东西,可惜绑品牌,手里不是三星就基本没戏。

我在 GitHub 上翻到一个把这件事重做了一遍的项目,叫 Android DEX,名字借了三星的梗,做法完全是另一套。它不管你手里是什么牌子的安卓机,也不用 root,接上 ADB 就能把手机变成电脑上的一整套桌面。

先说最容易踩的一条。它免费,但不算开源。README 开头写着 closed-source,徽章也是 Closed Source,根目录那份 LICENSE 是专有许可,版权归作者、保留所有权利。自己用没问题,想商用或者改一改再发,得先拿到作者的书面授权。

它在手机上塞了两个自己的程序

官方把它写成三层结构。电脑这端是主机,界面用 Flutter 写,画面交给 scrcpy 渲染,另外自己还跑着四个本地服务。

手机那端被放进去两个程序。一个靠 adb shell app_process 拉起来,是个 Java 小包,权限落在 shell 层,能直接读系统音频、直接叫起或者杀掉应用。另一个跟着 APK 装进去,是 Kotlin 写的服务,专门读系统里的媒体会话和通知。

最能说明问题的是反向那一步,手机上的这两个程序会主动连回电脑开的端口。画面走 scrcpy 那条通道,其余信息走 ADB 反向端口。仓库里那几份架构文档把每一步、每个握手都写得很细,这在个人项目里不多见。

投屏工具做的是把手机屏幕搬到电脑上,它做的是让电脑把手机接管过去,画面只是顺带的那一路。

包体两百多兆也就解释得通了。ADB、scrcpy、上面那两个程序全被打进包里,换来的是解压即用,连 ADB 都不用自己装。Windows、macOS、Linux 三个平台都是压缩包,不用安装。仓库今年二月才建,现在两千七百多 Star、两百多个 Fork,已经发了十来个版本,改动一直很勤。v1.3 那九个压缩包加起来被下载了将近一万八千次,Windows 版占了大头。

仓库首页实时截图,Star 与 Fork 计数可读

连上以后,桌面是它自己画的

进去看到的并不是手机屏幕被放大。它自己画了一套桌面,主屏摆着时钟、日期和搜索框,下面一排应用图标,乍看像一台安卓平板。

点开应用列表,手机里装的东西都在里面,想用哪个点哪个。

官方应用列表截图,手机应用以网格列出

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

窗口能拖能缩,声音能一条一条掐掉

普通投屏的逻辑是照镜子,手机上什么样电脑上就什么样,永远只有一整块。这里每个应用各占一个窗口,大小随便拖,边上带着最小化和关闭,开三四个排一起也不打架。

官方多窗口截图,多个应用窗口并排

声音这块比画面更有意思。它给出一个媒体浮层,手机上正在放音频的应用一条一条列出来,封面、进度条、上下首都在上面。也就是说音乐照放,另一个应用的声音可以单独按掉,不用伸手去手机上切。

官方媒体控制截图,封面、进度条与切歌控件

通知和快捷开关也一并搬了过来。手机上的通知实时推到桌面,一排开关连着无线、蓝牙、移动数据、手电筒、静音和屏幕旋转,电脑上点一下手机就跟着变,电量还剩多少直接读出来。

官方控制面板截图,一排快捷开关与电量

无线连接偶尔会抖一下,这很正常。它的重连分两级,先试着把 ADB 和端口重新接上,不动手机上的东西;这一步没成,就整个重来,把手机端的服务重新推一遍再拉起来,最多试两次。界面上会显示当前走到哪一步。

手游这条线,是它藏得比较深的一张牌

这一块容易被人忽略,官方 README 却把它单独立了一节。游戏跑在你自己的手机上,触控事件走底层的原生通道,所以游戏的反作弊看到的就是一台真手机,不会按模拟器处理,原生分区和匹配都能正常进。

配套做得也挺细。按键映射能把点击、连点绑到键盘任意键或鼠标上,虚拟摇杆支持八向加死区和冲刺区,第一人称射击能锁鼠标再用陀螺仪补瞄准,右键直接开镜,连招可以录成宏,每个游戏还能单独存一套配置。

它不联网,也不留你的数据

看到 ADB 三个字就有点犯嘀咕的人,可以放心一点。官方单独写了一份安全说明,所有画面、音频、键鼠输入、剪贴板、通知都在你电脑和你手机之间处理,不经过任何服务器。软件里没有埋点也没有遥测,不采集输入、屏幕内容或设备号。整套东西离线也能跑,通信只走本地 USB 或者局域网里的 ADB。

第一次连上时手机会弹授权,得点一下确认。通知权限也要给,不给的话通知和媒体这两块会少一截功能。

装起来三件事,其中两件在手机上

第一件在电脑上,去 Releases 下对应系统的包。当前版本 v1.3,按平台和架构分开,Windows 和 macOS 的包在两百二十兆上下,Linux 小一号,两百零几兆,解压就能跑。

官方发布页截图,版本号与各平台压缩包名称

第二件在手机上,打开开发者选项,路径是设置里的「关于手机」,对着版本号连点七下,选项就出来了。

第三件还是在手机上,进开发者选项把 USB 调试打开。想走无线的话顺手把无线调试也开上,手机和电脑连同一个 Wi-Fi。手机这边门槛不高,不用 root,底层那层 scrcpy 最低认到 Android 5.0,不过声音转发要 Android 11 以上。

三件事做完,插线或者走无线,打开 Android DEX。启动界面上有两条进度条,一条是往手机推服务,一条是整体初始化,都跑满了桌面才解锁。万一没连上,会弹一个选设备的入口,手动挑一台就行,不用退出去重开。

顺手记几个快捷键。Ctrl + G 开关当前应用的游戏模式,Ctrl + F 全屏,Ctrl + Alt 加上下把整个界面收起来或者唤回来,加上左右换设备。

这几笔账,用之前先算清楚

头一笔是调试通道。它全程走 ADB,开发者选项和 USB 调试得一直开着,对这个有顾虑的人就别勉强。小米这类机型还要额外打开「USB 调试(安全设置)」,不然键鼠点下去没反应。

第二笔是许可证。前面说过它闭源,LICENSE 写得挺具体。个人、学习、研究、测试随便用,但不能商用,改包、重打包、搬到第三方站点镜像都不行。内容创作单独列了一条,拍视频、写评测、发截图都可以,只是不能拿这些内容变现,广告分成、赞助、返佣、付费推广都算在里面。真要靠它赚钱,得先拿到书面授权。

第三笔是渠道。作者在 README 最上面挂了警告,只认官方这一个仓库是授权来源,别人搭的镜像站和打包站都不要碰。

还有两件小事。它内置了 scrcpy,NOTICE 里写明这部分是 Genymobile 的 Apache-2.0 组件,并声明双方没有隶属关系。画面上有一层官方的水印角标,只能挪位置,去不掉。

什么人适合用,跟同类差在哪

最常见的用法是上班时手机扔在一边充电,消息和通知在电脑上看,不用隔一会儿摸一次手机。其次是那些只有手机版的应用,为它装个模拟器又重又卡,这里开个窗口就行,反正跑在真机上。做演示和录教程也省事,画面本来就在电脑屏幕上,直接共享即可。

放到同类里看,它的位置挺清楚。原版 scrcpy 是命令行的,延迟最低,但电脑上只有一块手机屏,没有桌面环境。QtScrcpy 和 escrcpy 给它套了图形界面,补上按键映射和多设备,形态还是投屏。厂商自带的互联方案体验不错,代价是绑自家手机。还有一类要在手机上装 Shizuku 才能跑的桌面方案,门槛又高了一截。

它把桌面环境这一层补上了,代价是必须开调试通道,而且是闭源。

一直想要三星 DeX 那种体验、手里用的又不是三星的话,这个可以试。

地址是 https://github.com/Shrey113/Android-Dex

文章目录
  1. 1. 它在手机上塞了两个自己的程序
  2. 2. 连上以后,桌面是它自己画的
  3. 3. 窗口能拖能缩,声音能一条一条掐掉
  4. 4. 手游这条线,是它藏得比较深的一张牌
  5. 5. 它不联网,也不留你的数据
  6. 6. 装起来三件事,其中两件在手机上
  7. 7. 这几笔账,用之前先算清楚
  8. 8. 什么人适合用,跟同类差在哪