gradle之apt与annotationProcessor与kapt

什么是APT?

随着一些如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。

Android Gradle 插件版本2.2以下:

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
}

Android Gradle 插件版本升级到 2.2 及以上:

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 
}

kotlin中

不使用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()
        ]
    }
}


你可能感兴趣的:(gradle)