问题根源: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包,发现里面少了 注册 处理器的服务文件;
也就是:
我这边打出来是 这样的:
我之前使用的是 @AutoService(Processor.class)
注解来自动生成 服务文件的,也就是说,现在这个注解失效了。马上想到了手动添加 服务文件。在 src/main/ 下创建 resources/META_INF/services/javax.annotation.processing.Processor 文件,如下:
该配置文件的格式如下:内部为各处理器的全类名路径,换行隔开。
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"