背景
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnv) {
复制代码
APT代码固定模板ProcessingEnvironment是什么? TypeElement是什么? RoundEnvironment又是什么?java
解决办法
debug一下代码在调试窗口看看对象里面装的什么值. 步骤以下:markdown
1.打开APT调试模式
切换到Android目录下,编译全局的gradle.properties文件.增长如下代码:
org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
-Dorg.gradle.debug=true
复制代码
2.建立一个APT调试类型
怎么建立能够按照这里来 www.jianshu.com/p/4fef2ad51…jvm
3.调试
- 执行下clean.保证APT代码没有生成
- 打上断点,执行apt调试的debug. 这里没有断点状态也不要紧,是IDE的缘由,只要链接到 Connected to the target VM, address: 'localhost:5005', transport: 'socket'便可.
3. 执行宿主的build构建.
4. 重复调试. 若是已经调试过一遍会生成APT自动构造的代码,下次就不会进入调试,因此每次debug都须要clean,clean执行顺序在debug先后均可以.
总结
在Debug的时候熟悉对象含义,而后把代码拼凑出来. 注意点:socket
- 调试完成后必定把调试开关关闭了,即把全局的gradle.properties修改回来. 不然会影响正常的开发.
- 调试的时候若是出现错误 Error running 'Remote Debugger': Unable to open debugger port (localhost:5005): java.net.ConnectException. 把5005端口占用的进程杀掉或者重启下IDE.
- 不要多个项目同时调试.