api與Implementation區別

上官方鏈接

https://developer.android.com/studio/build/dependencies

來官方截圖

翻譯與解釋

implementation

     Gradle 會將依賴項添加到編譯類路徑,並將依賴項打包到構建輸出。不過,當您的模塊配置 implementation 依賴項時,會讓 Gradle 瞭解您不希望該模塊在編譯時將該依賴項泄露給其他模塊。也就是說,其他模塊只有在運行時才能使用該依賴項。使用此依賴項配置代替 api 或 compile(已棄用)可以顯著縮短構建時間,因爲這樣可以減少構建系統需要重新編譯的模塊數。例如,如果 implementation 依賴項更改了其 API,Gradle 只會重新編譯該依賴項以及直接依賴於它的模塊。大多數應用和測試模塊都應使用此配置。|

api

     Gradle 會將依賴項添加到編譯類路徑和構建輸出。當一個模塊包含 api 依賴項時,會讓 Gradle 瞭解該模塊要以傳遞方式將該依賴項導出到其他模塊,以便這些模塊在運行時和編譯時都可以使用該依賴項。此配置的行爲類似於 compile(現已棄用),但使用它時應格外小心,只能在您需要以傳遞方式導出的依賴庫中使用它,所以主工程一般是使用不上這個的。這是因爲,如果 api 依賴項更改了其外部 API,Gradle 會在編譯時重新編譯所有有權訪問該依賴項的模塊。因此,擁有大量的 api 依賴項會顯著增加構建時間。除非要將依賴項的 API 公開給沒有直接依賴的模塊,否則庫模塊應改用 implementation 依賴項

示例

     我們主工程模塊爲A,我們三方庫lib-c、lib-d、lib-d放入到一個基礎庫集合lib-b中,那麼我們是希望A只引入一個基礎庫lib-b,就可以使用衆多的基礎庫,那麼我們在A的build.gradle中就這樣寫:

implementation project(':lib-b')

在lib-b的build.gradle中這樣寫:

api project(':lib-c')
api project(':lib-d')
api project(':lib-e')

如果lib-c發生了修改,那麼lib-b和主工程A都需要重新編譯。所以我們要自己檢查各個庫裏面的api引入,是否是真的把lib-b引入的庫lib-c暴露給它的上級A,如果不需要那麼就換成implementation。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章