Gradle新版本里面依賴的寫法支持implementation和api,下面簡單解釋兩者的區別:
implementation 表示依賴,即 只依賴不打包進來。
api 表示打包,即 不僅依賴還打包進來,這樣上層就不用重復依賴。
注意:這里的打包是便於理解,是指打包依賴關系而不是打包源代碼,也就是說將依賴暴露給上層。
下面舉例說明:
app主模塊下的依賴:
dependencies { implementation project(path: ':home') } //依賴home模塊,使用implementation。
home模塊下的依賴:
dependencies { api project(path: ':mvp') } //使用api,表示將mvp模塊引入並打包進home模塊。因為mvp模塊含v7包,home模塊也含v7包。
mvp模塊下的依賴:
dependencies { api 'com.android.support:appcompat-v7:28.0.0' } //使用api,表示將v7包引入並打包進mvp模塊。
相當於:
app主模塊下的依賴:
dependencies {
implementation project(path: ':home')
implementation project(path: ':mvp')
implementation 'com.android.support:appcompat-v7:28.0.0'
} //依賴home模塊,和home模塊需要顯示引入v7包一樣,app引入home模塊后還需要顯示引入mvp模塊和v7包。
home模塊下的依賴:
dependencies {
implementation project(path: ':mvp')
implementation 'com.android.support:appcompat-v7:28.0.0'
} //依賴mvp模塊.因為mvp模塊引入v7包使用的implementation,也就是只給自己使用,沒有將v7包打包進mvp模塊,所以home模塊還要引入v7包。
mvp模塊下的依賴:
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
} //依賴v7包,使用implementation,只依賴v7進mvp模塊,不打包向上提供