作为一个学生,如何用免费 AI 工具手搓了一款 Android AI 日记 App

《白嫖党的逆袭:我作为一个学生,如何用免费 AI 工具手搓了一款 Android AI 日记 App》

摘要:你是否也像我一样,总是立 flag 要写日记,却总是坚持不过三天?本文讲述了我如何被一个 iOS 视频"破防",作为一名囊中羞涩的 Android 学生党,利用 Windsurf、Cursor 以及 Google Antigravity (Claude Opus) 等 AI 工具,从零开始打造一款基于 Clean Architecture、集成多种 LLM、支持语音转文字的硬核 AI 日记应用的故事。这是一场关于技术、白嫖和 AI 赋能的奇妙冒险。


1. 引言:该死的 YouTube 算法

一切的开始,都要怪 YouTube 的推荐算法。

那是一个平平无奇的周五下午,我正瘫在宿舍床上刷视频,突然刷到了这一条:YouTube Link。视频里的博主展示了一个极其优雅的工作流:对着 Apple Watch 随口说几句碎碎念,手机上的快捷指令自动运行,背后的 AI 默默地把这些零碎的语音整理成一篇结构清晰、文笔优美的日记。

那一刻,我心动了。

作为一个典型的"差生文具多"型选手,我买过精装本子,下过 Notion,甚至自己搭过服务器部署日记服务,但结局只有一个:太麻烦,坚持不下来。

视频里的思路直击痛点:降低输入的门槛。只管说,剩下的交给 AI。

但是,视频看了一半我才意识到一个严峻的问题------我手里拿的是一台 Android 手机。

iOS 有快捷指令,我们 Android 有什么?Tasker?太折腾。市面上的 App?要么收费昂贵,要么界面丑到即使是亲妈也下不去手。

既然我是学计算机的(虽然还在入门阶段),既然现在 AI 编程这么火,为什么我不自己写一个?

于是,这个名为 "ai日记(journal)"(暂定名,听起来是不是很像大佬写的?)的项目,正式立项了。


2. 第一阶段:免费 AI 的"甜蜜陷阱" (Windsurf + Cursor)

作为一个每个月生活费有限的学生,"白嫖"是我的核心竞争力。听说现在 AI 编程工具很强,我首先把目光投向了市面上最火的两个工具:WindsurfCursor

2.1 起步的快感

刚开始的时候,体验简直是梦幻的。我打开 Cursor,开启了 Auto 模式(毕竟免费额度还在),在对话框里敲下:

"帮我创建一个 Android Compose 项目,我要一个主页,上面有个麦克风按钮,按住可以录音。"

几秒钟后,代码生成了。复制,粘贴,运行。卧槽?真的跑起来了!屏幕中间出现了一个按钮,按下去真的有反应。那一刻,我觉得自己就是乔布斯转世,Android 开发不过如此嘛!

2.2 噩梦降临

然而,好景不长。随着我要求的功能越来越多,AI 开始"发疯"了。

我想加入数据库保存录音文本。

Cursor 给了我一段 Room 数据库的代码。

我想加入 Retrofit 调用 OpenAI 接口。

Windsurf 给了我一段网络请求代码。

当我把这两段代码合在一起时,整个项目炸了。

  • 报错满天飞Unresolved referenceType mismatch

  • 逻辑死循环:AI 经常写出"点击按钮保存数据库",但忘了写"在协程中运行",导致主线程阻塞,App 直接 ANR(无响应)。

  • 上下文丢失 :免费版的模型记忆力有限。我刚告诉它"把数据库表名改成 diary_entries",过了三句话,它又开始查询 diaries 表,导致程序崩溃。

最让我崩溃的是代码结构。为了图省事,AI 把 UI 逻辑、数据库操作、网络请求全部塞进了 MainActivity.kt 里。那个文件迅速膨胀到 1000 多行,像一团煮烂的意大利面。

那几天的状态是:

我:"报错了,这里显示找不到 Dao。"

AI:"对不起,我忘了生成 Dao,这是代码。"

我:"不行,在这个位置调用会报错。"

AI:"非常抱歉,请尝试这样修改。"(给了一段完全不相关的代码)

我被迫停下来,去翻阅 Android 官方文档,去学什么是 suspend 函数,去查 Room 的注解到底怎么写。虽然勉强拼凑出了一个能跑的版本,但在这个烂摊子上继续开发,我感觉我在给自己挖坑。

项目被迫搁置。我看着那一坨代码,陷入了深深的自我怀疑。


3. 转折点:Google Antigravity 与 Claude Opus 的降临

时间来到了 12 月 8 日 。我在浏览技术论坛时,偶然发现了一个叫 Google Antigravity 的东西。听说那里可以免费使用 Anthropic 最强的模型 ------ Claude Opus

Opus?那是传说中智商碾压 GPT 的存在啊!但平时用它太贵了,现在居然有免费额度?

我抱着试一试的心态,把那坨"意大利面代码"的一部分发给了 Claude Opus,并附带了一句:

"这代码太乱了,能不能帮我用 Clean Architecture 重构一下?"

3.1 降维打击

Claude Opus 的回复让我震惊了。它没有直接甩代码,而是先分析了我的问题:

"你目前的代码将 UI 和数据逻辑强耦合在了一起,这会导致后期维护非常困难。对于 Android 开发,推荐使用 Clean Architecture(整洁架构),将项目分为 Data(数据层)、Domain(领域层)和 Presentation(表现层)。"

接着,它给出了极其清晰的文件夹结构建议,并分模块生成了代码。

没有对比就没有伤害。

  • Cursor/Windsurf (Free):像个听话但粗心的实习生,你让它干嘛它就干嘛,不管后果。

  • Claude Opus:像个经验丰富的架构师,它会告诉你"你这样做不对,应该那样做",然后手把手教你写出优雅的代码。

我决定:推倒重来! 抱紧 Claude Opus 的大腿,重写这个 App。


4. 技术栈与架构设计:从草台班子到正规军

在 Opus 的指导下,我的项目技术栈终于像个正经的 Android App 了。

4.1 技术选型

  • 语言: Kotlin (必须的,Java 已经是时代的眼泪了)

  • UI 框架: Jetpack Compose (Material 3)。声明式 UI 写起来真的爽,再也不用跟 XML 布局文件搏斗了。

  • 架构: Clean Architecture + MVVM。

  • 数据库: Room + Flow。利用 Flow 的响应式特性,数据库一更新,UI 自动刷新,丝滑。

  • AI 核心: 支持多模型切换(OpenAI, DeepSeek, 通义千问, Moonshot, 智谱, Ollama)。既然是 AI 日记,当然要能换大脑。

  • 语音识别 : Android 原生 SpeechRecognizer。为了省钱(划重点),没有接收费的语音 API,原生的离线识别其实够用了。

4.2 为什么是 Clean Architecture?

这得感谢 Opus 的坚持。一开始我觉得分层好麻烦,写个简单的增删改查要写 Entity、Dao、Repository、UseCase、ViewModel 这么多文件。

但后来我真香了。

当我需要把原本的"仅支持 OpenAI"改成"支持 DeepSeek 和 Ollama"时,我发现我只需要修改 Data 层的一个实现类,UI 层完全不用动!这就是解耦的快乐。


5. 核心功能实现与踩坑实录

开发过程并非一帆风顺,即使有 Opus 加持,现实世界的 bug 依然千奇百怪。以下是几个让我印象深刻的"名场面"。

5.1 功能一:语音碎片自动保存

需求 :点击麦克风,说话,松手,文字自动存入数据库。
坑点:Room 数据库的 Schema 变更。

有一天,我决定给日记条目增加一个 mood(情绪)字段。我直接在 Entity 类里加了一行:

复制代码
@Entity(tableName = "thoughts")
data class Thought(
    // ... 其他字段
    val mood: String = "neutral" // 新增字段
)

一点运行,App 直接崩溃:Room cannot verify the data integrity.

AI 的救援

我把报错扔给 Opus。它立刻指出:"你修改了数据库结构,但没有提供迁移策略(Migration)。"

它给出了两个方案:

  1. 写繁琐的 Migration SQL 语句。

  2. 开发阶段直接暴力清除数据。

作为懒人,我选了方案 2。Opus 帮我修改了 Database Builder:

复制代码
Room.databaseBuilder(context, AppDatabase::class.java, "app.db")
    .fallbackToDestructiveMigration() // 加上这句,版本不匹配直接重建
    .build()

问题解决。虽然数据丢了,但作为学生项目,谁在乎呢?(正式上线可不能这么干!)

5.2 功能二:AI 待办事项提取

需求:每天晚上,AI 自动读取今天的碎碎念,分析出我明天要做的事,生成待办列表。

坑点幻觉字段与 DAO 崩溃

为了实现这个,我需要查询当天的所有记录。我让 Opus 帮我写 DAO。它自信地写道:

复制代码
@Query("SELECT * FROM todos WHERE priority > 3 AND completedAt IS NULL")
fun getHighPriorityTodos(): Flow<List<Todo>>

我一运行,编译器红了一片。
报错no such column: priority

原来,我的 Todo 表里根本没有 prioritycompletedAt 这两个字段!Opus 以为我有,或者是它觉得"待办事项表理应有优先级",于是它幻觉了。

解决过程

这让我意识到,即使是 Opus 这样的强模型,也不可能时刻记住我所有的代码细节。

我学会了一招:Context Feeding(投喂上下文)

每次提问前,我会先把最新的 Entity 代码块贴给它:"这是我目前的 Todo 表结构,请基于此帮我写查询语句。"

加上这个步骤后,错误率几乎降到了零。

5.3 功能三:多模型支持的"类型地狱"

需求:用户可以在设置里选是用 DeepSeek 还是 OpenAI。

坑点:Kotlin 的枚举与 Int 类型的冲突。

为了存储用户的选择,我定义了一个枚举:

复制代码
enum class AiProvider {
    OPENAI, DEEPSEEK, MOONSHOT
}

存入 DataStore 时,Opus 建议存 Int 索引。但在读取并传给 UI 时,逻辑写岔了。

复制代码
// 错误代码示例
val currentProvider = AiProvider.values()[preferences.providerId]

当我在后续版本中删除了中间的一个枚举值,所有的 ID 全乱套了!原本选 DeepSeek 的用户突然变成了 Moonshot。

反思

Opus 帮我重构了这段逻辑,建议直接存储 String 类型的 name,虽然多占几个字节,但稳得一匹。这让我学到了:稳健性比微小的性能优化更重要。


6. AI 编程工具深度对比:Windsurf vs Cursor vs Antigravity

经历了这一个月的开发,我对这几个工具感触良多。

维度 Windsurf / Cursor (Free/Auto) Google Antigravity (Claude Opus)
代码生成速度 🚀 极快,秒出 🐢 稍慢,需要思考时间
代码准确性 ⚠️ 经常有小错误,需人工修补 ✅ 极高,逻辑严密
架构理解能力 ❌ 弱,倾向于把代码堆在一起 🧠 强,懂设计模式和解耦
上下文记忆 🐟 金鱼记忆,几轮对话就忘 🐘 大象记忆,能记住较长背景
适合场景 生成简单的工具函数、补全代码 系统设计、复杂重构、疑难杂症

我的建议

如果你是学生党,强烈建议组合使用

  1. Claude Opus 做"总指挥":设计数据库、定义接口、解决复杂的架构问题。

  2. Cursor 做"搬砖工":在 Opus 定好的框架内,快速生成 UI 布局代码(Compose 的 UI 代码写起来真的很繁琐,Cursor 补全这种死板代码是一绝)。


7. 成果展示:它真的能用!

经过两周的肝代码(其实大部分时间是在看 Opus 写代码),MindFlow 终于成型了!

✨ 核心功能清单

  1. 极速语音流:打开 App 就是一个巨大的麦克风,说完即存。

  2. AI 智能整理 :每天晚上,点击"生成日报",DeepSeek 会帮我把一天的废话整理成一篇Markdown 格式的精美日记,还能自动打上 Emoji 标签。

  3. 情绪分析:AI 会根据我的文字,分析我今天的心情指数(0-10分),并生成趋势图。

  4. 待办收割机 :如果我在日记里说"明天要交作业",AI 会自动识别并在"待办"页生成一条任务。


8. 反思与总结:AI 时代的个人开发者

看着手机里这个自己亲手(虽然大部分是 AI 手)打造的 App,我感慨万千。

8.1 既然 AI 能写代码,我还需要学编程吗?

绝对需要。

在使用 Opus 的过程中,我发现:AI 只是放大器,不是魔法师。

  • 如果我不懂什么是 Main Thread,我就看不懂为什么 App 会卡死。

  • 如果我不懂 Room 的基础概念,我就不知道为什么数据库升级会崩溃。

  • 如果我不懂 Clean Architecture,我就无法理解 Opus 为什么要让我建那么多文件夹。

以前,开发者是砌砖工 ,需要一块砖一块砖地往上垒。

现在,开发者变成了包工头(或者说产品经理 + 架构师)。你需要告诉 AI 还要盖什么楼,检查它盖得歪不歪,在它犯蠢的时候及时纠正。

核心能力从"默写代码"变成了"阅读代码"、"系统设计"和"精准提问"。

8.2 给想用 AI 做开发的朋友的建议

  1. 不要迷信"一键生成 App":现在的 AI 还没强到那个地步。复杂的逻辑必须分模块一步步来。

  2. 学会"Prompt Engineering" :与其说"帮我写个日记 App",不如说"请基于 Jetpack Compose 和 Room,帮我写一个 NoteEntity 类,包含 id, content, timestamp 字段"。指令越具体,代码越好用。

  3. 拥抱"白嫖":多关注 Antigravity 这种平台,或者 GitHub Copilot 的学生包。穷不是不学习的理由,信息差才是。


9. 未来计划

虽然app 已经能用了,但我还有很多脑洞:

  • RAG (检索增强生成):让 AI 能回答"我上个月哪天最开心?"或者"我上次提到想吃火锅是什么时候?"。

  • 图片理解:支持上传图片,AI 自动描述图片内容并写入日记。

  • 桌面小组件:不打开 App 也能一键录音。

这就去问问 Claude Opus 怎么实现 RAG......


最后,感谢那个周五下午的 YouTube 视频,感谢 Antigravity,也感谢那个没有因为报错而放弃的自己,同时也欢迎大家批评指导。

如果你也想做自己的 App,别犹豫了,打开 IDE,召唤你的 AI 助手,开始吧!

附录:git仓库地址:https://github.com/kai200407/AI-Diary-App-Android

相关推荐
金山毒霸电脑医生2 小时前
植物大战僵尸杂交版最新v0.2版下载安装|2025图文解析教程
android·游戏·ios·植物大战僵尸·软件下载安装
羑悻的小杀马特2 小时前
Docker-Android 容器化 + cpolar 穿透,完善异地调试
android·运维·docker·容器·cpolar
恋猫de小郭2 小时前
Android Gradle Plugin 9.0 发布,为什么这会是个史诗级大坑版本
android·flutter·ios·开源
TTGGGFF2 小时前
从零到一:五分钟快速部署轻量化 AI 知识库模型(GTE + SeqGPT)
人工智能
凤希AI伴侣2 小时前
凤希AI积分系统上线与未来工作模式畅想-2026年1月25日
人工智能·凤希ai伴侣
AI 菌2 小时前
DeepSeek-OCR 解读
人工智能·算法·计算机视觉·大模型·ocr
94甘蓝2 小时前
第 5 篇 Spring AI - Tool Calling 全面解析:从基础到高级应用
java·人工智能·函数调用·工具调用·spring ai·tool calling
zuozewei2 小时前
零基础 | AI应用记忆管理:从短期到长期的完整实践指南
运维·服务器·人工智能
数说星榆1812 小时前
小型工厂工艺流程图制作_在线设计装配/焊接/冲压工艺流程模板
大数据·论文阅读·人工智能·流程图·论文笔记