无需编译源码,在Android Studio中轻松调试Andro
昨天我才发现,原来在Android Studio中可以很轻松得调试Android源码
0. 准备工作
在Android Studio中装一个插件: ADB Idea
这个插件的功能,其实就是利用adb实现一些常用的操作:
- ADB Uninstall App
- ADB Kill App
- ADB Start App
- ADB Restart App
- ADB Clear App Data
- ADB Clear App Data and Restart
- ADB Revoke Permissions
- ADB Start App With Debugger
- ADB Restart App With Debugger
如果使用上面这些功能:Tools->Android->ADB Idea menu
1. 新建一个Demo
在Android Studio中随便新建一个项目,名称随便取.然后targetSdkVersion选择你手机或者模拟器的安卓版本.
然后运行到手机或者模拟器上.
这里的手机最好是选取Pixel一类的测试机,毕竟是谷歌的亲儿子.或者用福官方或者Genymotion模拟器也行.国内的源码都是被厂商定制过的,好多东西都被修改过,调试的时候可能会出现Source code does not match the bytecode
.
2. 打开想要调试的源码
我这里随便选择一个,比如View的源码.双击Shift,输入View,点进去(如果没有出现View相关的源码,记得勾选include non-project items).我这里选择随便找个方法,比如measure方法.我在measure方法的左侧打上多个断点
image3. 开始调试
然后这样操作,选择adb idea的ADB Restart App With Debugger
菜单
来了,老哥,接下来AS会停在你刚刚打的断点上,然后我们就可以像平时那样调试了
image4. 骚操作
你甚至可以选中某个变量,然后按F2键,进行修改它的值
image5. 解决Source code does not match the bytecode
问题
有时候我们想用华为或者小米手机,然后也想调试一下,怎么说? 那肯定是会遇到Source code does not match the bytecode
问题的.我们试着解决一下.
这个时候先把上面demo运行到这个小米手机上.然后我们看View的源码,它的包名是
package android.view;
我们在demo中也建一个这样的包名,然后把View的源码全部拷贝过去.
image在自己的View文件中,还是找到measure方法,还是在左侧打很多个断点,还是选择adb idea的ADB Restart App With Debugger
菜单
然后我们发现一进来就来到了第三行,说明我们的代码和小米手机的源码相差2行(我这里只是举个例子,你的手机可能会相差4行或者1行也有可能),因为这个时候应该停留在第一行才对.
而且仔细观察,左侧的红圈,上面有一个小勾,表示这一行是可以调试的.那种灰色圆圈+中间一根灰线,那种表示这一行不能调试(可能在源码中是注释).
那么如何解决这种相差2行的问题呢? 我在measure的注释里面,加2行空行.
image看到没,左边的灰色圆圈消失了,然后全是红色圆圈,表示调试的行数与源码上的行数已经一一对应.
这时候我们按F6,继续愉快的调试着,进入下一行.