Android连接设备,懂?

3,754 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情

前言

我们一般调试都是使用数据线去连接手机去调试,买过新机子的都知道,一开始是紧的,但是经常插拔之后就变松了,你们懂的,这就导致连接的时候会经常松动断开连接。就算不会,我们经常这样插拔数据线也是十分不好的。当然如果你说这是公司的测试机你无所谓,那当我没说。

其它方式连接设备

在Android11之后,AS提供了我们其它连接手机的方式:pair new devices ovver Wi-Fi

就是你在连同一个wifi(局域网)的情况下,手机设置那有个扫二维码连接,只需要扫二维码就能连接上设备,就无需使用数据线。

cfef814e901db20632f40717f1b43e534f3c01b300515e5871a84fbd6a2c4266QzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2Nzc3NTc0NTk4OTNfMjAyMy0wMy0wMiAxNi01NS0xNeWxj+W5leaIquWbvi5wbmc=.png

lQDPJxF1GvsMThDNBMjNBDiwgN9BQSfQn4UD-ibtdkCMAA_1080_1224.jpg_720x720q90g.jpg

但是我尝试了没办法连得上,不知道是机型问题还是什么问题。无所谓,我们一般都可以使用adb命令去连接,这不比你扫二维码更快?其实上面那种方法内部也是这样连的。

直接 adb connect 设备ID:端口号, 比如我的IP是192.168.1.1,我的端口是7654,那我直接在命令窗口中输入adb connect 192.168.1.1:7654就能连接了,不用连数据线输,直接在同一个wifi的情况下就行。

但是其实会有个问题,就是设备的端口它其实一直会变,所以需要给设备设置一个固定的端口,这时候就需要连手机然后在命令窗口输入 adb tcpip 端口号,比如我自己就是输入adb tcpip 7777,之后就可以断开数据线了,然后输入adb connect 192.168.1.1:7777就可以了,但其实ip也会可能变化,比如你关掉路由器重启等,这时候按照这个流程再来一遍就行,一般这种场景出现很少。

0bef6a793957944dc040e3a3ef2e85998c58ada2ac2ee6bbf24d60023d633f9dQzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2Nzc3NTc0NjAxODdfMjAyMy0wMy0wMiAxNy0yNS0xM+Wxj+W5leaIquWbvi5wbmc=.png

远程设备连接

你以为事情到这里就结束了?那我就没必要写这篇文章,因为上面的操作很基础,说白了就是废话,我写这篇文章的契机是我看到了一篇文章。 juejin.cn/post/703838…

远程连接设备,这就有意思了,我之前都没考虑过这个方向。那既然发现了,那就有必要来和大伙好好谈论这事,怎么远程连接设备。我们上面进行的操作都是在同个wifi的环境下,同个局域网的环境下,同个内网的环境下去操作的。但如果我使用家里的电脑,怎么去连接公司的设备,它们处于不同的网络环境中,那又该如何连接上。

一般我们会在什么场景下用到这种操作呢:
(1)上面所说的,我在家里,但是我的设备在公司。
(2)我使用云机,有很多平台会提供云机来正常测算,而我们想更方便的抓取日志。
(3)给客户的设备抓日志,有的人觉得这不可能,客户不会开开发者模式给你,更不会乖乖的按照你那麻烦的步骤配合你去调试。如果你只想到这层,说明你经历的还不够,2C确实是这样没错,那你有没有考虑过2B的情况。

那么不在同一个内网的情况下要如何去连接设备?

我搜集了一些大佬的做法,可以来看看它们怎么做。
(1)juejin.cn/post/703838… 这个大佬提到一个概念:内网穿透
(2)juejin.cn/post/719804… 这个大佬提到一个概念:虚拟局域网

我对网络工程相关的知识了解不是很深,所以不清楚的东西我也不敢去说,但是既然大佬们都有明确提出了这些思路,感兴趣的可以从这些方向入手去查看。

当然我觉得要这个“远程设备连接”的效果要实现,我觉得不是单靠我一个Android开发工程师能去实现的,当然还要配合其它网络工程相关的人。

我是这么想的,在内网中是能直接连接的,在外网中是连接不上的。内网IP外网IP这种网络工程的知识我就不献丑多说了,总之,按照这个思路,我就想如果把两端都放在同一个网络环境中,那就可以直接连。

所以我想到了一个类似于这样的场景的一个东西:VPN ,那我觉得,我电脑在家里,我的终端设备在公司,我要把家里的网络放到和公司同一个网络环境下(因为网络知识不深,所以讲得可能不是那么正确),是不是就能链上了。所以我只需要用家里的电脑连公司的VPN,就能通过adb连上公司的终端设备。

那假如设备也不在公司呢?,假如设备被其他人带回家了。那同理电脑和终端设备都连VPN,行不行?

我假设能连上,还有一个问题就是,你看不到手机的屏幕,这时候就需要有个投屏的软件。

scrcpy了解下:github.com/Genymobile/…

使用scrcpy后我们就能在连上设备的情况下把手机屏幕投到电脑上,例如这样的效果:

c014a9b86441d7f18420c10d6b51e39ec40b15194e4956b32a38ed86204add66QzpcVXNlcnNcODYxMzVcQXBwRGF0YVxSb2FtaW5nXERpbmdUYWxrXDE2NTUxOTM0NF92MlxJbWFnZUZpbGVzXDE2Nzc3NTc0NjA1MDRfMjAyMy0wMy0wMiAxOS00MC0yM+Wxj+W5leaIquWbvi5wbmc=.png