今天查了下關於gradle中的依賴引用的情況:
原文:https://zhuanlan.zhihu.com/p/110215979
當前Gradle中共有 5 種依賴關系 ;外加2種測試用的依賴
01. Implementation
將指定的依賴添加到編譯路徑,並將該依賴打包到輸出文件中,如apk;
但是這個依賴在編譯時不能暴露給其他模塊,例如依賴此模塊的其他模塊。這種方式指定的依賴在編譯時只能在當前模塊中訪問。
02. api
使用api配置的依賴會將對應的依賴添加到編譯路徑,並將依賴打包輸出,但是這個依賴是可以傳遞的,
比如模塊A依賴模塊B,B依賴庫C,模塊B在編譯時能夠訪問到庫C,但是與implemetation不同的是,在模塊A中庫C也是可以訪問的。
03. compileOnly
compileOnly修飾的依賴會添加到編譯路徑中,但是不會打包到apk中,因此只能在編譯時訪問,且compileOnly修飾的依賴不會傳遞。
04. runtimeOnly
這個與compileOnly相反,它修飾的依賴不會添加到編譯路徑中,但是被打包到apk中,運行時使用。
05. annotationProcessor
用於注解處理器的依賴配置
測試用依賴
testImplementation 和 androidTestImplementation
-------------------------------------------------------------------------------------------------------------
舉例:
LomBok: 這個庫是用於在編譯時快速生成Getter和Setter等內容的,所以只使用在編譯階段,同時配置上注釋依賴處理
06. 對Jar或aar包的依賴配置
在某些情況下,自己開發的jar 包,aar包或者第三方開發的包已經下載到本地,現在需要被項目引用到,該如何配置呢?
在新建 項目后,在結構中,會有一個 libs目錄,一般情況下,我們會直接將第三方包放在這個目錄下;
此時,對於包的引用有二種方式:
方式A: 直接在dependencies中添加引用, 如下面二個例子
** implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
** implementation fileTree(dir: 'libs', include: ['*.jar'])
此種方式簡單粗暴,但是不允許同時出現同一模塊不同編譯類型的jar(或aar),
例如,如果libs同時存在test-release.aar和test-debug.aar,他們都是來自同一個module的打包,但是只是編譯類型不一樣,如果同時存在的話,會編譯不過.
方式B:先在gradle中添加目錄, 之后再按需要進行引用