还在为维护老旧项目头疼?AI 或许是你的救星。本文作者是一位有多年 Android 开发经验的工程师,在离开原生开发多年之后,决定借助 Copilot 等 AI 开发工具,花两周时间将一个 7 年前的 Android 应用从头重写为现代架构版本。
原文链接:https://www.reddit.com/r/androiddev/comments/1lawxue/i_rewrote_my_7yearold_android_app_in_2_weeks_with/
大约 7 年前,我发布了一个名为 SDK Monitor 的小工具应用,用来监控设备上安装的所有应用使用的 targetSDK API 级别。当时正值 Google 开始强制推行 targetSDK 最低版本限制(现在要求至少是去年的版本),于是我的原始应用很快就变旧了。随着时间的推移,我甚至已经无法再打开 Android Studio去维护它了——开发环境和技术体系早已焕然一新。
趁着 GitHub Copilot 的“免费无限使用”即将结束之前,我决定冲一把:看看能否借助 AI,把这个老项目重写一遍。
(项目地址:https://github.com/bernaferrari/SDKMonitor)
AI 驱动的开发流程
整个重写过程用了大约两周时间。
我一开始让 AI 把每个文件都进行“现代化”重写,例如将 MainViewModel 升级为 ModernMainViewModel。等所有文件都对应完成后,我就逐步删除旧代码并替换为新版本。
虽然整个过程也不完全轻松,但要是没有 AI 的帮助,这样的工作量几乎无法想象。我主要使用 Claude Sonnet 4,原因是它响应快、生成效果好;相比之下,Gemini 2.5 Pro 虽然质量不错,但速度慢,且几乎每一行代码都加注释,显得有些冗余。
在重写过程中,我发现了很有意思的一点:早在 2018 年,Google 的 API 就在不断废弃,今天这种趋势依旧;可当年刚推出的库如 Room 和 WorkManager,现在不仅依然存在,而且还支持良好。
大模型偶尔会导入错误的库,或者忘记给图标加上 autoMirrored 属性,但总体来说,大模型基本很少再使用旧 API 或不推荐使用的 API 了。
Jetpack Compose 的发布时间点也恰到好处——既不太早(不会到处都是过时内容),也不太新(大部分 LLM 目前对像 shadcn/ui 这样的东西还比较陌生)。相比过去需要引入大量第三方库,现在除了 Google 自家的库外,我只手动引入了少数几个,比如 Coil 图像加载库。
我的开发工作流比较独特:我一边用 VS Code 与 AI 快速交互(主要用“编辑模式”迭代代码),一边用 Android Studio 写代码和调试——毕竟 VS Code 至今还没有 Kotlin 的语言服务器支持。
那么,AI 重写过后的 SDK Monitor 2.0 有哪些变化?
可以说,这是一个彻底重写的全新版本。我专注于用最新的技术,打造一个简洁、高效、实用的 App,主要亮点包括:
- 100% Kotlin 编写,完全采用 Jetpack Compose + Material 3 Expressive 设计语言(虽然该套件仍处于 Alpha 阶段,但我尽可能实践了其中的设计理念)。
- 支持动态主题切换,兼容手机、平板和折叠屏(受到 Grok App 的启发)。
- 新增视觉化图表,可展示 SDK 版本分布和近期应用更新情况。
- 自定义快速滚动条,可按首字母或 SDK 版本快速定位应用(灵感来源于 Niagara Launcher)。
- 支持多种语言,包括葡萄牙语、意大利语、法语、德语、日语、中文和西班牙语,由 AI 翻译完成。
为了让 AI 更好地理解上下文,我还对项目结构做了些调整,把相关的 ViewModel、界面组件等文件统一放进同一个目录(这种结构在 Web 开发中更常见)。这样我只需拖一个文件夹到 AI 的上下文窗口,它就能理解所有依赖关系。
一点个人感想
我知道,这个应用的用途非常小众,可能对大多数人都没什么帮助。不过自 2018 年以来,还是有一些用户持续使用这个工具并积极反馈 bug。
如果你觉得“这个项目挺有意思,但不适合我”,我也完全理解,毕竟我也从未将它发布到 Play Store上。一方面是因为它需要查询所有已安装应用,另一方面,是因为它本身就不是面向大众的 App。
但这个应用其实还有一个“隐藏功能”:它可以作为一个很棒的 App 模板:项目规模适中、不依赖于网络、便于定制。你可以 Fork 它,然后在此基础上构建全新的项目。无论是 ViewModel 架构、Hilt 依赖注入,还是 Jetpack 组件的广泛使用,都能为你节省不少时间——要知道, 目前Google连个官方的 WorkManager 示例模板都没有。
说实话,我早就不是 Android 开发者了——先转向了 Flutter,后面又跳进了 Web 开发。不过,这次重写项目的过程非常有趣,也让我重新燃起了对老项目的热情。
最后,我希望这篇文章能启发你,去重拾曾经的老项目、用 AI 更快地启动新项目,或者也可以干脆 Fork 我的项目,打造一个全新的产品。