[轉(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配置的依賴會將對應的依賴添加到編譯路徑汤求,并將依賴打包輸出,但是這個依賴是可以傳遞的严拒,比如模塊A依賴模塊B扬绪,B依賴庫C,模塊B在編譯時能夠訪問到庫C裤唠,但是與implemetation不同的是挤牛,在模塊A中庫C也是可以訪問的。
我們修改decoder模塊中對joda-time庫的依賴配置
在app模塊中使用joda-time庫
輸出
3. 第三種:compileOnly
compileOnly修飾的依賴會添加到編譯路徑中种蘸,但是不會打包到apk中墓赴,因此只能在編譯時訪問,且compileOnly修飾的依賴不會傳遞航瞭。
編譯時通過诫硕,運行時報錯:
由于寫Android的時間比較短,不知道這個配置的具體應用場景刊侯,希望有經(jīng)驗的大佬能夠在評論區(qū)回復一下具體的應用場景章办。
4. 第四種:runtimeOnly
這個與compileOnly相反,它修飾的依賴不會添加到編譯路徑中滨彻,但是被打包到apk中纲菌,運行時使用。沒有使用過疮绷。
5. 第五種:annotationProcessor
用于注解處理器的依賴配置翰舌,還沒有使用過。
除了上面五種冬骚,還有兩種testImplementation和androidTestImplementation兩種脏里,用于指定在測試代碼的依賴适篙。
對于上面這么多的依賴,其中Implementation是我們最常用的依賴配置選項。