一.生成导入AS所需配置文件(*.ipr)

①编译源码(为了确保生成了.java文件,如R.java;如果编译过,则无需再次编译)

②检查out/host/linux-x86/framework/目录下是否有idegen.jar

如果idegen.jar不存在,执行:

mmm development/tools/idegen/

在5.0.1的源码中会生成res.java的文件夹,导致idegen.jar运行时抛FileNotFoundException,这是idegen的代码不够严谨造成的。

我的分享里有修改这个bug的patch,或者直接使用我分享的idegen.jar。

③执行

development/tools/idegen/idegen.sh

等待出现类似下面的结果:

android代码编辑器 android代码编辑器源码_ide

这时会在源码的根目录下生成android.ipr和android.iml两个IntelliJ IDEA(AS是基于IntelliJ IDEA社区版开发的)的配置文件,这两个文件一般是只读的,这里建议改成可读可写可执行:chmod 777 android.iml , chmod 777 android.ipr。

二.配置android.ipr

由于要将所有源码导入AS会导致第一次加载很慢,可以在android.iml中修改excludeFolder配置,将不需要看的源码排除掉。等源码项目加载完成后,还可以通过AS对Exclude的Module进行调整。如果你的电脑的性能很好,可以不用进行配置。

在android.iml中搜索excludeFolder,在下面加入这些配置。AS将不会加载一下目录文件。

android代码编辑器 android代码编辑器源码_jar_02

excludeFolder 标签表示不会加载到AS快速索引的文件,这样第一次加载速度能提升。如果还有一些自定义文件不需要加载的话,可以在这里添加。

 三.导入系统源代码到AS

通过AS的Open an existing Android Studio project选项选择android.ipr 就可以导入源码了,打开一次大概要10分钟左右就可以导入完毕。导入后工程目录切换为Project选项就可以查看源码。

android代码编辑器 android代码编辑器源码_断点调试_03

 四.配置项目的SDK,JDK

为了能确保代码跳转到导入的framework中,而不是SDK中,需要将SDK中classpath标签页下所有的文件删除。

android代码编辑器 android代码编辑器源码_android代码编辑器_04

确保的项目的SDK为源码对应的SDK

android代码编辑器 android代码编辑器源码_android代码编辑器_05

五.解决源码中跳转错误问题 

①为当前工程设置正确的SDK和JDK

android代码编辑器 android代码编辑器源码_ide_06

②设置'Modules'的依赖

android代码编辑器 android代码编辑器源码_jar_07

先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.

如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)

点击上图中'2'指向的'+'并选择上图'3'指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:

android代码编辑器 android代码编辑器源码_断点调试_08

注:推荐把frameworks和external这两个移到最上面,这样在代码跳转时会优先从这两个文件夹下查找,而不是在Android.jar中查找。

其它版本的代码在添加frameworks时可能会显示成:

android代码编辑器 android代码编辑器源码_ide_09

没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的.

如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可.

六.exclude不需要的代码目录

File -> Project Structure -> Modules中可以通过Excluded来筛选代码目录,比如我们选择bionic目录,点击Excluded,bionic目录会变为橙色,bionic字段会出现在右侧视图中,说明该目录已经被Excluded掉,通俗来讲就是被排除在工程之外。如果不希望bionic目录被Excluded掉,再次点击Excluded,bionic目录会变为灰色。

android代码编辑器 android代码编辑器源码_ide_10

七.AS调试源码

7.1新建Android工程配置

实际上不按如下配置也可以调试源码,但是打开AS时会在Event Log处报错且不能消除提醒,因此这里建议还是要配置下。

在File–>Project Structure–>Modules中添加一个Android FrameWork:

android代码编辑器 android代码编辑器源码_源码调试_11

修改Manifest file等路径为下图中类似的路径,因为我们常调试这个目录所以这么设置,你也可以设置其他的路径:

Manifest file选择源码下的framework/base/core/res/AndroidManifest.xml

Resources 选择源码下的framework/base/core/res/

Assets 选择源码下的framework/base/core/res/assets

Native libs 选择源码下的framework/native/libs

android代码编辑器 android代码编辑器源码_android代码编辑器_12

在AS最顶部的工具条中选择Edit Configurations:

android代码编辑器 android代码编辑器源码_jar_13

在Run/Debug Configurations弹框中点击左上角的加号,添加一个Android App配置,按下图进行配置:

android代码编辑器 android代码编辑器源码_ide_14

7.2调试源码

将断点打在需要的地方,然后点击菜单的Run–>Attach Debugger to Android Process或者上方工具条的Attach Debugger to Android Process图标,勾选Show all processer,选择需要调试的进程,系统的话选择system_process。如下图所示,注意调试系统的话要使用userdebug的版本。

android代码编辑器 android代码编辑器源码_源码调试_15

android代码编辑器 android代码编辑器源码_源码调试_16

点击OK后我们设置的断点就生效了,就可以进行调试了。