简述

默认情况下,AS 中看到的源码只是其中一部分,Android.jar 中的源码只是 platform_frameworks_base/core 中的代码,其他的都看不了,例如 @hide 的方法看不了,这样就比较不方便。

如果要看更多的源码,则需要自己动动手,目前有两种方式:

  1. 导入完整 AOSP 源码,可以查看所有的源码,但是需要上百 G 的空间,也比较麻烦;
  2. 导入 platform_frameworks_base 源码,比 AOSP 少,但是能看到绝大部分应用层相关的代码;

1) 下载 platform_frameworks_base 源码

  1. mkdir android-source-code
  2. cd android-source-code
  3. 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/ 目录下的指定位置:

  1. cd android-source-code
  2. mkdir -p ./development/tools/idegen/
  3. 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,并将其放到指定位置:

  1. cd android-source-code
  2. mkdir -p ./out/host/linux-x86/framework
  3. cp ./idegen.jar ./out/host/linux-x86/framework/idegen.jar

4)生成 android.ipr 、android.iml

执行 idegen.sh :

  1. cd android-source-code
  2. ./development/tools/idegen/idegen.sh

执行后会在 android-source-code/ 目录下生成 android.iprandroid.iml 文件,之后就可以用 AS 打开 andorid.ipr 文件。

整体的目录情况:
image.png

在 AS 中打开后,我们搜一下 ActivityThread 类:
image.png

设置 JDK

打开后会提示需要配置一下 JDK,点击配置即可。
image.png

导入其它源码

如果需要看 base 外的代码,比如BaseDexClassLoader ,你就直接去将整个dalvik 目录打包下载,并解压到根目录,然后再执行一次./development/tools/idegen/idegen.sh即可。

错误

Error: Run from the root of the tree. 没有严格按照目录创建后执行,会报错。

资料