(转载请注明)
本文记录在学习使用APT过程中的一些细节点。
关于APT原理等就不复述了,在实际开发中,AbstractProcessor起到非常重要的作用,编译生成文件的规则都在这里。那么开发时,对于其Debug也必不可少。
基本操作网上也能找到:
- 首先下断点
- 配置daemon,在project的gradle.properties中加入配置
org.gradle.daemon=true
org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5008
- 运行daemon,开启相关进程
./gradlew --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 [debugInit.c:750]
稍微花了点时间,一开始以为是端口被占用了,直接换了个,然后发现还是不行,用
lsof -i:
看了一下的确有进程用了这个端口,我直接通过命令确定了一个没被占用的,还是不行,这时候我怀疑是gradle在执行的时候出现了异常,我干脆也不找新的端口了直接手动关掉占用端口的进程。
Lorin-MBP:AptTest lorin$ lsof -i:5008
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1587 lorin 4u IPv4 0x49277f066cd1e891 0t0 TCP *:synapsis-edge (LISTEN)
直接关了它
kill 1587
再次开启进程ok
Welcome to Gradle 4.10.1.
To run a build, run gradlew <task> ...
To see a list of available tasks, run gradlew tasks
To see a list of command-line options, run gradlew --help
To see more detail about a task, run gradlew help --task <task>
For troubleshooting, visit https://help.gradle.org
BUILD SUCCESSFUL in 5s
4.配置Remote Debugger
通过Edit ConfigConfigurations,新增一个Remote对象,配置没啥说的,端口和之前开启的进程所用端口一直就ok。
5.开始调试
这里也花了点时间,最后我先开启了全局debug,就是那额绿色小虫按钮。
然后执行
./gradlew clean assembleDebug
然后断点正常进入
可以愉快的开发了。