Android Studio Otter 3 发布已经有段时间了,但后台和群里还是不断有人问我同一个问题:日常开发到底选 Android Studio 还是 Cursor?
说实话,这个问题的背后不是“哪个工具更好”,而是“2025年做 Android 开发,你的工作流到底应该怎么搭”。尤其是 Otter 3 这次更新,把 Gemini 3.0 直接内嵌进 IDE,AS 不再是那个只懂编译和调试的笨重老黄牛了;而 Cursor 这边,凭借对话式编程和 Agent 模式,早就从“编辑器”变成了“半个开发搭子”。
这篇文章我不打算写那种“各有优劣,看需求”的和稀泥式对比。我会从我自己实际使用两个工具做项目的真实体验出发,把 Otter 3 的新能力、Cursor 的看家本领、以及哪些场景下我会用哪个、哪些工作流我建议你怎么搭,一次性讲清楚。不管你是刚装好 Android Studio 还在折腾中文设置的新手,还是已经准备把 Cursor 接进 Android 项目的熟练工,这篇都值得你花十分钟看完。
1. Otter 3 这次更新到底更新了什么
1.1 命名回归动物系列,版本号背后是工具链的重整
Android Studio 的版本代号从 Koala 到 Ladybug,再到现在的 Otter(海獭),看起来只是延续了动物命名的传统,但 Otter 3 这次的内核变化比名字有意思得多。
Otter 3 基于 IntelliJ 2025.1 平台,这意味着它继承了 JetBrains 全家桶在索引、重构、内存管理上的最新优化。我实际体验下来,最直观的感受是:大项目打开速度变快了,Kotlin 代码的索引时间明显缩短,之前切分支后 Gradle 同步卡半分钟的情况也好了不少。
但这只是平台升级带来的“基础福利”。Otter 3 真正值得关注的是三个方向:Gemini 3.0 深度集成、性能剖析工具的强化、以及 Compose 工具链的进一步完善。这三个方向的共同点是——Google 想让 AS 从“编辑器”变成“全栈开发工作台”的意图非常明显。
1.2 Gemini 3.0 内嵌,不是聊天框而是代码引擎
很多人在 Otter 3 发布后先去试了那个 AI 聊天侧边栏,然后说“这不就是套壳 GPT 吗”。但我建议你别急着下结论,因为 Otter 3 里 Gemini 的重头戏不是聊天,而是以 AI Assistant 的形式贯穿了几个日常高频场景:
- 代码补全:不再只是“根据上文猜下一个 token”,而是能理解整个文件甚至模块的上下文,给出跨文件的补全建议。实测在写 ViewModel 和 Repository 层代码时,补全的准确率明显比之前高,很多套路化的样板代码几乎是敲完第一行它就帮你把整个结构补出来了。
- 自动生成测试:选中一个方法,右键选择“Generate Tests with Gemini”,它会基于方法逻辑直接生成带 Mock 的 JUnit 测试。生成的测试虽然不一定完全符合你的业务语义,但作为起点改起来比自己从零写快很多。
- Commit Message 生成:这个功能看起来不起眼,但实际用起来很香。你在 Commit 面板点一下,它会根据 diff 生成符合 Conventional Commits 规范的提交信息,省去了憋 commit message 的时间。
- 代码解释与重构建议:对一段复杂逻辑右键选择“Explain with Gemini”,它能用自然语言解释这段代码在干什么;选择“Suggest Refactoring”,它会给出重构方向建议。对于接手老项目、读别人代码的场景,这两个功能属于“谁用谁知道”的爽。
需要说明的是,国内的网络环境下访问 Gemini 服务需要有稳定的连接方式,这个大家自己评估。如果团队用的是其他 AI 插件(比如通义灵码、CodeGeeX、CodeBuddy),Otter 3 的 IntelliJ 插件生态依然兼容,不影响你继续使用原来的工具链。
1.3 性能剖析和 Compose 工具链的升级
除了 AI 能力,Otter 3 在传统强项上也做了不少文章。
性能剖析器这次升级了能耗分析,能更清楚地看到 App 的 CPU、网络、能耗消耗是来自主线程、后台任务还是第三方 SDK 的轮询。做性能优化的同学应该会非常喜欢这个改动,它把之前需要靠 Profiler 手摸、或者结合 Battery Historian 才能排查的事,直接在一个面板里给了结论。
Compose 工具链这边,Otter 3 加强了对 @Preview 多设备预览的支持,新增了字体缩放、无障碍缩放比、深色模式同时预览的快捷方式。做 Compose UI 的同学,验证布局在不同屏幕尺寸和系统设置下的表现会方便很多。同时,Compose Compiler 与 Kotlin 2.2+ 的版本兼容性做了进一步对齐,用最新 Kotlin 版本做 Compose 开发时的坑少了不少。
还有一个容易被忽略的小更新:Android Studio 支持打开 Eclipse 项目了。虽然 Eclipse 早就不是主流,但很多公司维护着历史遗留项目,之前要开这种项目必须先转 Gradle 或者用 IDEA 的迁移工具,现在 AS 可以直接识别并导入,虽然没有魔法般一键转换,但至少省了一个步骤。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Cursor 凭什么能成为“AI 编程”的代名词
2.1 Cursor 不只是编辑器,而是一套 AI 优先的开发范式
聊 Cursor 之前,必须先明确一件事:Cursor 不是“带 AI 插件的 VS Code”,它是从底层就把 AI 当成第一公民来设计的编辑器。
它基于 VS Code 的代码库做了深度改造,这意味着你熟悉的快捷键、插件生态、主题配置基本都能无缝迁移。但 Cursor 的灵魂在于,它把“对话”变成了一种高效的编程交互方式——你可以像跟同事讨论问题一样,把需求、报错信息、代码片段丢给 AI,然后让它直接给出修改建议或生成代码。
在 Android 开发场景下,Cursor 的定位不是替代 AS,而是在某些环节比 AS 更高效。这点我后面会专门展开,先看看它到底强在哪。
2.2 Cursor 的四大核心能力拆解
Tab 补全:比“自动补全”多走一步
Cursor 的 Tab 补全不是简单的代码联想。它能根据你当前的代码风格、项目上下文、甚至 Git 历史,预测你接下来要写什么。比如你写了一个函数,按 Tab,它能帮你把整个函数体补完;你刚写完一个 RecyclerView 的 Adapter 类,按 Tab,它能把配套的 ViewHolder、点击事件回调一起补出来。
这个能力在写 UI 样板代码、Repository 层、网络请求层的时候非常实用。说实话,我用 Cursor 写了不少重复度高的代码,大部分情况 Tab 补全的准确率都能达到“改几个变量名就能用”的程度。
Chat 与 Ask:带着上下文提问
Cursor 的 Chat 有两种模式:Chat 是纯对话,适合问概念、聊方案;Ask 是带着当前光标位置或选中代码的上下文提问,AI 能直接看到你在写的文件,并基于此回答。
举个例子,你在 AS 里看到一个新的报错,通常要复制报错信息、贴到搜索引擎或 ChatGPT,然后对着找解决方案。在 Cursor 里,你只需要按 Cmd+L,把那段报错直接框选,然后问一句“这个怎么解决”,AI 结合你项目里的具体代码、SDK 版本、依赖配置来回答,给出的方案往往更加贴合实际情况。
Agent 模式:从“问一句答一句”到“给你干完”
这是 Cursor 最狠的地方。Agent 模式允许 AI 在一个独立环境中自主读取文件、修改代码、运行命令、根据结果反思迭代。
打个比方:你让它“给这个项目加上网络请求重试机制”,它会先找到网络层代码,读取现有的架构,在合适的位置实现重试逻辑,然后检查编译是否通过。整个过程不需要你一步一步地给指令。
当然,这并不意味着 AI 能完全替代你写代码,但它确实能把很多“执行”层面的工作接过去。你更多的时间花在“定义需求”和“审查结果”上,而不是亲手去敲那些你早就知道答案的代码。
多文件编辑与跨文件重构
Cursor 在处理跨文件修改时有天然的优势。你说“把所有接口请求方式从 HttpURLConnection 改成 OkHttp”,AI 能遍历整个项目里相关的文件,逐个做修改。虽然最后你要审查和调整,但至少省去了一个一个文件打开、逐行 Code Review 的时间和精力。
2.3 为什么 Android 开发者对 Cursor 又爱又纠结
说到这里,肯定有人心动想去试试 Cursor 了。但 Android 开发者在用 Cursor 时,总会遇到几个“尴尬”:
- 它不是 Android 专用工具:你没有 Android SDK 管理、AVD 模拟器管理、Gradle sync 一键解析等 AS 专有的功能。
- 项目模型的理解不如 AS 深:虽然 Cursor 能识别 Gradle 文件,但在处理资源文件 R 类生成、BuildConfig、多 module 依赖关系时,它的智能程度远不如 AS 自带的理解能力。
- 中文设置问题:很多第一次用 Cursor 的人会到处找“中文设置在哪”,其实它默认继承 VS Code 的 locale,需要安装中文语言包后重启。这个问题虽小,但确实劝退了一些中文用户。
不过这些“尴尬”并不影响 Cursor 在某些工作流里的优势。更准确的说法是——Android 开发者在用“双工具流”时,Cursor 作为一个代码生成/重构/理解的辅助工具,价值非常大。我这边的项目工作流就是:新功能先用 Cursor 快速搭出雏形,再回 AS 里做编译、调试、性能检查、模拟器验证,最后用 AS 做版本发布。这个组合拳我用了一两个月,效率提升是很明显的。
3. 核心场景实测:到底什么时候该用哪个
3.1 场景一:写新功能代码
假设现在要写一个“用户资料编辑页”,包含 UI、ViewModel、数据层。
用 Cursor 的流程是:先把需求描述给 Agent,让它生成 Compose UI 骨架和基础逻辑;然后人工在 Tab 补全的配合下把细节填上。整个过程是“AI 当主力,你当架构师和审查者”,快是真的快。
用 AS + Gemini 的流程是:自己搭 UI 结构,Gemini 代码补全会在你写的时候帮你填充实现。它更像是一个非常聪明的“自动驾驶辅助”,方向盘还是你握着。
结论:两个人的效率差距不大,但如果你是单人开发或在一个小团队里,Cursor 的对话式编程会让你写新模块的速度快上一截。
3.2 场景二:改 bug 和调逻辑
改 bug 的核心难点往往在于“定位问题”,而不在于“怎么写修复代码”。
在定位阶段,AS 的 Debugger、日志、断点是无可替代的。你可以直接在 AS 里打断点、看变量值、查看调用栈;而 Cursor 虽然能看懂当前文件的上下文,但它无法真正“运行”你的 App,对运行时状态的感知基本为零。
在修复阶段,Cursor 可以根据报错信息和你贴的代码快速生成修复建议,AS 的 Gemini 也可以做类似的事。两者在这个环节差别不大。
结论:涉及运行时行为的问题,用 AS 定位,可以用 AI 辅助来生成修复代码;纯逻辑层面的问题,Cursor 更顺手。
3.3 场景三:重构老代码、理解陌生项目
接手一个几万行的老项目,想看明白某个功能是怎么实现的,用 AS 的“Find Usages”+“Call Hierarchy”确实能梳理调用链,但效率不高。
用 Cursor 的 Ask 模式,选中一个类或一段方法,问“这个类在项目中被谁用到了,主要职责是什么”,AI 能基于项目索引给出一个结构性极强的回答,相当于你有一个熟悉项目的老员工在旁边给你讲代码。在重构方向确认后,用 Agent 批量替换调用点、或者生成适配新架构的中间层代码,也比手动逐文件改要快得多。
结论:理解老项目、做跨文件重构、生成迁移方案,这些场景下 Cursor 是绝对的效率神器。
3.4 场景四:编译、联调、性能优化、发版
这个场景下没有悬念——必须用 AS,且只有 AS。
Android 开发涉及的环节远超“写代码”:你需要 Gradle 脚本管理依赖、AAPT 处理资源、模拟器或真机调试、APK 签名、混淆规则、包体分析、Profiler 性能检查、网络抓包调优等。这些功能不是 Cursor 的定位,也不是它能替代的。
尤其是发布流程,你需要在 AS 里配置好 signingConfig、Build Variant、生成正式包做验收测试。靠着 Cursor 再牛,也无法替代 AS 和 Gradle 的紧密集成。
结论:编译、调试、打包、性能调优、版本发布,老老实实用 AS。
3.5 场景对比速查表
| 核心场景 | 首选工具 | 辅助工具 | 说明 |
|---|---|---|---|
| 新功能开发 | 双工具皆可 | Cursor 写雏形 + AS 编译验证 | 单人开发用 Cursor 提速最明显 |
| 修改 bug / 调试 | Android Studio | Gemini/Copilot 生成修复建议 | 运行时问题的定位绕不开 AS Debugger |
| 理解老项目 | Cursor | AS Find Usages 辅助验证 | Ask 模式讲代码非常直观 |
| 跨文件重构 | Cursor | AS 编译验证 | Agent 模式能自动处理大量重复修改 |
| 性能调优 | Android Studio | Cursor 辅助分析代码逻辑 | Profiler 仅在 AS 中可用 |
| 打包发版 | Android Studio | 无 | 签名、构建变体、混淆必须在 AS 完成 |
4. 双工具流的实操配置与工作流搭建
4.1 用 AS 打开 Cursor 创建的项目,编译不过怎么办
这是很多人第一次尝试“双工具流”时遇到的第一个坑。你在 Cursor 里新建了一个项目,用它的 AI 生成了不少代码,切回 AS 一同步,报一堆错——大概率是这几个原因:
Gradle 版本不匹配。Cursor 的 AI 生成代码时,经常默认生成最新的 AGP 或 Kotlin 版本配置,但本机 AS 不一定装了这个版本的 Gradle,或者远程仓库还没有缓存好。我的建议是,在用 Cursor 生成项目结构时,先在 AS 里手动创建一个标准项目,然后用 Cursor 打开这个项目来写代码,而不是让 Cursor 从零生成整个项目。
依赖缺失。AI 生成代码时可能会引用某个第三方库,但忘了在 build.gradle 里加上。切回 AS 同步时就会报 “Unresolved reference”。这个问题的解决方法比较朴素:看报错信息,然后把缺失的依赖慢慢补上。如果你在 Cursor 里生成代码后直接运行 ./gradlew build(如果项目里有 Gradle Wrapper),能提前发现一半以上的问题。
资源文件和 manifest 配置不完整。AI 生成的代码里如果有 Activity、Service、权限,需要在 AndroidManifest.xml 里注册或声明。这个也是新手容易漏的。
4.2 把 AS 项目在 Cursor 里正确打开的姿势
想在 Cursor 里写 Android 代码,最好的方式不是通过“Open Folder”直接打开项目根目录(那样 IntelliJ 项目结构的索引就废了大半),而是通过 File > Open Recent 或 File > Open 选择项目根目录时,让 Cursor 基于 .idea 和 Gradle 配置重新索引。
另外,建议安装 Cursor 的 Kotlin / Java 语言插件,并给 Cursor 设置好 JDK 路径。Cursor 本身没有内置 JDK,它需要依赖系统 Java 环境来做语法高亮和补全;如果你的项目用的 JDK 17,你也得在 Cursor 里把 Java 语言服务指向 JDK 17 的路径,否则代码提示和编译检查会失灵。
4.3 中文设置和界面汉化
这一节专门给刚入坑的朋友。关于 AS 中文设置:AS 的界面语言默认跟随系统,如果你的系统是英文环境但想看中文菜单,可以通过 Settings > Plugins 搜索安装 “Chinese (Simplified) Language Pack” 插件,装完重启就变成中文了。
Cursor 中文设置也类似:在扩展市场搜索 “Chinese (Simplified) Language Pack for VS Code”,安装后按 Ctrl+Shift+P 输入 “Configure Display Language”,选择 zh-cn,重启即可。如果找不到扩展,可以去 VS Code 扩展市场搜索,然后用 .vsix 文件手动安装。
另外,很多人问的“Cursor 怎么设置成中文”,其实还有一个更快的办法:在对话中直接说“请用中文回答”。Cursor 的 AI 对话本身支持多语言,你把系统翻译成中文后,生成的代码注释和解释也会倾向于中文,体验会好很多。
4.4 免费额度用完怎么办
Cursor 的免费额度对日常写代码来说不算宽裕。如果你只是偶尔用用,那足够用;但如果你把 Cursor 当作主力编辑器,免费次数基本就是“这么少,够谁用啊”的状态。
免费的 Hobby 计划包含有限的请求次数和慢速模型,用完之后通常只能等第二天刷新,或者升级到 Pro 计划。Pro 计划大概每个月固定费用,换来更多请求次数、更快的模型响应、以及一些额外的功能额度(比如 Agent 的使用次数)。
有个省钱技巧:把不那么重要的任务放在免费额度里做,比如代码补全、简单问答;把重活(比如跨文件重构、Agent 批量修改)留到有额度的时候再用。另外,Cursor 提供的是标准模型调用,不同的大模型成本不一样,选模型的时候留意一下自己的剩余额度,别每次都用最新最强的模型,很多任务用默认模型就够了。
4.5 我的双工具流工作流程
最后分享一套我现在用得比较顺的流程,不一定是标准答案,但至少是一个可以参考的模板:
- 新需求下来,先用 Cursor 打开当前项目,把需求用自然语言描述给 Agent,让它先输出一个实现方案。如果方案可行,直接让它把核心代码写出来。
- Cursor 里拿到初版代码后,切回 Android Studio,同步 Gradle,跑编译,处理报错。编译报错的时候,把报错信息扔回 Cursor 的 Ask 模式,让它结合代码给修复方案。
- 运行到模拟器或真机,用 AS 的 Debugger 逐步验证逻辑,遇到 UI 问题用 Compose Preview 快速调整。
- 性能调优和发版阶段,全程在 AS 里做。
这套流程的好处是:Cursor 负责“想得快、写得快”,AS 负责“查得准、跑得稳”。两者各司其职,谁也不耽误谁。
5. 常见问题与避坑实战
5.1 Android Studio 每次都重新下载 Gradle,怎么破
这应该是最多人问的问题。每次新建项目,AS 都要去下载 Gradle,速度慢得让人抓狂。这个问题的根源是:Gradle Wrapper 指定的 Gradle 版本和你本机已下载的版本不一致。
解决办法有三个:
- 在项目根目录的
gradle/wrapper/gradle-wrapper.properties里,把distributionUrl的版本改成你本机已经下载好的版本。 - 配置 Gradle 镜像。在用户目录(Linux/Mac 是
~/.gradle/,Windows 是C:\Users\你的用户名\.gradle\)下创建init.gradle文件,配置阿里云或腾讯云的镜像仓库,这样 AS 和命令行下载依赖的速度会快很多。 - 最重要的一条:如果你经常新建项目,建议下载一个 Gradle 发行版放在本地,然后在 AS 的
Settings > Build Tools > Gradle里选择 “Use local Gradle distribution”,指向你本地解压的 Gradle 路径。这样每次新建项目只要改一下 wrapper 版本,就不需要联网下载了。
5.2 反编译 APK 的正确姿势
网上流传的各种反编译工具,很多都是老古董了。AS 里其实可以直接看 APK 的内容:把 APK 拖进 AS 窗口,它会用 “APK Analyzer” 打开,可以查看包体大小、DEX 文件、资源文件列表。
如果你想真正看代码逻辑,推荐 jadx——这是一个开源工具,能把 APK 转成 Java 代码,支持图形界面和命令行两种模式。但要注意,反编译 APK 得到的代码只能作为参考,现代 App 基本都做了混淆和加固,直接阅读的难度不小。另外,反编译他人应用涉及法律风险,建议只用于分析自己项目的线上包结构。
5.3 Cursor 常见问题速查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| Cursor 对话变卡/报错 | 免费额度用尽 | 查看右下角额度,等待刷新或升级 Pro |
| Cursor 补全结果不准确 | 没有把项目上下文加载进对话 | 使用 Ask 模式选中代码后再提问 |
| 中文显示乱码 | 语言包未正确安装 | 重装中文语言包,检查 locale.json 配置 |
| 项目打开后代码提示不生效 | 未配置 JDK 路径 | Settings > Search “JDK” 指向本机 JDK |
| 复购计划没有立即生效 | 订阅周期按自然月计费 | 查询官方文档或联系客服确认生效时间 |
5.4 AS 打开老项目/旧版本项目遇到的问题
很多人照着网上的教程下载了旧版 AS(比如 3.4 之类的老版本),打开新项目时发现各种不兼容。我的建议是:除非你有明确的兼容需求,否则直接下载最新版 Android Studio。新版能打开绝大多数旧项目,而旧版基本打不开新项目。
如果你需要打开一个非常老的项目(比如用 Eclipse 构建的),Otter 3 现在支持直接导入,导入之后 Gradle 会自动构建迁移,但耗时可能比较长,而且容易因为依赖冲突报错。应对策略是:不要一键迁移,先把 build.gradle 里的插件和依赖版本对齐到当前 AS 支持的版本,再逐步处理编译错误。
5.5 性能、存储与日常体验
开发 Android 项目,AS 的内存占用和索引开销一直被人吐槽。Otter 3 在内存管理上做得比之前好,但要做到流畅,建议至少在 AS 的 studio.vmoptions 里把 Xmx 调到 4GB 以上。如果你用的是 8GB 内存的电脑,开发时尽量关掉其他大型软件。
Cursor 相对轻量,但它的索引和 AI 请求也会消耗一定资源,尤其是打开大型项目时。我的建议是:在 Cursor 的设置里关闭工作区索引中不需要的文件夹(比如 build 目录、.gradle 缓存目录),避免它把大量资源浪费在没用的文件上。
另外,日常开发会被忽略的一点是 项目根目录下的 .gitignore。无论你用 AS 还是 Cursor,都建议把 .idea/、build/、.gradle/、local.properties 这几个目录或文件加入忽略列表,避免把个人配置和临时文件提交到远端仓库,影响团队协作。
写在最后的个人体会
我在日常开发中已经习惯了“AS 为主、Cursor 为辅”的双工具流,但最初切换那段时间确实经历了磨合期。最大的感受是:不要指望一个工具解决所有问题。
Cursor 的强项是理解和生成代码,尤其适合新功能开发、跨文件重构、老项目理解;AS 的不可替代性在于它和 Android 生态的深度绑定——你终归要在 AS 里编译、调试、跑模拟器、分析性能、发版。把两者按场景配合起来,远比二选一要高效得多。
还有个小建议:不管你最终选哪个工具,一定要花时间把快捷键和常用设置调成自己顺手的状态。工具好用的核心在于“用得顺”,而不是“功能多”。与其每天都在纠结哪家强,不如把到手的东西吃透用足,让工具真正成为你效率的放大器。
