一、前言:
在日常的Android开发过程,我们不可避免地会在项目中引入一些第三方库,以引入Butterknife为例:
dependencies {
implementation 'com.jakewharton:butterknife:9.0.0-rc1'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'
}
之前在使用时我只是把上边的代码从文档里复制粘贴到build.gradle文件里,但是对于annotationProcessor 和implementation具体有什么区别并不了解。
1.什么是annotationProcessor
annotationProcessor是APT(Annotation Processing Tool)工具中的一种,随着Android Gradle 插件 2.2 版本的发布,Android Gradle 插件提供了名为 annotationProcessor 的功能来完全代替 android-apt,不需要引入,可以直接在build.gradle文件中使用。
2.工作内容
图片.pngannotationProcessor顾名思义是注解处理器的意思。它对源代码文件进行检测找出其中的Annotation,根据注解自动生成代码。 Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件,之后将编译生成的源文件和原来的源文件一起生成class文件
3.使用影响
annotationProcessor生成额外文件的规则是在依赖库里定义的,只在编译的时候执行,但是库最终不打包到apk中,所以使用Butterknife这类编译注解框架并不会增加apk的大小
4.kapt
Butterknife的文档里还有这么一句话:
If you are using Kotlin, replace annotationProcessor with kapt.
理解annotationProcessor的原理之后很容易就能猜到kapt也是APT工具的一种,使用 Kotlin 开发 Android 应用时,要在预编译阶段处理注解必须使用kotlin-kapt而不能使用annotationProcessor,kotlin-kapt不是Android Gradle 内置插件需要额外引入
apply plugin: 'kotlin-kapt'
......
kapt "com.android.databinding:compiler:$android_plugin_version"
特别注意:将 annotaionProcessor换成kapt时如果之前编译过,必须要先执行clean project再编译,才能让注解被正常处理!
5.总结运用
了解了annotationProcessor和kapt后在去看一些第三方库时,从库的引用方式就可以简单地看出它有没有使用编译期注解的技术了,比如:
compile 'com.alibaba:arouter-api:?'
annotationProcessor 'com.alibaba:arouter-compiler:?'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
从上边就可以看出Arouter使用了编译注解而retrofit并没有使用编译注解。
6.特别注意
将KAPT包含在Android项目中 (Including KAPT in an Android project)
apply plugin: 'kotlin-kapt'
要开始在Android项目中使用KAPT,您应该像使用其他任何外部工具一样将其添加到应用gradle依赖项中。 使用以下行将其包括在内:
It is that simple, but there is a common error when adding this dependency to the project. The error says “Kotlin plugin should be enabled before ‘kotlin-kapt’”, the solution to this is simple, but when you have tons of lines of code it can be confusing. What this error means is that when adding the above line to your Gradle file, you need to add the Kotlin plugin first like this:
就是这么简单,但是在将此依赖项添加到项目时会出现一个常见错误。 该错误显示“应该在'kotlin-kapt'之前启用Kotlin插件”,解决方法很简单,但是当您有成千上万行代码时,可能会造成混淆。 该错误的意思是,将上述行添加到Gradle文件中时,您需要像这样首先添加Kotlin插件:
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
If you switch lines 1 and 2 you will be getting the error above.
如果切换第1行和第2行,您将得到上面的错误。
网友评论