前言
Android Studio版本更新至3.0了,更新后,連帶着com.android.tools.build:gradle 工具也升級到了3.0.0,在3.0.0中使用了最新的Gralde 4.0 里程碑版本作為gradle的編譯版本,該版本gradle編譯速度有所加速,更加令人興奮的是完全支持Java8。當然,對於Kotlin的支持,在這個版本也有所體現,Kotlin插件默認是安裝的。
一、依賴變化
當我們使用Android Studio3.0新建項目時會發現,默認的依賴由之前的compile更改為implementation了。
3.0 以下版本build.gradle中依賴的寫法:
compile fileTree(dir: 'libs', include: ['*.jar'])
但在3.0后的寫法為
implementation fileTree(dir: 'libs', include: ['*.jar']) 或 api fileTree(dir: 'libs', include: ['*.jar'])
二、區別
在3.0版本中,compile 指令被標注為過時方法,而新增了兩個依賴指令,一個是implementation和api,這兩個都可以進行依賴添加,但是有什么區別呢?
api
完全等同於compile指令,沒區別,你將所有的compile改成api,完全沒有錯。
implementation
這個指令的特點就是,對於使用了該命令編譯的依賴,對該項目有依賴的項目將無法訪問到使用該命令編譯的依賴中的任何程序,也就是將該依賴隱藏在內部,而不對外部公開。
舉個例子:
比如我在一個libiary中使用implementation依賴了gson庫,然后我的主項目依賴了libiary,那么,我的主項目就無法訪問gson庫中的方法。這樣的好處是編譯速度會加快,推薦使用implementation的方式去依賴,如果你需要提供給外部訪問,那么就使用api依賴即可
在Google IO 相關話題的中提到了一個建議,就是依賴首先應該設置為implementation的,如果沒有錯,那就用implementation,如果有錯,那么使用api指令,這樣會使編譯速度增快。
三、說明
下面是2.x版本依賴的說明,括號里對應的是3.0版本的依賴方式。
compile(api)
這種是我們最常用的方式,使用該方式依賴的庫將會參與編譯和打包。
provided(compileOnly)
只在編譯時有效,不會參與打包,可以在自己的moudle中使用該方式依賴。比如com.android.support,gson這些使用者常用的庫,避免沖突。
apk(runtimeOnly)
只在生成apk的時候參與打包,編譯時不會參與,很少用。
testCompile(testImplementation)
testCompile 只在單元測試代碼的編譯以及最終打包測試apk時有效。
debugCompile(debugImplementation)
debugCompile 只在debug模式的編譯和最終的debug apk打包時有效。
releaseCompile(releaseImplementation)
releaseCompile 僅僅針對Release模式的編譯和最終的Release apk打包。