Android-apt

android-apt是什么?

原文 https://bitbucket.org/hvisser/android-apt

android-apt 是一個Gradle插件佛猛,協(xié)助Android Studio 處理annotation processors, 它有兩個目的:

1.允許配置只在編譯時作為注解處理器的依賴早抠,而不添加到最后的APK或library
2.設(shè)置源路徑,使注解處理器生成的代碼能被Android Studio正確的引用此插件依賴項(xiàng)目中配置android或android-library(version 0.9.x or up)加酵,

添加android-apt到構(gòu)建腳本中
使用該插件玛迄,添加如下到你的構(gòu)建腳本中:

//配置在Project下的build.gradle中
buildscript {
    repositories {
      mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:+'
        //替換成最新android-apt版本
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}
//配置到Module下的build.gradle中
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

傳遞處理器參數(shù)
有些注解處理器需要傳遞參數(shù)乙墙,你能通過使用apt.arguments達(dá)到此目的际看,如下是一個向AndroidAnnotations傳遞參數(shù)的例子

apt {
    arguments {
            resourcePackageName android.defaultConfig.applicationId
            androidManifestFile variant.outputs[0]?.processResources?.manifestFile
    }
}

AndroidAnnotations 需要知道AndroidManifest.xml文件所在的位置,檢索variant獲取不同flavor的AndroidManifest.xml文件盖高。然而并非所有變量都有這個屬性(例如慎陵,單元測試就沒有),因此使用groovy操作符?.區(qū)分不能屬性的不同的情況喻奥。
取參數(shù)以也通過以下定義一個函數(shù)席纽,相關(guān)Groovy語法不翻譯(暫時會Groovy)一看就明白。

def getManifestByVariant(variant) {
    // return the value based on the variant
    if (variant.name == 'release') {
        return '/my/path/to/the/manifest.xml'
    }
    return variant.outputs[0]?.processResources?.manifestFile
}

apt {
     arguments {
         if (variant.name == 'debug') {
            resourcePackageName "com.myapp.package.name.debug"
            // more options
         }             
         androidManifestFile project.getManifestByVariant(variant)             
     }
}

配置不同編譯風(fēng)格的依賴
注解處理器一般包含API和使用API生成代碼的processor映凳。項(xiàng)目依賴可能分為多個部分胆筒。例如Dagger有兩個組件Dagger-compiler和dagger。dagger-commpiler僅用于編譯時诈豌,運(yùn)行時必需使用dagger仆救。配置此類組件,apt能這樣使用

dependencies {
 apt 'com.squareup.dagger:dagger-compiler:1.1.0'
 compile 'com.squareup.dagger:dagger:1.1.0'
}

如果是instrumentation test并需要在Android Studio 中顯示processor生成的代碼矫渔,使用androidTestApt

dependencies {
 androidTestApt 'com.github.frankiesardo:android-auto-value-processor:0.1'
 androidTestCompile 'com.github.frankiesardo:android-auto-value:0.1'
}

配置 unit test 使用 testApt (注:要求Android Studio 是1.4以上版本)

dependencies {
 testApt 'com.github.frankiesardo:android-auto-value-processor:0.1'
 testCompile 'com.github.frankiesardo:android-auto-value:0.1'
}

其它配置
它可以指定編譯時處理器的類名彤蔽,并禁用javac默認(rèn)的發(fā)現(xiàn)機(jī)制,需要配置這些類到apt塊中:

apt {
    processor "my.class.name"
    processor "another.processor.class.name"
    // 僅運(yùn)行上面的聲名的處理器類
    disableDiscovery true
}

配置其它注解處理器
添加其它注解器不需要額外的配置庙洼,你只需要使用apt添加相關(guān)組件到compile模塊中顿痪。另外,處理器所有生成資源都在代碼正常引用油够。

FAQ
Q:什么時候需要這個插件?
A:當(dāng)你需要引入Processors 生成的源代碼到你的代碼中時蚁袭。例如,當(dāng)你使用Dagger 2 或 AndroidAnnotaition.該插件使得Android Studio可以配置生成資源的build path,避免IDE報錯石咬。當(dāng)使用 apt添加添加依賴揩悄,它將不會被包含到最終的APK里。

Q:provided vs apt 使用注解處理器的不同鬼悠?
A:provided 將會導(dǎo)入注解處理器的classes和它的依賴到IDE的類路徑下删性。這意味著你可以附帶的引入并使用這些classes。例如焕窝,當(dāng)注解處理器使用Guava蹬挺,你可能錯誤的import其相關(guān)代碼到你的Android 代碼中。當(dāng)運(yùn)行時將導(dǎo)致crash它掂。而使用apt巴帮,注解處理器的classes將不會添加到你當(dāng)前的類路徑下,僅僅用于注解處理過程。并且會把所有注解處理器生成的source放在IDE的類路徑下榕茧,方便Android Studio引用发乔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雪猪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌起愈,老刑警劉巖只恨,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抬虽,居然都是意外死亡官觅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門阐污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來休涤,“玉大人,你說我怎么就攤上這事笛辟」Π保” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵手幢,是天一觀的道長捷凄。 經(jīng)常有香客問我,道長围来,這世上最難降的妖魔是什么跺涤? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮监透,結(jié)果婚禮上桶错,老公的妹妹穿的比我還像新娘。我一直安慰自己胀蛮,他們只是感情好院刁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著醇滥,像睡著了一般黎比。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸳玩,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天阅虫,我揣著相機(jī)與錄音,去河邊找鬼不跟。 笑死颓帝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播购城,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吕座,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瘪板?” 一聲冷哼從身側(cè)響起吴趴,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侮攀,沒想到半個月后锣枝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兰英,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年撇叁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畦贸。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡陨闹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出薄坏,到底是詐尸還是另有隱情趋厉,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布胶坠,位于F島的核電站觅廓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏涵但。R本人自食惡果不足惜杈绸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矮瘟。 院中可真熱鬧瞳脓,春花似錦、人聲如沸澈侠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哨啃。三九已至烧栋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拳球,已是汗流浹背审姓。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祝峻,地道東北人魔吐。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓扎筒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酬姆。 傳聞我的和親對象是個殘疾皇子嗜桌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,130評論 25 707
  • groovy 插件 翻譯 [TOC] 原文 android-apt是什么? android-apt 是一個Grad...
    總是說下次閱讀 35,699評論 10 64
  • 前言:隨著一些如ButterKnife,dagger等的開源注解框架的流行辞色,APT的概念也越來越被熟知骨宠。這篇文章將...
    wenju_song閱讀 10,769評論 5 24
  • 最近新了一個架構(gòu),之前用dagger2時候相满,每當(dāng)添加新activity還要修改或者新建component來完成da...
    hello_word閱讀 1,498評論 1 0
  • 生日快樂诱篷。 我對自己說。再有十幾分鐘就是28歲雳灵。生活簡單粗暴把我推到了這么一個年紀(jì)。 感謝曾經(jīng)遇到的經(jīng)歷的 好的壞...
    恰如其分的溫暖閱讀 168評論 0 0