无需编译源码,在Android Studio中轻松调试Android源码

昨天我才发现, 原来在 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 方法的左侧打上多个断点

3. 开始调试

然后这样操作, 选择 adb idea 的ADB Restart App With Debugger菜单

来了, 老哥, 接下来 AS 会停在你刚刚打的断点上, 然后我们就可以像平时那样调试了

4. 骚操作

你甚至可以选中某个变量, 然后按 F2 键, 进行修改它的值

5. 解决Source code does not match the bytecode问题

有时候我们想用华为或者小米手机, 然后也想调试一下, 怎么说? 那肯定是会遇到Source code does not match the bytecode问题的. 我们试着解决一下.

这个时候先把上面 demo 运行到这个小米手机上. 然后我们看 View 的源码, 它的包名是

package android.view;

我们在 demo 中也建一个这样的包名, 然后把 View 的源码全部拷贝过去.

在自己的 View 文件中, 还是找到 measure 方法, 还是在左侧打很多个断点, 还是选择 adb idea 的ADB Restart App With Debugger菜单

然后我们发现一进来就来到了第三行, 说明我们的代码和小米手机的源码相差 2 行 (我这里只是举个例子, 你的手机可能会相差 4 行或者 1 行也有可能), 因为这个时候应该停留在第一行才对.

而且仔细观察, 左侧的红圈, 上面有一个小勾, 表示这一行是可以调试的. 那种灰色圆圈 + 中间一根灰线, 那种表示这一行不能调试 (可能在源码中是注释).

那么如何解决这种相差 2 行的问题呢? 我在 measure 的注释里面, 加 2 行空行.

看到没, 左边的灰色圆圈消失了, 然后全是红色圆圈, 表示调试的行数与源码上的行数已经一一对应. 这时候我们按 F6, 继续愉快的调试着, 进入下一行.

发布了186 篇原创文章 · 获赞 187 · 访问量 76万+

猜你喜欢

转载自blog.csdn.net/xfhy_/article/details/90257259