Javapoet实现编译期创建文件的一些注意点

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.编译错误,同样不影响编译结果和运行
应该是重复写文件了,但是导致错误的地方没有找到,如有大神知道请告知!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值