首发公众号:Android程序员日记
作者:贤榆的榆
如果你觉得有帮助欢迎关注、赞赏、转发
阅读时间:2616字 6分钟
写在前面
很早就像自己搭一个Android源码阅读环境,折腾了几次无果,就搁置了。最近有点闲暇时间,再加上也觉得是时候更深刻的认识Android系统了,所以再折腾了一次,没想到成功了,而且是用AndroidStudio阅读,还是那个熟悉的界面,还是那个熟悉的快捷键,哈哈,你也试试?
首先呢,之前有研究过用AndroidStudio阅读源码的,应该都知道,如果想用AS阅读Android源码差不多分这样四个步骤
- Step 1: 下载源码
- Step 2: 编译源码
- Step 3: 用AS导入源码
- Step 4: 阅读源码
尝试过的朋友就知道,编译源码这个步骤应该是一个比较让人难过的过程。可能你的编译花的时间比你下载还长。不过在尝试了很多次之后,我也完美的搭好了AS阅读源码的环境。下面我就告诉大家如何做到不用编译就能导入AS阅读Android源码。
Android源码阅读环境搭建
1、下载初始化源码库
AOSP(Android Open Source Project)初始化包下载地址:
https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
将该网址复制到浏览器即可下载,迅雷好像不能使用,至少我的没用。另外需要注意的是,下载的过程中,不要合上电脑。我都下载了18g就因为合了一下电脑,结果就要从头再来了。
当然源代码下载,除了直接下载这个初始化包,你也可以先装repo工具,然后用repo同步。反正无论是哪种方式,中间都不能断。
关于源码下载更多信息可以查看下面两个网站:
过清华大学开源软件镜像站:
*https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ *
google官网:
https://source.android.com/source/downloading.html
2、下载repo工具
差不多下载最新的初始化包,你需要好几个小时,网速不好,甚至要10几个小时。那么在这个过程中我就可以把后面同步和检出代码需要的的repo工具安装一下,在命令行中执行如下代码,(我的是mac,win的话,大家可以google一下对应的教程,应该会有很多)
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3、同步并检出源码项目
下载完成以后会得到一个37g的以aosp-latest命名的tar文件,然后将其解压可以看到里面有一个.repo
的隐藏文件(mac 下载查看隐藏文件的快捷键Command+Shift+ .
)
接下来使用命令行进入到解压的根目录然后运行repo sync
,然后就可以同步到最新的分支,并检出其master分支。
当然你也可以不同步直接使用 repo sync -l
来检出repo里面的源码项目。
检出后的效果是这样的:
4、关键一步——放入编译文件
其实之所以需要编译,这个和我们的Android项目是一个道理,我们从github上拉下来的开源Android项目也是没有.iml等配置文件的,需要我们自己再编译一边,才能让这个项目里的个文件在AS关联起来。
那么在这里之所以不用编译,不是真的无需编译。而是有一位简书ID是difcareer的小伙伴已经帮我们把各个版本需要的AS配置文件已经编译好,我们只需要将它下载下来放到项目的根目录就ok了。
as配置文件git地址:
https://github.com/difcareer/AndroidSourceReader
注:
如果你忘了自己源码检出的版本可以通过如下方式查看:
根据目录'/build/core/version_defaults.mk' 打开version_defaults.mk文件,然后找到�PLATFORM_SDK_VERSION
这个关键字的值,就可以在下表中找出相应的版本。
如果是28 当然就是Android 9.0了
5、将源码项目导入到AS
准备工作已经做完了下面就可以像导入一个Android项目一样导入AOSP目录了。进入AOSP目录选择被识别出来的.ipr
文件,然后点击open即可。
这里有两个个问题需要注意一下:
- 第一次导入的时候,可能你看到的只有那几个刚才放入的配置文件,而看不到其他的目录,这个时候需要点击
File->Invalidate Cashes/Restart...
,让AS重新启动编译一下项目。
image
这个编译的状态差不多会持续10几分钟。然后将右边文件目录切换到Project模式下:
image
- 如果出现循环执行任务
Scanning file to index....
不动
image
解决办法如下(Open module setting --> Modules --> 找到gen文件夹 --> 选择Resources
)
image
6、好了导入成功
那么接下来我们就可以自由的翱游在Android源码的海洋了,让我们来看一下吧!
image
最后,要感谢一下「代码GG之家」的明哥,8年Android手机开发的老大哥。在源码阅读环境搭建和源码阅读方式与技巧上都给我很大的帮助。这里我把明哥在星球里的回答贴出来分享一下:
另外,我也强烈推荐明哥的「Android答疑解惑」星球。毕竟,成长的道路上,我们需要弄清的不是距离起点有多远,而是距离下一个终点有多近。我相信明哥会是那个让能够告诉你离终点有多近的人。
推荐阅读
欢迎大家关注我的公众号系列文章
- 「Do.006」Android实战项目(1)——我想说“开始吧”
- 「Do.007」Android实战项目(2)——使用Github进行版本管理
- 「Do.008」Android实战项目(3)——Git 分支管理模型
- 「Do.009」Android实战项目(4)——AndroidStudio插件推荐(磨刀)
- 「Do.014」Android实战项目(5)—— gradle 配置release与debug环境分离
其他
网友评论