随着一些如ButterKnife,dagger等的开源注解框架的流行,APT的概念也越来越被熟知。
APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代码输入。现在有很多主流库都用上了 APT,比如 Dagger2, ButterKnife, EventBus3 等
DataBinding
Dagger2
ButterKnife
EventBus3
DBFlow
AndroidAnnotation
annotationProcessor和android-apt的功能是一样的,它们是替代关系。
APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,根据注解自动生成代码。 Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件(文件具体内容由Annotation处理器的编写者决定),APT还会编译生成的源文件和原来的源文件,将它们一起生成class文件。
Android Gradle插件2.2版本发布后,Android 官方提供了annotationProcessor来代替android-apt,annotationProcessor同时支持 javac 和 jack 编译方式,而android-apt只支持 javac 方式。
同时android-apt作者宣布不在维护,当然目前android-apt仍然可以正常运行,如果你没有想支持 jack 编译方式的话,可以继续使用 android-apt。
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0' //插件2.2以下
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //apt需要
}
}
apply plugin: 'com.neenbedankt.android-apt' //apt需要
dependencies {
compile 'com.google.dagger:dagger:2.0'
apt 'com.google.dagger:dagger-compiler:2.0' //apt
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2' //插件2.2以上
}
}
dependencies {
compile 'com.google.dagger:dagger:2.0'
annotationProcessor 'com.google.dagger:dagger-compiler:2.0' //annotationProcessor
}
不使用apt和annotationProcessor 而使用kapt
kapt: Annotation Processing for Kotlin ,即用于kotlin的apt
//java中
implementation 'com.google.dagger:dagger:2.17'
annotationProcessor 'com.google.dagger:dagger-compiler:2.17'
//kotlin中
implementation 'com.google.dagger:dagger:2.17'
kapt 'com.google.dagger:dagger-compiler:2.17'
apt {
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile
resourcePackageName "com.xxx.xxx"
}
}
//将apt替换为annotationProcessor:
javaCompileOptions {
annotationProcessorOptions {
arguments = [
'resourcePackageName': "com.xxx.xxx",
"androidManifestFile":
"$projectDir/src/main/AndroidManifest.xml".toString()
]
}
}