简述
默认情况下,AS 中看到的源码只是其中一部分,Android.jar 中的源码只是 platform_frameworks_base/core
中的代码,其他的都看不了,例如 @hide
的方法看不了,这样就比较不方便。
如果要看更多的源码,则需要自己动动手,目前有两种方式:
- 导入完整 AOSP 源码,可以查看所有的源码,但是需要上百 G 的空间,也比较麻烦;
- 导入 platform_frameworks_base 源码,比 AOSP 少,但是能看到绝大部分应用层相关的代码;
1) 下载 platform_frameworks_base 源码
mkdir android-source-code
cd android-source-code
git clone https://github.com/aosp-mirror/platform_frameworks_base.git
clone 之后选择一个版本 checkout 一下,这里我选择的是 9.0 的版本,tag 是 : android-9.0.0_r61
。
2)下载 idegen 工具
下载下来的源码不是一个 Android 工程,所以不能直接用 AS 打开,需要用 idegen 工具可以使得 AS 能够打开源码。这个工具是在 AOSP 的工程中的,所以我们需要去下载,点击右上角的tgz
进行下载,并解压,然后把里面的文件放到 android-source-code/development/tools/idegen/
目录下的指定位置:
cd android-source-code
mkdir -p ./development/tools/idegen/
cp -R ./development-refs_tags_android-9.0.0_r61-tools-idegen/* ./development/tools/idegen/
这个 /development/tools/idegen/
路径是有要求的,按这个来。
3)下载 idegen.jar
上面下载的 idegen 还不能正常工作,还需要一个 idegen.jar
,它是需要编译整个 AOSP 项目才有的,不过已经有好人编译好,并分享了。去这里下载现成的 idegen.jar,并将其放到指定位置:
cd android-source-code
mkdir -p ./out/host/linux-x86/framework
cp ./idegen.jar ./out/host/linux-x86/framework/idegen.jar
4)生成 android.ipr 、android.iml
执行 idegen.sh :
cd android-source-code
./development/tools/idegen/idegen.sh
执行后会在 android-source-code/
目录下生成 android.ipr
和 android.iml
文件,之后就可以用 AS 打开 andorid.ipr
文件。
整体的目录情况:
在 AS 中打开后,我们搜一下 ActivityThread
类:
设置 JDK
打开后会提示需要配置一下 JDK,点击配置即可。
导入其它源码
如果需要看 base 外的代码,比如BaseDexClassLoader
,你就直接去将整个dalvik 目录打包下载,并解压到根目录,然后再执行一次./development/tools/idegen/idegen.sh
即可。
错误
Error: Run from the root of the tree. 没有严格按照目录创建后执行,会报错。