Bootstrap

Android 同时使用kotlin与butterknife

之前的项目用的是butterknife

annotationProcessor "com.jakewharton:butterknife-compiler:$rootProject.butterknife-compiler"

在模块中引入kotlin时 会遇到butterKnife绑定的id失效问题,这时需要把 annotationProcessor 改为

kapt "com.jakewharton:butterknife-compiler:$rootProject.butterknife-compiler"

什么是annotationProcessor
annotationProcessor是APT(Annotation Processing Tool)工具中的一种,随着Android Gradle 插件 2.2 版本的发布,Android Gradle 插件提供了名为 annotationProcessor 的功能来完全代替 android-apt,不需要引入,可以直接在build.gradle文件中使用。

annotationProcessor顾名思义是注解处理器的意思。它对源代码文件进行检测找出其中的Annotation,根据注解自动生成代码。 Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件,之后将编译生成的源文件和原来的源文件一起生成class文件

使用影响

annotationProcessor生成额外文件的规则是在依赖库里定义的,只在编译的时候执行,但是库最终不打包到apk中,所以使用Butterknife这类编译注解框架并不会增加apk的大小


kapt

Butterknife的文档里还有这么一句话:

If you are using Kotlin, replace annotationProcessor with kapt.

特别注意将 annotaionProcessor换成kapt时如果之前编译过,必须要先执行clean project再编译,才能让注解被正常处理!


看懂编译注解annotationProcessor和kapt - 简书

;