【Code With SOLO】手机怎么使用Trae Solo,开发远程桌面应用RemoteDesk

【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 在本项目中的作用

  1. 代码生成:快速搭建项目框架,生成 Activity、布局文件、JNI 代码模板
  2. 问题排查:遇到 SELinux 权限、线程阻塞、JNI 签名不匹配等问题时,快速定位原因并给出解决方案
  3. 技术方案:推荐使用 jniLibs 方式解决二进制执行权限问题,使用剪贴板方案解决中文输入问题
  4. 项目合并:协助完成两个独立项目的合并,解决包名统一、路径更新等问题

可复用的方法

  1. 复杂需求拆解:将"手机远程控制电脑"拆解为"内网穿透"+"远程桌面"两个独立模块
  2. 渐进式开发:先独立开发 FRPC 和 RDP 模块,再进行合并,降低开发风险
  3. 善用社区资源:FreeRDP 是成熟的开源库,直接集成而非从零开发 RDP 协议

技术亮点

  • NDK 深度集成:成功整合 FreeRDP 和 FRPC 的 native 库
  • JNI 回调机制:Java 层与 native 层的事件通信机制完善
  • 前台服务保活:FRPC 作为前台服务运行,避免被系统后台杀死
  • 跨模块协作:FRPC 和 RDP 模块解耦又协作,通过隧道无缝连接

开发环境:Trae Solo(全程使用 Trae Solo 完成,未安装 Android Studio 或其他开发工具)
核心技术:FRPC 内网穿透 + FreeRDP 远程桌面 + JNI/NDK