Javapoet不用过多介绍github地址(kotlin版本)。著名注解框架butterknife
就是用到这个库来实现编译期帮助我们实现findViewById
等文件的。本篇主要是一些在使用Javapoet库过程中遇到的一些问题。
1.无法继承Javapoet中AbstractProcessor抽象类
检查一下创建apt-compiler时是否选择的是Java or Kotlin Library
,就是下面途中绿色的,而不是红色的。
2.编译错误:
ERROR: android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead.
在使用Javapoet库的时候我们会在项目的buidl.gradle中添加如下代码:
dependencies {
classpath 'com.android.tools.build:gradle:3.6.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
在app的build.gradle中添加一下代码:
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
implementation project(':apt-annotation')
apt project(':apt-compiler')
}
修改为:
1.把项目build.gralde中的
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'}
删除。
2.把app的build.gradle中的apply plugin: 'com.neenbedankt.android-apt'
删除,同时把apt
改为annotationProcessor
。
3.在project视图app-build-generated中找不到自动帮我们创建的文件
1.使用kotlin
apt-annotation自定义注解Module可以使用kotlin。
apt-compiler自定义注解处理器不可以使用kotlin。
app中自定义的注解不可以使用在kotlin文件上。
2.在apt-compiler的build.gradle中缺少一下其中一个
implementation 'com.google.auto.service:auto-service:1.0-rc5'
annotationProcessor'com.google.auto.service:auto-service:1.0-rc5'
3.没有使用kotlin
目录没有找对,低版本gradle编译期生成的文件存放在project视图app-build-generated-source-apt-debug
文件下:
高版本gradle存放的目录为project视图app-build-generated-ap_generated_sources-debug
文件下:
4.其他注意点
自定义注解时java注解和kotlin注解有所不同:
1.有无大括号,java必须有,kotlin可以没有;
2.注解名称不同,例如:java中RetentionPolicy.CLASS
,kotlin则为AnnotationRetention.BINARY
。
java变量注解:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.CLASS)
public @interface Test {
}
对应kotlin变量注解:
@Target(AnnotationTarget.FIELD)
@kotlin.annotation.Retention(AnnotationRetention.BINARY)
annotation class Test
3.使用kotlin自定义注解时编译会出现一下信息,但是不影响编译结果。也定位不到是具体那个包下面的。但是还能正常编译运行!
4.编译错误,同样不影响编译结果和运行
应该是重复写文件了,但是导致错误的地方没有找到,如有大神知道请告知!