gradle 從 3.4 開始,compile 已經(jīng)被廢棄了篮撑,取而代之的是 api | implementation减细,倆個(gè)我們都可以用,但是肯定還是有區(qū)別的:
- api - 本地依賴時(shí)依賴不隔離赢笨,但是編譯慢
- implementation - 本地依賴時(shí)依賴隔離未蝌,編譯快
我們從 依賴隔離 | 編譯速度 2個(gè)角度來看 api | implementation
依賴隔離
實(shí)際開始中我們有2種依賴方式:本地 project 依賴 | 遠(yuǎn)程 maven 依賴
我們舉這樣一個(gè)例子 app module A 依賴 module B ,module B 又依賴了 module C 茧妒,module C 又依賴了 module D
1. 本地 project 依賴
- api - A -> D 要是都是 api 的本地依賴方式树埠,那么 A 中可以使用 B,C,D 的 API
- implementation - A -> D 要是都是 implementation 的本地依賴方式,那么 A 就只能使用 B 的 API嘶伟,C,D 的 API 是找不到的
2. 遠(yuǎn)程 maven 依賴
- implementation 就沒代碼隔離的作用了怎憋,B,C,D 的 API A 都能使用
3. 遠(yuǎn)程和本地依賴混用
- 若 A-> B -> C -> D 之間都是遠(yuǎn)程依賴,implementation 就起不到代碼隔離的作用了九昧,B,C,D 的 API A 都能使用
- 若 C -> D 之間是遠(yuǎn)程依賴绊袋,但 A-> B -> C 之間是本地依賴, 使用 implementation 時(shí)铸鹰,B 可以拿到 D 的 api癌别,但是 A 就拿不到 D 的 api 了
編譯速度
在本地依賴時(shí) implementation 可以起到代碼隔離的作用,自然編譯的速度就快蹋笼,還是 A-> B -> C -> D 舉例展姐,若是 D 更新了,那么只有 C,D 是需要重新編譯的剖毯。但是一旦我們使用了 API 的依賴方式圾笨,那么 ABCD 都需要重新編譯