Android Studio 调试 Android Framework 层代码

Android Studio 调试 Android Framework 层代码

Android Studio 调试 Android Framework 层代码

转自:https://blog.****.net/songjinshi/article/details/53020549/?utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242

一、准备工作

1、下载最新的 Android Studio 版本

https://developer.android.com/studio/index.html

2、下载 Android 系统源码

这里比较灵活,可以下载公司内部机型的代码,也可以下载原生AOSP的代码

环境配置参考

https://source.android.com/source/initializing.html

源码下载参考

https://source.android.com/source/downloading.html

编译运行参考

https://source.android.com/source/building.html

全部编译整个代码工程,中间如果有什么问题可以参考

https://source.android.com/source

二、配置 Android Studio

1、配置 vm options

一个完成Android源码会非常大,所以为了避免导入和生成index时OOM,最好提前配置一下Android Studio的vm options,可以参考下图是我的配置
Android Studio 调试 Android Framework 层代码

2、配置最大打开文件数

在导入过程中会同时打开非常多的文件,为了避免too many files open错误,提前在profile文件中配置一下打开文件的数量,我这里是配置的2048
Android Studio 调试 Android Framework 层代码

三、创建 Android Framework 工程

整个Android源码全编成功之后,还需要编译idegen模块,用以生成Android studio的工程配置文件,对于高通有modem源码的项目这里有个坑,就是有一个hlos下的有一个android的软连接会链接到源码根目录,导致递归死循环,最终栈溢出而无法生成工程配置文件,所以需要删除这个软链接
Android Studio 调试 Android Framework 层代码

1、单独编译 idegen 模块

Vincent$ mmm development/tools/idegen/

编译成功之后就生成了idegen.jar

host Java: idegen (out/host/common/obj/JAVA_LIBRARIES/idegen_intermediates/classes)
Install: out/host/darwin-x86/framework/idegen.jar

2、运行 idegen 脚本

Vincent$ development/tools/idegen/idegen.sh
运行成功之后就会看到如下信息打出

Read excludes: 5ms
Traversed tree: 85308ms

同时在源码的根目录下生成android.ipr等工程配置文件

3、提升导入代码的速度

对于不关注的代码目录,可以通过修改android.iml来去除无用的源码和相关目录,用来提升加载速度
Android Studio 调试 Android Framework 层代码

四、导入和配置 Android Framework 工程

1、导入工程

打开Android Studio,然后找到根目录下生成的android.ipr文件并打开
Android Studio 调试 Android Framework 层代码

耐心等待index建立,预计需要10分钟左右,根据硬件配置不同时间略有差异
Android Studio 调试 Android Framework 层代码

2、配置工程

导入完成之后右上角会有一个提示
Android Studio 调试 Android Framework 层代码

然后点击Configure

Android Studio 调试 Android Framework 层代码

点击OK,然后点击左上角的Project并选择Project视图模式
Android Studio 调试 Android Framework 层代码

然后按照下图进入工程配置
Android Studio 调试 Android Framework 层代码

Android Studio 调试 Android Framework 层代码
Android Studio 调试 Android Framework 层代码
按照如下设置把JDK的classpath和sourcepath下的内容都删掉,使其能在debug时定位到项目中的源码

然后把Android SDK的classpath和sourcepath也删除,同时将Java SDK选为刚刚配置JDK1.8
Android Studio 调试 Android Framework 层代码

设置Modules的依赖,将依赖中除了下图所示的之外全部删除
Android Studio 调试 Android Framework 层代码

然后点击左下角的+选择Jars or directories添加framework相关的源码文件夹
Android Studio 调试 Android Framework 层代码

点击OK,等待其建立index完成后工具栏的Attach debugger to Android process就会变成可点击状态

Android Studio 调试 Android Framework 层代码

五、调试 Android Framework

上面的配置工作完成后就可以开始在线调试了,但是前提是手机中的ro.debuggable要为1,或者是userdebug,eng版本的系统软件

1、attach 到 system_process 进程

Android Studio 调试 Android Framework 层代码

2、设置断点

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

3、查看运行时状态

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

还可以在watches窗口添加想要查看的表达式的值
Android Studio 调试 Android Framework 层代码

4、获取 backtrace 快照

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

联系方式:

微信公众号 -->> 他晓 (欢迎加入)

Android Studio 调试 Android Framework 层代码