前言:
自從EventBus 3.x釋出之後其通過註解預編譯的方式解決了之前通過反射機制所引起的效能效率問題,其中註解預編譯所採用的的就是android-apt的方式,不過最近Apt工具的作者宣佈了不再維護該工具了,因為Android Studio推出了官方外掛,並且可以通過gradle來簡單的配置,它就是annotationProcessor,今天來學習一下如何將原來的android-apt切換到annotationProcessor。
什麼是APT?
APT(Annotation Processing Tool)是一種處理註釋的工具,它對原始碼檔案進行檢測找出其中的Annotation,使用Annotation進行額外的處理。 Annotation處理器在處理Annotation時可以根據原始檔中的Annotation生成額外的原始檔和其它的檔案(檔案具體內容由Annotation處理器的編寫者決定),APT還會編譯生成的原始檔和原來的原始檔,將它們一起生成class檔案。
使用背景:
隨著Android Gradle 外掛 2.2 版本的釋出,Android Gradle 外掛提供了名為 annotationProcessor
的功能來完全代替 android-apt
,自此android-apt
作者在官網發表宣告證實了後續將不會繼續維護 android-apt
,並推薦大家使用 Android 官方外掛annotationProcessor。
切換步驟:
首先要確保Android Gradle外掛版本是2.2以上,目前我們所使用的Android studio版本是2.2.3,所對應的的Android Gradle版本也是2.2.3
1.)修改Project 的build.gradle配置
android-apt方式
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
修改後annotationProcessor
方式
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
}
2.)修改module的build.gradle配置
android-apt方式
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
apt'org.greenrobot:eventbus-annotation-processor:3.0.1'//apt
}
修改後annotationProcessor
方式,只保留dependencies 裡面的引用並且把apt 換成annotationProcessor就可以了
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.0.1'
}
3.)對EventBus 3.0 使用索引的相容
android-apt方式
apt {
arguments {
eventBusIndex "org.greenrobot.eventbusperf.MyEventBusIndex"
}
}
修改後annotationProcessor
方式
defaultConfig {
applicationId "com.whoislcj.testhttp"
minSdkVersion 21
targetSdkVersion 24
versionCode 1
versionName "1.0"
jackOptions {
enabled true
}
javaCompileOptions {
annotationProcessorOptions {
arguments = [ eventBusIndex : 'org.greenrobot.eventbusperf.MyEventBusIndex' ]
}
}
}
兩者對比
最近Android N的釋出,android 迎來了Java 8,要想使用Java 8的話必須使用Jack編譯,android-apt只支援javac編譯而annotationProcessor既支援javac同時也支援jack編譯。
總結:
今天只是簡單的學習了從android-apt如何很好的切換到annotationProcessor,接下來將用annotationProcessor實戰一下自己實現類似Butterknife註解框架。