使用Android-studio调试Android 6.0源码

前言

上一篇文章总结了在Ubuntu 16.04系统下编译android6.0源码,这一篇文章学习如何使用AS来调试编译好的源码。

一、将源码导入AS

参考博客Android源码的下载、编译与导入到Android Studio

在aosp目录中执行以下命令,编译idegen模块:

1
mmm development/tools/idegen/

然后执行下方命令在根目录生成对应的android.ipr、android.iml IDEA工程配置文件(时间稍微久一些,自己的大约1分钟):

1
development/tools/idegen/idegen.sh

此时在源码目录下生成android.ipr和android.iml文件

在Android-studio中,选择File -> open,打开根目录下的android.ipr文件,然后等待index完成后(自己的13分钟左右),就可以使用studio查看源码了,但是这样导入是将所有的源码导入到studio中,如果只想导入FrameWork和packages模块的话,可以修改android.iml文件。

android.iml文件通过添加配置的方式告诉AS不导入某些模块,比如现在我不想导入art模块,那么就在android.iml文件中添加:

1
<excludeFolder url="file://$MODULE_DIR$/art" />

不难发现,其格式为:<excludeFloder url="file://$MODULE_DIR$"/模块名>
注:编译生成的android.iml文件中已经默认排除了一下模块,通过搜索excludeFolder关键字可找到.

我这里只保留了framworks和packages模块,将其他模块全部排除了,因此在android.iml中添加了以下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/ndk" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/tools" />

二、使用AS调试

参考博客:自己动手调试Android源码

此时导入的源码会出现源码跳转错误,所以需要配置SDK和JDK

2.1 配置JDK和SDK

点击Project Structure,进入到项目配置界面,在SDK设置中加入必须的JDK和SDK.

  • 第一步:将JDK(下图中1.8的位置)的classpath的内容都删掉,
  • 第二步:点击上图Android API 23 platform,Java Sdk设置为第一步中设置的jdk,点击ok

2.2配置Project

首先配置project的sdk版本

然后点击Modle,点击modle视图中的+,选中android,这一步一定要做,否则无法绑定断点,结果如下:

2.3 修改modles依赖

选择Modules中的android首先将所有的依赖删除,只留下下图中的两项

然后点击右侧的+号,将Frameworks和external目录加入,然后选中这两项前边的复选框,点击最下方的ok

2.4 开始断点调试

这里只演示以下如何调试系统的Setting模块,详细的步骤可以参考自己动手调试Android源码

命令启动我们的虚拟机

1
emulator

打开SettingActivity.java文件(/work/aosp/packages/apps/Settings/src/com/android/settings/SettingsActivity.java)
然后设置断点,选中setting进程(注意一定要把show all process选中)
打开虚拟机中的设置,这是就可以看到断点生效

到此我们就可以使用Android-studio来调试Android源码了。