这是我参与更文挑战的第3天,活动详情查看: 更文挑战
前言
前一篇文章AOSP 源码环境搭建我们已经将AOSP整个源码down到了我们硬盘。接下来我们就要Read The Fucking Source Code !
准备工作
原理
idegen专门为IDE环境调试源码而设计的工具,所以我们要将工程导入AS需要下面三个步骤
- 获取到idegen.jar
- 获取idegen.sh 执行生成android.ipr/android.iml
- Android sutdio 选择android.ipr导入
不想编译整个AOSP源码的,对于idegen.jar以及idegen.sh 获取可以参考AOSP frameworks 源码环境搭建
下面讲下完整版的
cd ~/aosp //具体的源码根目录
//用于初始化环境变量
source build/envsetup.sh
//生成文件out/host/linux-x86/framework/idegen.jar 注意要在bash下 zsh会有问题
mmm development/tools/idegen/
//源码根目录生成文件android.ipr(工程相关设置), android.iml(模块相关配置)
./development/tools/idegen/idegen.sh
//改成可读可写,否则,在更改一些项目配置的时候可能会出现无法保存的情况
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
m/mm/mmm/make 相关参考Android源代码编译命令m/mm/mmm/make分析
todo
如何阅读 wiki.lineageos.org/import-andr…
导入源码
打开Android Studio, 点击File
-> Open
,选中前面生成的android.ipr文件即可, 该过程较耗时
加载前配置文件提速
打开android.iml
文件,有大量excludeFolder,是指不会导入到AS的模块,默认除了以下14个文件夹之外的所有文件都会导致到AS工程, 这显然还会非常庞大的,那么我们可以有选择的导入 如下:
<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/host"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilt"/>
加载后提速
如果已经把全部项目导入到Android Studio,又想删除怎么办,其实有一个简单的方法就是进入目录Project Structure
-> Modules
, 可快速去除某些模块, 其中红色代码Exclueded选项(即代表已删除的目录), 如下图:
配置源码正确跳转
这里的配置JDK/SDK,是用于解决在分析和调试源码的过程,能正确地跳转到目标源码,而非SDK中的代码。 点击File
菜单下的Project Structure
.
新建JDK(No Libraries)
- 新建JDK(No Libraries),路径可选择之前的一样的
- 删除JDK(No Libraries)中的ClassPath和SourcePath
配置SDK
Project Structure -> SDKs, 选中Android API 28 Platform
, 然后选择其Java SDK为前面新建的JDK(No Libraries)
选择SDK
建立依赖
Project Structure -> Modules -> android -> Dependencies: 先删除Android API 25 Platform之外的所有依赖, 然后点击下图绿色的+
号来选择Jars or directories
,将frameworks添加进来, 也可添加其他所关注的源码;
调试
前面已搭建好了Android的源码调试环境, 接下来可以在线调试源码. 首先,需要一台具有debug版的手机, 打开开发者选项, 允许USB调试.
frameworks各大核心服务运行在system_server进程, 在调试器上名字为system_process,通过attach到我们要调试的目标进程, 同理, 要调试其他app进程也是这个方式.