随时随地开发:通过 FRP 搭建从 Ubuntu 到 Windows 的远程 Android 调试环境

内容分享3天前发布
0 0 0

你是否曾梦想过这样的工作流:在咖啡馆里,你只带着一台轻薄的 Surface Pro,而代码的编译、运行和调试,全部交由家里那台性能强劲的 Ubuntu 台式机来完成?更酷的是,你甚至想将手机直接插在 Surface 上,让远端的 Ubuntu 无缝识别并进行开发。

今天,我们就将这个梦想变为现实。本文将一步步指导你,如何结合 USBIPFRP 这两大神器,构建一个稳定、高效的远程 Android 开发环境。

最终目标

物理连接: 安卓手机 <—USB—> Windows 11 (Surface)开发环境: Android Studio 运行在远程的 Ubuntu 22.04 台式机上连接方式: Ubuntu 通过 FRP 建立的公网隧道,访问并控制 Windows 上的手机

技术基石

USBIP (USB over IP): 一个能将本地 USB 设备通过网络共享给远程计算机的工具。我们将使用 Windows 端的
usbipd-win
作为服务端,Linux 端的
usbip
作为客户端。FRP (Fast Reverse Proxy): 一款高性能的反向代理工具,能轻松地将内网服务穿透到公网。我们将用它来为 USBIP 的连接搭建一条稳定的“跨海大桥”。Socat (Socket CAT): 一个多功能的网络工具,我们用它在 Ubuntu 端做端口中继,完美解决
usbip
命令无法指定端口的问题。


第一步:在 Windows 11 (服务端) 上共享手机

在你的 Surface Pro 8 上,我们需要安装并配置 USBIP 服务,然后通过 FRP 将这个服务暴露到公网。

1. 安装并配置 USBIP 服务 (
usbipd-win
)

安装: 以管理员权限打开 PowerShell,通过
winget
安装(也可以官方Github下载安装):


winget install --interactive --exact dorssel.usbipd-win
```*   **共享手机**:
1.  将安卓手机插入 Surface,**关键:在手机的 USB 连接模式中选择“仅充电”**,以确保 ADB 接口能被纯净地暴露。
2.  列出所有 USB 设备,找到你的手机并记下其 `BUSID` (例如 `2-6`)。
    ```powershell
    usbipd list
    ```
3.  绑定并共享该设备。
    ```powershell
    usbipd bind --busid 2-6
    ```
此时,手机在 Windows 上会“消失”,这是正常的,因为它已准备好被网络访问。

2. 配置并运行 FRP 客户端

下载适用于 Windows 的 FRP(官方Github下载),并在
frpc.ini
文件中进行如下配置。这个配置会将你本机 USBIP 服务监听的
3240
端口,映射到公网服务器的
40000
(这个端口可以自己任意指定)端口。

Windows 端的
frpc.ini
:


[common]
server_addr = www.your-computer-ip.com
server_port = 7000
token = your_frp_server_token
user = your_unique_windows_user_name

[usbip-surface]
type = tcp
local_ip = 127.0.0.1
local_port = 3240
remote_port = 40000

运行: 启动
frpc.exe
,并确保代理成功连接。


第二步:在 Ubuntu 22.04 (客户端) 上连接手机

现在,我们切换到远程的 Ubuntu 台式机,通过一系列操作来“抓住”远端共享的手机。

1. 安装客户端工具

确保
usbip

socat
已安装。


sudo apt update
sudo apt install socat linux-tools-generic
2. 建立本地端口转发 (关键一步!)

标准的
usbip
命令无法指定端口,而我们的服务在公网的
49994
端口上。因此,我们用
socat
在本地创建一个“中继站”。打开一个独立的终端窗口,运行以下命令并让它保持在前台运行:


socat TCP-LISTEN:3240,fork TCP:www.your-computer-ip.com:40000

这条命令会将所有发送到你 Ubuntu 本机
3240
端口的流量,原封不动地转发到你的 FRP 公网地址。

3. 连接远程 USB 设备

现在,隧道已经挖好,我们可以连接了。打开另一个新的终端窗口
加载内核模块:


sudo modprobe vhci-hcd

查找设备 (注意,我们现在连接的是本地的
127.0.0.1
):


usbip list --remote=127.0.0.1

附加设备 (使用上一步查到的
BUSID
):


sudo usbip attach --remote=127.0.0.1 --busid=2-6

此时,远程的手机已经像一根虚拟USB线一样,连接到了你的 Ubuntu 系统上!

4. 让 Android Studio 识别设备

注意你的安卓手机要工作在仅充电状态了,作者发现在文件管理模式下有问题:

当你看到设备列表里出现了你的手机序列号,就大功告成了!打开你的 Android Studio,它已经赫然出现在设备列表中,等待你部署和调试应用。

结语

通过这套流程,我们成功地解耦了物理设备和开发环境,实现了极致的灵活性和效率。无论你身在何处,只要网络通畅,你就能利用家中强大的主机进行重度开发工作。这不仅是一个酷炫的技巧,更是现代分布式工作理念的一次完美实践。快去试试吧!

© 版权声明

相关文章

暂无评论

none
暂无评论...