之前我都是在Windows环境下开发Android。调试代码的时候有时候要进到系统类中去断点调试代码,经常断点断不到,或者就跑飞了。
最近因为在研究一些源码,比如LayoutInflater.inflate()这个方法你要进去一层层调试的话怎么办呢?其实不要再相信网上说的什么还要装Linux环境,哪有那么复杂,这里其实非常非常非常简单。
首先你看下你的壳项目的build.gradle配置
注意这个compileSdk配置,说明你当前使用的编译Android SDK就是31版本的。那最关键的一点就是你调试时候的手机的Android SDK版本一定也要是31的。不管是物理机还是虚拟机,你想要断点调试源码的话肯定调试机的API版本要和对应的Android Studio编译Android SDK版本一致才行啊。
大部分情况大家随便插个物理机或者随便新建一个虚拟机就开干了,都不关注版本的一致性这些,导致源码断点调试不了!!!
那为什么就必须一致呢???
因为Google每个版本都在升级源码,特别是一些常用的类,比如LayoutInflater。你调试机的 API(可以理解就是Android SDK)对应的版本与Android Studio编译时候的版本不一致那调试机运行时调用的源码与编译的源码都不一样(比如可能存在同一个方法对应的行索引都对不上)当然断点跑飞了呀。这里恍然大悟!!!
因此比如我上面Android Studio编译的Android SDK版本是31,那我当然首先必须下好对应版本的Android SDK。
这个都不知道怎么下载的看下图,在设置里去下。
那此时检查你调试机器的API情况。以我的虚拟机为例。 我也用的是31的API哦。
那调试机器的API版本与Android Studio编译时候的API版本都是31,不就完美匹配了么。
那还会断点进不去吗?
那是绝对绝对绝对不可能滴!!!
立图为证
首先我最外部的inflate()调用已经断点走到了
再往里走,断到了
再走,依旧是断到了
完美收工,以后就愉快地源码调试吧,就快乐高效地学习源码吧!!!