【Code With SOLO】手机怎么使用Trae Solo,开发远程桌面应用RemoteDesk
1. 摘要
使用 Trae Solo 开发了一款 Android 应用 RemoteDesk,通过内网穿透(FRPC)+ 远程桌面(RDP)技术组合,实现手机随时远程控制 Windows 电脑,解决外出时无法继续使用 Trae Solo 编程的痛点。FRPC 负责建立隧道穿透内网,RDP 模块负责桌面连接,两者无缝协作,一键直连。
2. 背景
职业角色:产品经理
具体场景:日常使用 Trae Solo 在办公室电脑上进行产品文档编写和原型设计,但经常遇到出门在外(如通勤、出差)突然需要查看或修改文件的情况。手机上没有 Trae Solo 应用,无法满足复杂操作需求。
面临挑战:
- ToDesk、向日葵等第三方远程桌面工具受带宽、时长限制
- Windows 自带远程桌面无法直接连接内网电脑
- 外网环境下访问局域网电脑非常不便
核心需求:开发一款可通过手机 App 便捷操作的远程桌面应用,重点解决内网穿透和带宽优化问题。
3. 实践过程
3.1 任务拆解
面对"手机远程控制电脑"这个需求,我首先进行了拆解:
手机远程控制电脑
├── 内网穿透:让外网能发现并连接内网电脑
├── 远程桌面:手机显示 Windows 桌面并操作
└── 统一体验:一个 App 搞定两个功能
3.2 使用 Trae SOLO 的关键 Prompt
Prompt 1:需求分析和方案设计
我想开发一个 Android 应用,实现手机远程控制 Windows 电脑。
核心需求:
1. 内网穿透:通过 frpc 将内网 Windows 的 RDP 端口(3389)映射到公网
2. RDP 客户端:内置远程桌面功能,连接映射后的端口
3. 整体流程:编辑配置 → 启动 frpc → 一键连接 → 显示远程桌面
请帮我设计整体架构,推荐技术栈。
Prompt 2:FRPC 模块开发
请基于以下背景开发 frpc Android 模块:
- 需要在 Android 上运行 frpc 二进制文件
- 支持 TOML 配置文件(frp v0.57+)
- 提供启动/停止 frpc 的 UI 和日志显示
- frpc 作为前台服务持续运行
遇到的问题:直接运行 frpc 报 Permission denied 错误,如何解决?
Prompt 3:RDP 模块开发
请帮我集成 FreeRDP 到 Android 应用:
- 基于 libfreerdp3.so 等原生库
- 实现 RemoteDesktopView 显示桌面
- 支持键盘映射(Android 键码 → Windows VK 键码)
- 支持鼠标和触摸操作
Prompt 4:两个项目合并
我有两个独立的 Android 项目:
1. frpcandroid:frpc 内网穿透功能
2. rdpandroid:RDP 远程桌面功能
请帮我将它们合并为一个统一的应用,包名统一为 com.example.frpcrdp。
关键要求:FRPC 连接成功后返回首页时不中断服务,确保 RDP 可以通过 FRPC 建立的隧道连接。
3.3 关键开发步骤
Step 1:FRPC 模块开发
编译 frpc for Android:
# 使用 Go 交叉编译
CGO_ENABLED=1 GOOS=android GOARCH=arm64 go build -o libfrpc.so
解决 SELinux 权限问题:
- 最初尝试直接运行 frpc 二进制文件,但 Android SELinux 策略禁止从 app data 目录执行
- 解决方案:将 frpc 重命名为 libfrpc.so,放入 jniLibs/arm64-v8a 目录,Android 安装时会自动提取并赋予正确权限
解决线程阻塞问题:
- 最初使用 SingleThreadExecutor,点击"测试连接"时无响应
- 原因:frpc 启动后的日志读取循环阻塞了线程
- 解决方案:改用 FixedThreadPool(2) 实现任务并行执行
Step 2:RDP 模块开发
FreeRDP 集成:
- 使用原生库:libfreerdp3.so、libfreerdp-client3.so、libwinpr3.so、libcrypto.so、libssl.so
- 通过 JNI 与 FreeRDP 交互
中文输入解决方案:
- 远程服务器没有中文输入法
- 方案:ASCII 字符直接发送,非 ASCII 字符(如中文)复制到剪贴板,提供粘贴按钮发送 Ctrl+V
横屏切换优化:
- 遇到问题:点击横屏按钮后先出现重新连接界面,然后又变回竖屏
- 解决:在 AndroidManifest.xml 配置
android:configChanges="orientation|screenSize|keyboardHidden",添加方向切换标志
Step 3:项目合并
JNI 函数签名问题:
- 遇到问题:点击 RDP 后闪退,
UnsatisfiedLinkError: No implementation found - 原因:JNI 函数签名使用旧包名
com.example.rdpandroid,实际包名是com.example.frpcrdp - 解决:更新所有 JNI 函数签名和 HOME 环境变量路径
FRPC 服务中断问题:
- 遇到问题:FRPC 页面启动连接后,点击返回按钮会导致连接中断
- 原因:返回时调用了 stopFrpcService() 停止进程
- 解决:返回按钮不再停止 FRPC 服务,仅在 onDestroy() 清理线程资源
3.4 项目结构
merged_app/
├── app/src/main/
│ ├── java/com/example/frpcrdp/
│ │ ├── HomeActivity.java # 首页(两个功能入口)
│ │ ├── FrpcActivity.java # FRPC 服务控制
│ │ ├── RdpActivity.java # RDP 远程桌面
│ │ ├── RemoteDesktopView.java # 桌面渲染视图
│ │ └── KeyboardMapper.java # 键盘映射
│ ├── cpp/
│ │ ├── CMakeLists.txt
│ │ └── rdp_jni.c # RDP JNI 实现
│ ├── jniLibs/arm64-v8a/
│ │ ├── libfrpc.so # FRPC 客户端库
│ │ ├── libfreerdp3.so # FreeRDP 核心库
│ │ └── ... # 其他原生库
│ └── assets/
│ └── frpc.toml # 默认配置文件
└── build.gradle
4. 成果展示
最终 APK
- 文件路径:
./app/build/outputs/apk/debug/app-debug.apk - 文件大小:15.4 MB
- 包名:
com.example.frpcrdp
功能特性
| 功能 | 说明 |
|---|---|
| FRPC 内网穿透 | 支持最新版 frp TOML 配置,启动后持续运行 |
| RDP 远程桌面 | 基于 FreeRDP,支持自定义端口(6389) |
| 中文输入 | 通过剪贴板方案解决远程服务器无中文输入法问题 |
| 手势操作 | 双指缩放、单指拖拽、流畅不卡顿 |
| 屏幕适配 | 横屏/竖屏切换,多分辨率级别 |
| 后台服务 | FRPC 返回后不中断,支持 RDP 隧道连接 |
使用流程
1. 打开 App → 首页
│
├─→ FRPC 服务
│ ├─→ 配置 frpc.toml
│ ├─→ 启动 FRPC 连接
│ └─→ 返回首页(FRPC 持续运行)
│
└─→ 远程桌面
├─→ 输入 frps IP:6389
├─→ 输入 Windows 用户名密码
└─→ 通过 FRPC 隧道连接 RDP
界面预览
5. 效果与总结
提效数据
- 开发效率:使用传统方式开发一个含原生库集成的 Android 应用,预计需要 2-3 周;使用 Trae Solo 辅助开发,缩短至 1 周左右
- 远程办公:出门在外时,1 分钟内即可通过手机接入办公室电脑继续工作
Trae SOLO 在本项目中的作用
- 代码生成:快速搭建项目框架,生成 Activity、布局文件、JNI 代码模板
- 问题排查:遇到 SELinux 权限、线程阻塞、JNI 签名不匹配等问题时,快速定位原因并给出解决方案
- 技术方案:推荐使用 jniLibs 方式解决二进制执行权限问题,使用剪贴板方案解决中文输入问题
- 项目合并:协助完成两个独立项目的合并,解决包名统一、路径更新等问题
可复用的方法
- 复杂需求拆解:将"手机远程控制电脑"拆解为"内网穿透"+"远程桌面"两个独立模块
- 渐进式开发:先独立开发 FRPC 和 RDP 模块,再进行合并,降低开发风险
- 善用社区资源:FreeRDP 是成熟的开源库,直接集成而非从零开发 RDP 协议
技术亮点
- NDK 深度集成:成功整合 FreeRDP 和 FRPC 的 native 库
- JNI 回调机制:Java 层与 native 层的事件通信机制完善
- 前台服务保活:FRPC 作为前台服务运行,避免被系统后台杀死
- 跨模块协作:FRPC 和 RDP 模块解耦又协作,通过隧道无缝连接
开发环境:Trae Solo(全程使用 Trae Solo 完成,未安装 Android Studio 或其他开发工具)
核心技术:FRPC 内网穿透 + FreeRDP 远程桌面 + JNI/NDK



