Android註解,這幾篇文章就夠了(一)註解處理器

一 前言

在日常的Android開發中,我們經常要引入一些第三方的庫,以引入ButterKnife爲例,

implementation 'com.jakewharton:butterknife:9.0.0-rc1'
annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc1'

把上面的代碼複製到build.gradle文件裏,就可以使用註解的形式在Activity裏引用xml裏定義的控件,對於annotationProcessor的瞭解可能並不清楚。

實際在開發過程中,我們用到的用註解的第三方框架還有很多,比如Dagger2,EventBus,Retrofit等,這系列文章的目的就是來講清楚Android註解是什麼,怎麼用,爲什麼不用一篇文章呢,我感覺內容太多,還是分開來講比較好,下面讓我們慢慢開始。

二 什麼是annotationProcessor

在annotationProcessor之前,你一定聽說過android-apt。不管是android-apt還是annotationProcessor,它們都是APT(Annotation Processing Tool)工具中的一種。

1. android-apt

android-apt是一種處理註解的工具,它對源碼文件進行檢測並找出其中的Annotation,使用Annotation進行額外的處理,生成額外的源文件和其它文件,並將編譯生成的源文件和原來的源文件,一起生成class文件。

apt在Android Gradle插件2.2以下的版本大量使用,使用的哪個好似如下:

  • ① 在項目的build.gradle下,配置
    classpath 'com.android.tools.build:gradle:2.2.3'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  • ② 在app的build.gradle下,配置,以使用EventBus爲例,
apply plugin: 'com.neenbedankt.android-apt'

dependencies {
    compile 'org.greenrobot:eventbus:3.0.0'
    apt'org.greenrobot:eventbus-annotation-processor:3.0.1'//apt
}
2. annotationProcessor

annotationProcessor是APT(Annotation Processing Tool)工具中的一種,
自從Android Gradle插件2.2發佈以後,提供了annotationProcessor來完全代替android-apt,annotationProcessor同時支持 javac 和 jack 編譯方式,自此android-apt的作者在官網上發表聲明,後續將不會再維護,並推薦大家使用Android的官方插件annotationProcessor。annotationProcessor可以直接在build.gradle中使用,不需要引入。

通過以下實現android-apt 切換 annotationProcessor 。

  • ① Android Gradle插件版本要升級到2.2以上,刪除項目的build.gradle的android-apt配置。
dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
    }
  • ② app下的build.gradle,android-apt引入的依賴修改爲使用annotationProcessor。
dependencies {
    compile 'org.greenrobot:eventbus:3.0.0'
    annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.0.1'//apt
}

三 annotationProcessor工作內容

annotationProcessor顧名思義,是註解處理器的意思,它對源代碼文件進行檢測找出其中的Annotation,根據註解自動生成代碼。Annotation處理器在處理Annotation時可以根據源文件中的Annotation生成額外的源文件和其它文件,之後將編譯生成的源文件和原來的源文件一起生成class文件。

四 使用影響

annotationProcessor生成額外文件的規則是在依賴庫中定義的,只在編譯的時候進行,但是庫最終是不會打包到apk中的,所以使用這類註解類的框架並不會增加apk的大小。

五 kotlin中使用

kotlin中使用kapt(Kotlin annotation processing tool)Kotlin註解處理工具處理註解,即在kotlin下,用kapt代替java裏的annotationProcessor即可實現對註解的處理。配置如下:

apply plugin: 'kotlin-kapt'


dependencies {
    // dagger2
    implementation 'com.google.dagger:dagger:2.23.2'
    kapt 'com.google.dagger:dagger-compiler:2.23.2'
    //glide
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    kapt 'com.github.bumptech.glide:compiler:4.9.0'
}

六 總結

這篇文章主要講了註解處理器,下篇文章講註解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章