1. 程式人生 > >Gradle for Android:依賴管理

Gradle for Android:依賴管理

Android專案的依賴管理是通過gradle來配置的,下面的程式碼我們在我們的專案中見的很多,那這些gradle都是什麼意思呢?

1.compile 'com.android.support:appcompat-v7:23.4.0'
2.provided 'com.squareup.dagger:dagger-compiler:1.2.1'(網路下載)
  provided fileTree(include: '*.jar', dir: '../../../core/Base/Gdroid/libs')(本地路徑)
3.compile files('libs/picasso-2.4.0.jar')
4.
compile project(':androidPullToRefresh')

2.X vs 3.X

compile(api)指令

如果你的jar包/依賴程式碼 在編譯的時候需要依賴,在執行的時候也需要,那麼就用compile.前提:apply plugin: ‘war’或者apply plugin: ‘java’。

compile是從repository(預設是jCenter())裡下載一個依賴包進行編譯並打包。
如下:

compile ‘org.springframework:spring-webmvc:4.3.9.RELEASE’

compile files(‘libs/picasso-2.4.0.jar’)

compile files是從本地的libs目錄下尋找picasso-2.4.0.jar這個檔案進行編譯並打包。類似的命令有
compile fileTree(dir: ‘libs’, include: ‘*.jar’)
意思是將libs目錄下所有jar檔案進行編譯並打包。

provided(compileOnly)指令

provided只提供編譯支援,但是不會寫入apk。比如我在編譯的時候對某一個jar檔案有依賴,但是最終打包apk檔案時,我不想把這個jar檔案放進去,可以用這個命令。

testCompile(testImplementation)

testCompile 只在單元測試程式碼的編譯以及最終打包測試apk時有效。

apk(runtimeOnly)

只在生成apk的時候參與打包,編譯時不會參與,很少用。

debugCompile(debugImplementation)

debugCompile 只在debug模式的編譯和最終的debug apk打包時有效

releaseCompile(releaseImplementation)

Release compile 僅僅針對Release 模式的編譯和最終的Release apk打包。

implementation指令

這個指令的特點就是,對於使用了該命令編譯的依賴,對該專案有依賴的專案將無法訪問到使用該命令編譯的依賴中的任何程式,也就是將該依賴隱藏在內部,而不對外部公開。

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

implementation ‘com.google.code.gson:gson:2.8.2’

這時候,在testsdk裡邊的java程式碼是可以訪問gson的。

另一個module為app,app依賴於testsdk:

implementation project(‘:testsdk’)

這時候,因為testsdk使用的是implementation 指令來依賴gson,所以app裡邊不能引用gson。

但是,如果testsdk使用的是api來引用gson:

api ‘com.google.code.gson:gson:2.8.2’

則與gradle3.0.0之前的compile指令的效果完全一樣,app的module也可以引用gson。這就是api和implementation的區別。

exclude指令

用於解決重複依賴

參考資料