AOSP 源码导入 Android Studio

3,962 阅读3分钟

这是我参与更文挑战的第3天,活动详情查看: 更文挑战

前言

前一篇文章AOSP 源码环境搭建我们已经将AOSP整个源码down到了我们硬盘。接下来我们就要Read The Fucking Source Code !

准备工作

原理

idegen专门为IDE环境调试源码而设计的工具,所以我们要将工程导入AS需要下面三个步骤

  1. 获取到idegen.jar
  2. 获取idegen.sh 执行生成android.ipr/android.iml
  3. 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

blog.csdn.net/mcryeasy/ar…

如何阅读 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选项(即代表已删除的目录), 如下图:

image.png

配置源码正确跳转

这里的配置JDK/SDK,是用于解决在分析和调试源码的过程,能正确地跳转到目标源码,而非SDK中的代码。 点击File菜单下的Project Structure.

新建JDK(No Libraries)

  1. 新建JDK(No Libraries),路径可选择之前的一样的
  2. 删除JDK(No Libraries)中的ClassPath和SourcePath

image.png

配置SDK

Project Structure -> SDKs, 选中Android API 28 Platform, 然后选择其Java SDK为前面新建的JDK(No Libraries)

image.png

选择SDK

image.png

建立依赖

Project Structure -> Modules -> android -> Dependencies: 先删除Android API 25 Platform之外的所有依赖, 然后点击下图绿色的+号来选择Jars or directories,将frameworks添加进来, 也可添加其他所关注的源码;

image.png

调试

前面已搭建好了Android的源码调试环境, 接下来可以在线调试源码. 首先,需要一台具有debug版的手机, 打开开发者选项, 允许USB调试.

frameworks各大核心服务运行在system_server进程, 在调试器上名字为system_process,通过attach到我们要调试的目标进程, 同理, 要调试其他app进程也是这个方式.

参考

AndroidStudio源码开发环境搭建