![724369e8bc8ce70685d025b84625df4c.png](https://i-blog.csdnimg.cn/blog_migrate/86f7ccd43d3f968b71ef923895eb954c.jpeg)
上次的文章 关于Gradle增量编译的坑 有讲到通过 gradle 断点调试来定位问题,那么本周就是一个非常简单的 gradle 调试大法教程,启动 gradle 入门系列的第一篇。
我们在编写 gradle 脚本或者 gradle 插件时,可能经常使用以下两种方式来添加日志调试问题:
1、println
'message'
2、project.logger.debug('message')
,再运行./gradlew --debug
但是使用断点调试的效率更快,而且也可以调试 gradle 和 agp 源码,便于理解 android 应用的整个构建流程。
如何断点调试 gradle
gradle 也是跑在 JVM 上的,所以可以直接使用 IDEA 的远程调试(Remote Debug)。文字再多不如一张图,所以先看看 gradle 官方的动图:
总结一下步骤:
1、首先点击 Run-> Edit Configuration,添加一个 remote 调试器,这里更改名称为"gradleDebug",选中调试 module 为 app,其他保持默认就好图中的调试器参数可以了解一下:
jdwp
: Java Debug Wire Protocol,定义了调试器和 JVM 之间的通信协议transport=dt_socket
: 表示 jdwp 代理使用 socket 传输server=y
: 表示 JVM 将监听要 attach 到它的调试器suspend=[y,n]
: y 表示 JVM 将在执行主类之前等待调试器 attach,n 表示 JVM 将在监听调试器连接的同时立即执行主类address=5005
,指定调试 socket 将监听的地址
2、命令行运行./gradlew -Dorg.gradle.debug=true --no-daemon
其中,属性org.gradle.debug=true
,相当于 在 JVM 参数添加-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
,这样 gradle 进程启动后就会等待,直到 remote 调试器 attach 上才开始运行。no-daemon
表示不使用守护进程。
3、选中刚才的 remote 调试器,点击 debug 按钮进行 attach
4、最后就是断点成功
推荐阅读
https://www.techyourchance.com/the-state-of-native-android-development-november-2019/
《2019 年 Android 原生开发状态》,偶然看到的一篇文章,作者吐槽了android开发目前存在的一些问题,说出了各位开发者的心声。