[轉(zhuǎn)]Gradle依賴之‘五種依賴配置’
目前gradle支持的依賴配置有五種,分別是implementation, api, compileOnly, runtimeOnly和annotationProcessor。常用的依賴配置是implementation, api和compileOnly。
1. 第一種:implementation
會將指定的依賴添加到編譯路徑,并且會將該依賴打包到輸出,如apk中,但是這個依賴在編譯時不能暴露給其他模塊,例如依賴此模塊的其他模塊。這種方式指定的依賴在編譯時只能在當前模塊中訪問。
當前項目中有兩個模塊app和decoder

模塊app依賴模塊decoder
decoder中添加了遠程二進制庫依賴joda-time

在decoder模塊中使用這個庫

在app模塊中條用decoder模塊提供的方法

嘗試在app模塊中使用joda-time庫

出現(xiàn)錯誤:

從上面的例子中我們可以看出,complementation依賴設(shè)置表示當前這個依賴在編譯時只能在當前這個模塊中訪問,其他模塊在編譯時不能訪問,依賴這個模塊的其他模塊在運行時可以訪問這個庫的實現(xiàn)。
2. 第二種:api
使用api配置的依賴會將對應(yīng)的依賴添加到編譯路徑,并將依賴打包輸出,但是這個依賴是可以傳遞的,比如模塊A依賴模塊B,B依賴庫C,模塊B在編譯時能夠訪問到庫C,但是與implemetation不同的是,在模塊A中庫C也是可以訪問的。
我們修改decoder模塊中對joda-time庫的依賴配置

在app模塊中使用joda-time庫

輸出

3. 第三種:compileOnly
compileOnly修飾的依賴會添加到編譯路徑中,但是不會打包到apk中,因此只能在編譯時訪問,且compileOnly修飾的依賴不會傳遞。

編譯時通過,運行時報錯:

由于寫Android的時間比較短,不知道這個配置的具體應(yīng)用場景,希望有經(jīng)驗的大佬能夠在評論區(qū)回復(fù)一下具體的應(yīng)用場景。
4. 第四種:runtimeOnly
這個與compileOnly相反,它修飾的依賴不會添加到編譯路徑中,但是被打包到apk中,運行時使用。沒有使用過。
5. 第五種:annotationProcessor
用于注解處理器的依賴配置,還沒有使用過。
除了上面五種,還有兩種testImplementation和androidTestImplementation兩種,用于指定在測試代碼的依賴。
對于上面這么多的依賴,其中Implementation是我們最常用的依賴配置選項。