1. 摘要
用 TRAE SOLO 快速开发了一款 Android 优惠监控 APP,实现了多平台商品链接价格抓取、后台定时监控、降价通知提醒、价格历史记录等功能。原本需要从零开发数天的工作,通过"胶水编程"方法论复用成熟组件(Room、OkHttp、Jsoup、Jetpack Compose),仅用15分钟完成核心功能开发并成功编译出APK。
2. 背景
我是一名开发者,经常在京东、淘宝、拼多多等平台看中商品后犹豫要不要入手,总觉得"万一过几天就降价了呢?"。市面上的比价工具要么广告太多,要么不支持自定义监控目标价,要么需要付费才能用。如果从零开发,需要处理网络请求、HTML解析、前台服务、通知推送、数据库存储等复杂逻辑,预计耗时数天。
于是尝试用 TRAE SOLO 的"胶水编程"能力来快速实现一个属于自己的优惠监控工具。
3. 实践过程
任务拆解
将需求拆分为可复用模块:
| 模块 | 技术方案 | 来源 |
|---|---|---|
| UI界面 | Jetpack Compose + Material3 | Android官方 |
| 数据存储 | Room Database | Android Jetpack |
| 网络请求 | OkHttp | Square开源 |
| HTML解析 | Jsoup | 开源HTML解析器 |
| 后台服务 | Foreground Service | Android原生 |
| 通知推送 | NotificationManager | Android原生 |
| 定时任务 | Coroutine + Delay | Kotlin原生 |
使用的 SOLO 能力
- 架构设计:SOLO 快速规划项目结构,识别核心模块和依赖关系
- 胶水代码生成:自动创建数据层(Entity/DAO/Database)、Repository、ViewModel
- UI组件生成:基于 Material3 设计规范生成 Compose UI 组件
- 多平台适配:生成支持京东/淘宝/拼多多/苏宁等多平台的价格解析引擎
- 问题诊断与修复:识别 Room 数据库版本冲突、Compose 编译兼容性等问题
关键 Prompt 示例
帮我开发一个Android优惠监控APP,需求如下:
1. 支持添加京东/淘宝/拼多多商品链接
2. 后台定时抓取商品价格
3. 价格低于目标价时发送通知
4. 记录价格历史走势
5. 使用Kotlin + Jetpack Compose + Room
6. 支持开机自启动
踩过的坑
- Room 编译问题:初始使用 KSP 替代 KAPT 导致注解处理器冲突,改回 KAPT 后解决
- Compose BOM 版本:Material3 与 Compose BOM 版本不匹配导致编译失败,统一使用
2024.01.00解决 - 前台服务类型:Android 14 要求声明
foregroundServiceType,添加dataSync类型后解决 - Jsoup 解析精度:淘宝页面反爬机制导致价格提取失败,通过增加多种 CSS 选择器兜底方案解决
- 通知权限:Android 13+ 需要动态请求
POST_NOTIFICATIONS权限,添加运行时权限请求逻辑
4. 成果展示
功能特性
多平台商品链接监控(京东/淘宝/天猫/拼多多/苏宁)
后台定时价格检测(5分钟~24小时可调)
自定义目标价格,低于目标价自动推送通知
价格历史记录,支持查看涨跌趋势
自动识别商品平台,显示平台标签
统计面板:总商品数/监控中/已降价
开机自启动,重启后自动恢复监控
Material Design 3 现代化 UI
技术架构
| 项目 | 详情 |
|---|---|
| 语言 | Kotlin |
| UI框架 | Jetpack Compose + Material3 |
| 最低版本 | Android 8.0 (API 26) |
| 数据库 | Room (SQLite) |
| 网络库 | OkHttp + Jsoup |
| 架构模式 | MVVM (ViewModel + Repository + Room) |
| 后台服务 | Foreground Service + Coroutine |
项目结构
app/src/main/java/com/pricewatcher/app/
├── MainActivity.kt # 主Activity
├── data/
│ ├── Product.kt # 商品实体
│ ├── PriceRecord.kt # 价格记录实体
│ ├── ProductDao.kt # 商品数据访问
│ ├── PriceRecordDao.kt # 价格记录数据访问
│ └── AppDatabase.kt # Room数据库
├── engine/
│ └── PriceFetchEngine.kt # 多平台价格抓取引擎
├── repository/
│ └── ProductRepository.kt # 数据仓库
├── viewmodel/
│ └── ProductViewModel.kt # 商品列表ViewModel
├── ui/
│ ├── theme/
│ │ ├── Color.kt # 颜色定义
│ │ └── Theme.kt # 主题配置
│ ├── components/
│ │ └── ProductCard.kt # 商品卡片组件
│ └── screens/
│ ├── HomeScreen.kt # 主页(商品列表)
│ ├── PriceDetailScreen.kt # 价格详情页
│ └── SettingsScreen.kt # 设置页
├── service/
│ ├── PriceMonitorService.kt # 价格监控前台服务
│ └── NotificationHelper.kt # 通知管理
└── receiver/
└── BootReceiver.kt # 开机自启动广播
5. 效果与总结
提效对比
| 环节 | 传统开发 | SOLO 胶水编程 |
|---|---|---|
| 需求分析 | 1小时 | 5分钟 |
| 架构设计 | 2小时 | 复用MVVM标准架构 |
| 数据层开发 | 半天 | 自动生成Entity/DAO/Database |
| UI开发 | 1天 | 10分钟 |
| 价格抓取引擎 | 1天 | 15分钟 |
| 后台服务+通知 | 半天 | 10分钟 |
| 调试修复 | 半天 | 15分钟 |
| 总计 | 3-4天 | 约15分钟 |
SOLO 在流程中的作用
- 快速定位:自动搜索并分析最佳技术方案组合
- 胶水层生成:创建最小量的连接代码,串联各成熟组件
- 问题诊断:识别版本兼容性、权限声明等隐蔽问题
- 代码规范:自动遵循 Android 最佳实践和 Material3 设计规范
可复用方法
胶水编程方法论:
凡是能不写的就不写,复用成熟开源组件。自定义代码只承担组合、调用、封装、适配。通过最小量的"胶水代码"连接各模块。
这种方法特别适合:
- 快速原型开发
- 内部工具开发
- 个人效率工具
- 小团队构建大系统
核心代码亮点
1. 多平台价格抓取引擎 — 自动识别URL平台,使用多组CSS选择器兜底提取价格:
// 自动识别平台
fun detectPlatform(url: String): String {
return when {
url.contains("jd.com") -> "jd"
url.contains("tmall.com") -> "tmall"
url.contains("taobao.com") -> "taobao"
url.contains("pinduoduo.com") -> "pdd"
else -> "unknown"
}
}
2. 前台服务保活监控 — 使用 Foreground Service + Coroutine 实现稳定后台运行:
monitorJob = serviceScope.launch {
while (isActive) {
checkAllPrices()
delay(intervalMinutes * 60 * 1000)
}
}
3. 降价智能通知 — 价格首次低于目标价时触发通知,避免重复打扰:
if (product.targetPrice > 0 && result.price <= product.targetPrice
&& !product.alertTriggered) {
notificationHelper.showPriceAlertNotification(...)
}
开发工具:TRAE SOLO | 开发耗时:约15分钟 | 技术栈:Kotlin + Jetpack Compose + Room + OkHttp + Jsoup