一、新建 Remote JVM Debug
1. 新建 Configuration 入口
2、TransformServer Configuration
从入口进入到下图页面,点击左上角 “+” 号新建 Remote JVM Debug ,给 configuration 命名,默认 Unnamed。页面中其他参数全部默认。
3、Debug 插件关联的 Task
./gradlew build -Dorg.gradle.debug=true --no-daemon
在 AS 终端执行该命令,将会卡在 Starting Daemon。如果执行命令出现如下错误,是因为端口占用的问题。需要杀死占用端口的进程。
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [./open/src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c:732]
mac 查看端口、杀死进程
// 5005为端口
lsof -i tcp:5005
// 9901 为Pid
kill -9 9901
这里再特别说明一下该节中命令中的 --no-daemon 参数,它涉及到 gradle 守护进程这一概念。要添加这个参数的原因是,如果不添加该参数,在调试过程中发现断点走不到,构建流程就走完了。这个参数的作用是告诉 gradle 不使用守护进程进行构建。
4、添加断点、Debug TransformServer
如图所示,选中我们新建的 TransformServer Configuration,然后点击调试按钮,然后就会执行到断点处。
二、探索过程中遇到的其他问题
1. Android Studio Remote Debug Unable to open debugger port 5005
在执行 Debug TransformServer 中发生这一异常。出现这个问题的原因,一般是端口被占用,但是发现并没有被占用。这个时候解决方法是将 App module 运行起来,然后再 debug 即可正常。
2. 断点不是每一次都能正常走到
需要手动 build -> clean