Android註解使用之註解編譯android-apt如何切換到annotationProcessor

前言:

    自從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註解框架。

 

幹我們這行,啥時候懈怠,就意味着長進的停止,長進的停止就意味着被淘汰,只能往前衝,直到鳳凰涅槃的一天!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章