1、作用 

使用AndroidStudio能够调试Android Framework,断点调试能够更理解Framework逻辑。

2、环境搭建

下载Android源码

编译源码

配置Android Studio

  • 配置vm options

Android 14 Framework代码 android framework调试_Android

  • 配置最大打开文件数

Android 14 Framework代码 android framework调试_Android_02

创建Android Framework工程

  • 源码根目录运行.build/envsetup.sh
  • 单独编译idegen模块,在源码根目录运行mmm development/tools/idegen/  运行成功后会生成idegen.jar

Android 14 Framework代码 android framework调试_framework_03

  • 运行idegen脚本,在源码根目录运行./development/tools/idegen/idegen.sh
  • idegen脚本运行成功后会在源码根目录生成android.iml、android.ipr等文件,其中android.ipr就是AndroidStudio使用的文件
  • 提升导入代码速度,使用excludeFolder去掉不关注的代码目录,修改android.iml

Android 14 Framework代码 android framework调试_Android_04

导入Framework工程到Android Studio

      打开Android Studio,然后找到根目录下生成的android.ipr文件并打开(耐心等待index建立)

配置项目工程

  • 导入完成后会出现Frameworks detected
  • 然后点击Configure,点OK
  • 配置工程
  • 然后把Android SDK的classpath和sourcepath也删除,同时将Java SDK选为刚刚配置JDK1.8
  • 按照如下设置把JDK的classpath和sourcepath下的内容都删掉,使其能在debug时定位到项目中的源码
  • 设置Modules的依赖,将依赖中除了下图所示的之外全部删除
  • 然后点击左下角的+选择Jars or directories添加framework相关的源码文件夹
  • 点击OK,等待其建立index完成后工具栏的Attach debugger to Android process就会变成可点击状态

4、在线调试Android Framework

attach到system_process进程

设置断点

成功attach后就可以打开想要设置断点的源码文件,然后在行号右边的空白处左键点击设置断点

Android 14 Framework代码 android framework调试_android_05

查看运行时状态

设置完成后就可以操作手机,当代码运行到断点处就可以停下来,这时就可以查看运行时的状态,包括变量的值,backtrace等

Android 14 Framework代码 android framework调试_android studio_06

还可以在watches窗口添加想要查看的表达式的值

Android 14 Framework代码 android framework调试_android studio_07

获取backtrace快照

另外attach后,在不设置断点的情况下也可以实时的获取所有线程的backtrace的快照,作用类似于kill -3,但是只有Java层的trace

Android 14 Framework代码 android framework调试_android_08