技术复核(2026-10-13):原文面向 Android 5.0 Lollipop 与 Android Studio 1.x。下面的 IDEGen 流程已按 AOSP
android-5.0.0_r1源码核对,属于历史方案;新增的 AIDEGen 示例以android-16.0.0_r1文档为准。
Android Studio
作为Google的亲儿子,Nexus手机系列所收到的待遇大家有目共睹.Android5.0出来之后,Nexus5第一时间就升级到了最新的系统.那么作为Google亲儿子的Android Studio同样备受Google的重视,我也是第一时间从Eclipse转投到了Android Studio的怀抱中,从最初的测试版本一路升级到现在的1.0正式版本.
现在如何查看源码
只查代码时,可以直接使用 Android Code Search,并确认所选分支;需要精确到发布版本时,使用 AOSP Gitiles 的对应标签。
需要本地跳转和修改代码时,先同步目标分支,按该分支文档执行 source build/envsetup.sh 并选择有效的 lunch 目标。以 Android 16 的 AIDEGen 为例,在已配置的源码根目录执行:
1 | # 按模块名生成工程,并明确选择 Android Studio |
也可以把模块名换成源码路径:aidegen packages/apps/Settings frameworks/base -i s。默认示例使用 IntelliJ;-i s 才是明确选择 Android Studio。-s 的意思是跳过构建,缺少生成源码或依赖时不要用它掩盖问题。C/C++、Rust 的语言选项和 IDE 支持按所在分支的帮助检查,不保证一个 Java 工程覆盖所有语言。
现代 AOSP 构建环境要求 Linux;官方已从 Android 11 时期停止支持在 macOS 上进行 Android OS 开发。这与在 macOS 上用 Android Studio 开发普通 Android 应用是两回事。环境要求见 AOSP 开发环境文档。整棵源码树很大,通常先导入需要的模块;重新生成工程会覆盖生成的 IDE 配置,手工调整前注意保存。
当时选择 Android Studio 的原因
关于Android Studio的好处我就不用说了,下面两点就足矣让你转投Android Studio了:
- Android Studio 是 Google 官方 Android IDE,1.0 正式版发布于 2014 年 12 月。
- ADT 停止维护是后来的变化:Google 在 2015 年 6 月宣布于当年年底结束 Eclipse ADT 和 Android Ant 构建系统的开发与官方支持。不能把这个时间提前到本文标注的 2015 年 1 月。
后来的 1.1 稳定版发布于 2015 年 2 月,比这篇文章的初版晚一个月。版本和 ADT 停止维护的时间可以对照 Studio 1.0 公告和 ADT 公告。
转投Android Studio是大势所趋,网上关于如何使用Android Studio的帖子也是满天飞,所以我就不再啰嗦夸奖Android Studio了.看一下下面的图,估计你就会很有欲望了.想查看详细的内容,可以查看Android Studio官方文档

Android 5.0 : Lollipop
Android 5.0 Lollipop 带来了新的界面和平台能力,详细介绍可以查看 Lollipop 官方介绍,我也就不多说了。作为一个开发者,我们不应该停留在绚丽的界面和新奇的 Material Design 上,更要了解其中的原理。
准备工作
下面是 Android 5.0 的历史准备流程,不能套用到任意 AOSP 版本:
- 下载完整且版本一致的 Lollipop 源码,配置该分支要求的 JDK 和构建环境。
- 该版本 IDEGen README 建议先执行
make,用于产生生成的 Java 源码。IDEGen 脚本本身需要已编译的idegen.jar;“没有全量编译就一定不能生成工程”并不准确,但缺少生成源码和依赖会影响索引完整性。
如果访问官方文档或下载源码不顺畅,可以先处理本地网络环境,能花钱解决的事情,就不要花太多时间。
开始(Android 5.0 历史流程)
在源码根目录,先加载构建环境并选择目标,再编译 IDEGen:
1 | source build/envsetup.sh |
这里的 lunch 交互菜单属于旧分支的用法。目标要与下载的设备源码匹配。编译成功后,执行:
1 | development/tools/idegen/idegen.sh |
该版本脚本 会在 out 中查找 idegen.jar 并运行生成器。IntelliJ 生成代码写出的是 android.ipr 和 android.iml,不是原文列出的三个文件;.iws 属于 IDE 的工作区文件。
在当时的 Android Studio 中打开 android.ipr(原文的 android.irp 是笔误),等待索引完成,并按该分支配置 JDK、源码和依赖。这个工程用于阅读源码;IDE 能打开工程不代表可以用普通应用的 Gradle 构建方式编译整个 Android 系统。
到这里就可以看源码了,已经完成了,没有下一步了。
问题
IDEGen 编译失败
先查看第一个实际编译错误,确认源码完整、构建环境已加载、目标正确,以及 JDK 是否符合该分支要求。仅凭“编译失败”不能判断是没有做全量编译。搜索错误时可使用 Google 或 Stack Overflow。
把目录当作 Java 文件读取
当时生成工程,我碰到了下面这个报错:
1 | Exception in thread "main" java.io.FileNotFoundException: ./out/target/product/hammerhead/obj/GYP/shared_intermediates/res.java (Is a directory) |
res.java 在这里是目录。android-5.0.0_r1 的 Configuration.java 只检查名字是否以 .java 结尾,就先进入 Java 文件解析分支,因此会把这个目录交给 FileReader。
我当时的临时办法是把 res.java 改名为 res.j。不过直接改 out 下的产物目录可能破坏后续构建依赖,这个办法不建议照搬。针对这个版本,应当修正 traverse() 的文件类型判断:
1 | - if (path.endsWith(".java")) { |
这样目录会继续进入后面的目录遍历分支。修改后重新编译 IDEGen,再生成工程;其他分支先检查实际代码,不能只按旧堆栈的行号打补丁。
后记
使用Android Studio看Android源码很爽,下面是当时使用 Android Studio 1.x 的感受,不作为当前版本的功能评价:
优点
- 和Android 完美结合
- 代码提示很全
- 代码跳转很强
- IDE比Eclipse好看(我说的是黑色主题)
- 插件很强大(底层是IDEA你懂得)
- 免费(SourceInsight负分,啥?你用的破解版? 当我没说)
缺点
- 对C++代码的支持不是很好
- 有一定的上手难度
关于我 && 博客
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 博主个人介绍 :里面有个人的微信和微信群链接。
- 本博客内容导航 :个人博客内容的一个导航。
- 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
- Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。
一个人可以走的更快 , 一群人可以走的更远
