如何调试编译时注解处理器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...
  • xx326664162
  • xx326664162
  • 2017年04月01日 15:51
  • 12649

Java自定义AnnotationProcessor处理自己的Annotation

Java使用Annotation Processor获取代码中的Annotation使用Java的Annotation Processing Tool (apt)可以在编译期获取Java代码文件中的A...
  • NUPTboyZHB
  • NUPTboyZHB
  • 2016年03月30日 19:09
  • 5350

annotationProcessor实战,了解ButterKinfe过程

注解的简介简介 Annotations, a form of metadata, provide data about a program that is not part of the prog...
  • yongchao_zhao
  • yongchao_zhao
  • 2016年12月14日 15:21
  • 1352

android-apt切换为官方annotationProcessor

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

深入理解编译注解(三)依赖关系 apt/annotationProcessor与Provided的区别

前言网上有很多朋友在问: apt/annotationProcessor与Provided 都是只编译并不打入apk中,他俩到底有什么区别呢?所以我就把自己所了解的与大家分享一下。正文编译关系 apt...
  • u011315960
  • u011315960
  • 2017年03月21日 16:36
  • 911

30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0)(by星空武哥)

转载声明原创地址:http://blog.csdn.net/lsyz0021/article/details/51985307 30分钟学会EventBus3.0详解(一)(引入和初始化Event...
  • lsyz0021
  • lsyz0021
  • 2016年07月21日 19:13
  • 7588

Mr.Smile填坑记——AndroidStudio3.0 Canary 8注解报错Annotation processors must be explicitly declared now.

体验最新版AndroidStudio3.0 Canary 8的时候,发现之前项目的butter knife报错,用到注解的应该都会报错 Error:Execution failed for task ...
  • Keep_Holding_On
  • Keep_Holding_On
  • 2017年07月27日 14:44
  • 5361

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

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

终极报错解决方案:Failed to resolve:annotationProcessor

报如下错误: 解决方案:
  • qq_33785670
  • qq_33785670
  • 2017年05月23日 10:39
  • 8133

Android Studio报错:Failed to resolve:annotationProcessor解决方案

错误信息 Failed to resolve:annotationProcessor 解决方案 如果安装依然报错,请在build.gradle添加如下图的配置。 maven { url...
  • u013803839
  • u013803839
  • 2017年09月12日 17:12
  • 996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何调试编译时注解处理器AnnotationProcessor
举报原因:
原因补充:

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