前言:
限于以前工作环境,各种软件资源受限,USB口权限受限等等,程序调试只能依靠加Log的方式跟流程。主要工具就是SourceInsight,导入framework源码和应用程序源码,看代码跳转会比较方便。但是调试效率确实不高,而且需要加大量Log才能将一个流程弄清楚。
现在将AS源码环境配置好之后,将整个源码导入,可以打断点来调试源码,这样效率就高太多了,不过AS的源码环境配置起来还是比较麻烦的。也遇到了不少坑。现在总结一下整个过程,以免时间长了忘记,也可以给需要的同事当做指导教程。
一、Android源码的准备
https://lineageos.org/
参考这个官方教程
点击右上角wiki
点击list of How-tos并选择import the sources to Android Studio / IntelliJ查看教程
按照教程中的命令一步一步执行
source build/envsetup.sh
make idegen && development/tools/idegen/idegen.sh
但是到这一步我失败了,其实这一步要分成两步来看,前面一步make idegen这个命令是编译idegen.jar,我们要想导入源码就是基于这个jar包来生成AS的配置文件的。我执行到这步其实是成功生成了这个jar包的,但是工程中编译脚本对编译后的文件重新指定了目录,而不是我们默认的在源码根目录里面的out/里面了。我这块编译后的文件指定到了源码根目录同一级的OUT/目录,这里我的处理办法是在源码根目录创建一个out目录做一个软链接指向OUT目录
ln -s …/OUT/ out
这样就可以解决问题了。
当成功执行完development/tools/idegen/idegen.sh后会在源码根目录生成android.ipr,android.iml
android.ipr:通常是保存工程相关的设置,比如编译器配置,入口,相关的LIBRARIES等
android.iml:主要描述了modules,比如modules的路径,依赖关系等
到目前为止,我们就完成了源码的准备工作。
二、AS准备工作
源码导入AS之前,按照官方教程我们先修改一下AS的配置(找到AS的安装bin目录),
如果系统为32位则修改studio.exe.vmoptions文件,如果系统为64位则修改studio64.exe.vmoptions,调整其中的-Xms和-Xmx参数,官方要求至少在748m以上,在机器配置比较好的情况下可以尽可能调大一点,我的配置如下:
这个时候打开AS,打开已经存在的项目,找到源码根目录,可以看到上面生成的andorid.ipr文件已经被AS识别,直接点击就可以导入源码了。如果不需要整个源码导入可以修改生成的android.iml文件。在这个文件中添加<excludeFloder url=“file://
M
O
D
U
L
E
D
I
R
MODULE_DIR
MODULEDIR”/需要去掉的模块名>就可以排除这个模块了,我这里是全部导入所以没有修改这个文件
源码导入时间比较久,要经过很长的等待。
设置R文件
Project Settings -> Modules中选择out/target/common/R as Sources
导入之后在查看代码过程中会发现跳转有问题,比如在我们 应用程序里面点击跳转并没有跳转到我们的framework/base…里面的代码,解决这个问题我们需要重新配置AS的JDK和SDK。
三、配置JDK和SDK
1.点击File-Project Structure-SDKs,点击上面JDK,将Classpath全部删除
2.点击Android API 23 Platform,Java SDK选择刚刚处理的JDK
3.然后设置Project的SDK版本为我们上面处理的API 23
4.设置Modules,点击+,选择Framework下的Android,然后最右边Dependencies,将除了API 23 Platform和以外其他全部删除,然后点击最右边+在面板中选择第一个JARS or…将external,frameworks,packages导入。
这个时候虽然有部分内容报错,但是看代码跳转都是正确的,写代码也有提示,断点调试也可以正常使用。所以暂时忽略那些错误,等遇到问题再解决,毕竟比加Log调试跟流程还是强太多了。