【Code With SOLO】用 TRAE SOLO 15分钟开发一款Android优惠监控APP

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. 成果展示

功能特性

:white_check_mark: 多平台商品链接监控(京东/淘宝/天猫/拼多多/苏宁)

:white_check_mark: 后台定时价格检测(5分钟~24小时可调)

:white_check_mark: 自定义目标价格,低于目标价自动推送通知

:white_check_mark: 价格历史记录,支持查看涨跌趋势

:white_check_mark: 自动识别商品平台,显示平台标签

:white_check_mark: 统计面板:总商品数/监控中/已降价

:white_check_mark: 开机自启动,重启后自动恢复监控

:white_check_mark: 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