1. 项目背景与核心价值
ScreenBridge 是我最近开源的一个 Java 桌面工具项目,它的核心功能是将 Android 设备投屏工具 scrcpy 的命令行操作封装成可视化界面。作为一个长期从事 Java 开发的工程师,我发现在实际工作中,很多非技术背景的同事虽然需要频繁使用手机投屏功能,但对 adb 命令行操作望而生畏。这正是 ScreenBridge 要解决的问题。
这个项目的独特之处在于,它不是一个简单的 UI 包装器,而是一个完整的工程实践案例。从技术选型到架构设计,从国际化支持到打包发布,我尝试将企业级开发的最佳实践应用到这个"小工具"中。特别值得一提的是,我选择了 Java 21 和 Swing 这套看似"过时"的技术组合,事实证明对于 Windows 桌面工具这类场景,轻量、稳定、部署简单的技术栈往往是最优解。
提示:选择 Swing 而非 JavaFX 或其他现代 UI 框架的考虑是,Swing 作为 JDK 内置组件,无需额外依赖,特别适合需要分发给非技术用户的小工具。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构与实现细节
2.1 技术栈选型解析
项目采用的技术栈组合经过深思熟虑:
- Java 21:使用最新LTS版本确保长期支持,同时享受记录类型、字符串模板等现代语法特性
- Swing:虽然界面略显陈旧,但胜在零依赖、启动快、内存占用低
- Maven:标准的项目管理和构建工具,便于依赖管理和持续集成
- jpackage:Java 14+ 引入的打包工具,可将JAR转换为原生安装包
特别要说明的是 adb 和 scrcpy 的集成方式。这两个关键组件都是通过 ProcessBuilder 调用外部进程实现的,这种设计既保持了工具的独立性,又避免了重复造轮子。
2.2 项目分层架构
为了避免常见的"大泥球"式Swing应用,我采用了清晰的分层架构:
code复制src/
├── main/
│ ├── java/
│ │ ├── application/ # 应用入口和主控制器
│ │ ├── domain/ # 设备信息、配置等领域对象
│ │ ├── infrastructure/ # adb/scrcpy进程调用等基础设施
│
