android gradle 3.0.0 中依賴指令implementation、api 的區別

AndroidStudio升級到3.0以後,gradle版本也隨之升級到了3.0.0版本。java

classpath 'com.android.tools.build:gradle:3.0.0'
1
在新建一個Android工程的時候,build.gradle中的依賴默認爲implementation,而不是以前的compile。另外,gradle 3.0.0版本以上,還有依賴指令api。本文主要介紹下implementation和api的區別。android

新建工程默認生成的app的build.gradle文件中的依賴:api

dependencies {app

implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

}
1
2
3
4
5
6
7
8
api 指令gradle

徹底等同於compile指令,沒區別,你將全部的compile改爲api,徹底沒有錯。ui

implementation指令google

這個指令的特色就是,對於使用了該命令編譯的依賴,對該項目有依賴的項目將沒法訪問到使用該命令編譯的依賴中的任何程序,也就是將該依賴隱藏在內部,而不對外部公開。spa

簡單的說,就是使用implementation指令的依賴不會傳遞。例如,有一個module爲testsdk,testsdk依賴於gson:.net

implementation 'com.google.code.gson:gson:2.8.2'
1
這時候,在testsdk裏邊的java代碼是能夠訪問gson的。code

另外一個module爲app,app依賴於testsdk:

implementation project(':testsdk')
1
這時候,由於testsdk使用的是implementation 指令來依賴gson,因此app裏邊不能引用gson。

可是,若是testsdk使用的是api來引用gson:

api 'com.google.code.gson:gson:2.8.2'
1
則與gradle3.0.0以前的compile指令的效果徹底同樣,app的module也能夠引用gson。這就是api和implementation的區別。

建議

在Google IO 相關話題的中提到了一個建議,就是依賴首先應該設置爲implementation的,若是沒有錯,那就用implementation,若是有錯,那麼使用api指令。使用implementation會使編譯速度有所增快。

參考:

http://blog.csdn.net/soslinke...

https://zhuanlan.zhihu.com/p/...

https://stackoverflow.com/que...

http://blog.csdn.net/JF_1994/...

相關文章
相關標籤/搜索