一.生成导入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.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将不会加载一下目录文件。
excludeFolder 标签表示不会加载到AS快速索引的文件,这样第一次加载速度能提升。如果还有一些自定义文件不需要加载的话,可以在这里添加。
三.导入系统源代码到AS
通过AS的Open an existing Android Studio project选项选择android.ipr 就可以导入源码了,打开一次大概要10分钟左右就可以导入完毕。导入后工程目录切换为Project选项就可以查看源码。
四.配置项目的SDK,JDK
为了能确保代码跳转到导入的framework中,而不是SDK中,需要将SDK中classpath标签页下所有的文件删除。
确保的项目的SDK为源码对应的SDK
五.解决源码中跳转错误问题
①为当前工程设置正确的SDK和JDK
②设置'Modules'的依赖
先将所有依赖删掉,只留下上图'1'所指向的两个(注意:这里删除全部只是为了方便。如果确实用到了.jar,在将它们的路径添加进来就可以了.
如:5.0.1的ContactsCommon用到了geocoder-2.9.jar和libphonenumber-6.2.jar)
点击上图中'2'指向的'+'并选择上图'3'指向的'Jars or directories'选项,依次将frameworks和external文件夹添加进来.如:
注:推荐把frameworks和external这两个移到最上面,这样在代码跳转时会优先从这两个文件夹下查找,而不是在Android.jar中查找。
其它版本的代码在添加frameworks时可能会显示成:
没有关系,只是显示问题,点击OK还是会把frameworks路径添加进去的.
如果还有代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可.
六.exclude不需要的代码目录
File -> Project Structure -> Modules中可以通过Excluded来筛选代码目录,比如我们选择bionic目录,点击Excluded,bionic目录会变为橙色,bionic字段会出现在右侧视图中,说明该目录已经被Excluded掉,通俗来讲就是被排除在工程之外。如果不希望bionic目录被Excluded掉,再次点击Excluded,bionic目录会变为灰色。
七.AS调试源码
7.1新建Android工程配置
实际上不按如下配置也可以调试源码,但是打开AS时会在Event Log处报错且不能消除提醒,因此这里建议还是要配置下。
在File–>Project Structure–>Modules中添加一个Android FrameWork:
修改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
在AS最顶部的工具条中选择Edit Configurations:
在Run/Debug Configurations弹框中点击左上角的加号,添加一个Android App配置,按下图进行配置:
7.2调试源码
将断点打在需要的地方,然后点击菜单的Run–>Attach Debugger to Android Process或者上方工具条的Attach Debugger to Android Process图标,勾选Show all processer,选择需要调试的进程,系统的话选择system_process。如下图所示,注意调试系统的话要使用userdebug的版本。
点击OK后我们设置的断点就生效了,就可以进行调试了。