【日常问题记录】新版 Gradle 与 APT 注解处理器的兼容性问题

2,648 阅读1分钟

问题根源:apt产物 jar 包内缺少 javax.annotation.processing.Processor 文件


新建了一个工程,写了一个注解处理器,将注解处理器依赖至目标模块,死活无法生效。

检查了各种配置,注解、注解名称、Java 适配版本,没发现问题。

我当前的 gradle 环境:

classpath 'com.android.tools.build:gradle:3.4.1'
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

注解处理器依赖 auto-service 的版本号:

    implementation 'com.google.auto.service:auto-service:1.0-rc4'

回过神来看 apt 模块生成的jar包,发现里面少了 注册 处理器的服务文件; 也就是:

屏幕快照 2019-09-16 16.29.48.png

我这边打出来是 这样的:

屏幕快照 2019-09-16 16.30.49.png

我之前使用的是 @AutoService(Processor.class) 注解来自动生成 服务文件的,也就是说,现在这个注解失效了。马上想到了手动添加 服务文件。在 src/main/ 下创建 resources/META_INF/services/javax.annotation.processing.Processor 文件,如下:

屏幕快照 2019-09-16 16.33.42.png

该配置文件的格式如下:内部为各处理器的全类名路径,换行隔开。

com.demo.process.AAAProcessor
com.demo.process.BBBProcessor
com.demo.process.CCCProcessor

看了另外一篇文章 Android Gradle由4.x升级至5.0导致Apt项目失效 ),参考了评论区老哥 @ 小蜻蜓_S 的做法,亲测也是可行的,切就是原来注解的效果。 只需要在 apt 模块的 build.gradle 文件下的 dependencies 内增加 另一个 auto-service 的注解处理器配置即可:

    annotationProcessor "com.google.auto.service:auto-service:1.0-rc4"

招聘广告 🐂

【优酷】杭州团队,长期招聘!!!

   - 前端「急」
   - Java 后端 「爆」
   - 移动端:安卓 & iOS 「热」

办公地点:蚂蚁Z空间。

面试方式:电话&视频优先。

主要有优酷少儿、创新项目等业务,P6/P7 都有。

想试一试的小伙伴,邮件联系 hdtpjhz@163.com