如何调试编译时注解处理器AnnotationProcessor

原创 2017年01月04日 20:52:10

本来的话是想跟大家分享如何制作自己的编译时注解处理器的,后来搜索了一下发现网上有不少这方面的文章,写得都很全面很优秀,所以就不献丑了。如果大家还不知道怎么写自己的编译时注解处理器,可以看下这位大神写的文章学习下:http://blog.csdn.net/lmj623565791/article/details/43452969

我这次跟大家分享的是如何在AndroidStudio开发环境下调试编译时注解处理器AnnotationProcessor,毕竟有开发就有调试。但是在调试AnnotationProcessor这方面,网上搜到的资料都不太完整。所以我在这里将我实现调试的过程分享给大家,希望大家少踩坑。人生苦短,高效率才是王道。

下面进入正题。

1.开发环境

  • AndroidStudio:2.2.2
  • Gradle:2.14.1
  • JDK:1.8.0_77

2.操作步骤

新建AndroidStudio工程,导入AnnotationProcessor库到libs文件夹

执行后android工程目录如下图所示:
这里写图片描述

配置远程调试功能

打开菜单栏的Run菜单下的Edit Configuration项,如下图:
这里写图片描述

然后选择点击左上角的+按钮并选择Remote项,如下图:
这里写图片描述

然后为这个配置设置一个命名、端口(一般默认为5005),其他的都不需要修改。然后点击Apply,如下图所示:
这里写图片描述

然后复制上图中位置4所选中的文字。这段文字是启动可远程调试的JVM的参数,我们后面会用到。关于这些参数的说明可以参考这篇博文:http://chainhou.iteye.com/blog/1837059

然后点击OK退出窗口。

配置可远程调试的Gradle程序

首先打开IDE右边的Gradle小窗口,并点击小窗口左上角的刷新按钮,然后打开app->other目录,找到compileDebugJavaWithJavac,如下图所示:
这里写图片描述

由于编译时注解是在compileDebugJavaWithJavac脚本中处理的,所以我们要为其添加JVM参数将其设置为可远程调试。接下来在compileDebugJavaWithJavac项上点击右键,选中Create Configuration,打开下图所示窗口:
这里写图片描述

将刚才复制的参数粘贴到VM options对应的编辑框中,并将suspend=n参数改为suspend=y。这么做是为了保证compileDebugJavaWithJavac运行前会一直等待调试器的连接。

添加断点

接下来就是在我们要调试的代码中添加断点了。如下图所示。打开AnnotationProcessor的MyProcessor文件却发现一片飘红,如下图所示,这样是无法调试的。
这里写图片描述

百度了一下,说是AS不会自动添加javax依赖导致的,所以在app的gradle文件中手动添加依赖,如下图所示。(比较粗暴,但是只是用来调试,过得去就算了)
这里写图片描述

添加了依赖包后回到MyProcessor文件,就不会报错了。然后在init方法中添加断点,如下图所示:
这里写图片描述

启动远程JVM运行compileDebugJavaWithJavac

接下来就是启动我们要调试的程序了。在主界面运行选项选中compileDebugJavaWithJavac,然后点击运行,如下图所示:

这里写图片描述

然后我们会看到compileDebugJavaWithJavac的执行,Run Build一直处于转圈圈的状态,表示远程JVM已启动并在等待调试器连接:
这里写图片描述

这时我们在windows命令行下执行netstat命令可以发现有一个JVM进程打开了5005端口。这个进程就是一个java进程,上面即将运行我们的Processor代码:
这里写图片描述

启动调试器

接下来就是启动调试器去attach到我们的远程可调试进程了。很简单。首先是点击运行菜单,选中我们刚才设置的Remote配置的名字,我这里是AnnotationProcessor,然后点击Debug按钮,如下图所示:
这里写图片描述

然后我们就会在Console中看到调试器已连接到远程进程,如下图所示:
这里写图片描述

再过几秒进程便会开始运行并且在断点处停下来,我们就能开始调试了。如下图所示:
这里写图片描述

3.总结

虽然是简简单单的几个步骤,但是却花了我不少时间去网上查找资料,最终总结出一套可行的方案。其实大家应该可以看得出来,这只不过是java的一个远程调试功能罢了。由于AS中Gradle脚本是运行在Remote进程上的,所以无法直接调试。我们做的这些步骤不过是配置了一下远程调试参数实现java的远程调试功能。所以,基础还是最重要的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

你必须知道的APT、annotationProcessor、android-apt、Provided、自定义注解

你可能经常在build.gradle文件中看到,这样的字眼,annotationProcessor、android-apt、Provided,它们到底有什么作用?下面就一起来看看吧 1、什么是A...

Java自定义AnnotationProcessor处理自己的Annotation

Java使用Annotation Processor获取代码中的Annotation使用Java的Annotation Processing Tool (apt)可以在编译期获取Java代码文件中的A...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

一小时搞明白注解处理器(Annotation Processor Tool)

Java中的注解是个很神奇的东西,还不了解的可以看下一小时搞明白自定义注解(Annotation)。现在很多Android的库都用使用注解实现的,比如ButterKnife,我们不防也来学习一下,学完...

深入理解编译注解(二)annotationProcessor与android-apt

前言之前我们已经实际感受了编译注解的使用,虽然操作起来稍微复杂一些,但是提高了程序运行的效率,用户体验会更好,作为开发者来说,这点牺牲还是值得的。在demo中使用了annotationProcesso...

Could not find method annotationProcessor() for arguments

使用butterknife 8.4.0遇到错误Error:(35, 0) Could not find method annotationProcessor() for arguments [com....

Android注解使用之注解编译android-apt如何切换到annotationProcessor

原文地址:http://www.cnblogs.com/whoislcj/p/6148410.html 前言:     自从EventBus 3.x发布之后其通过注解预编译...
  • vite_s
  • vite_s
  • 2017年01月12日 17:43
  • 362

android-apt和annotationProcessor的使用以及互换

Android Gradle插件2.2版本发布后,官方(Android)提供了annotationProcessor来代替android-apt。同时android-apt作者宣布不再维护,目前and...

android-apt切换为官方annotationProcessor

http://www.jianshu.com/p/c1666a947692 android-apt Android Gradle插件2.2版本发布后,Android 官方提供了annota...
  • wusj3
  • wusj3
  • 2017年07月01日 11:02
  • 387

ButterKnife绑定失败?android-apt没用?尝试用一下annotationProcessor

最近在使用Butterknife时遇到了一个问题,明明gradle依赖已经添加了,也绑定了,但是却绑定失败了。原来是android-apt的作者表示不再维护了,也就是说butterknife的失败跟这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何调试编译时注解处理器AnnotationProcessor
举报原因:
原因补充:

(最多只允许输入30个字)