理解 Android 新的依賴方式

簡評:Android 團隊在 Android Studio 3.0 中給我們帶來了非常多的改變,其中一點就是對項目依賴方式的改進。這篇文章就將詳細介紹下這項改進。

首先,我們來看這樣一種情況:

一個 App 工程往往是由許多互相依賴的 module 所組成,對於處於最底層、最基礎的 module,有兩種可能的變化:

  1. Implementation change: 內部代碼變更,但模塊的外部介面不變。
  2. Application binary interface (ABI) change: 外部介面修改。

Note: 下面重新編譯的模塊將用紅色顯示。

Implementation change

因為 module 的外部介面沒有改變,所以 Gradle 只會重新編譯變更的 module,其他依賴它的 module 則不會重新編譯。如圖所示:

ABI change

如果模塊的外部介面發生了改變,那麼所有依賴了該 module 的其他 module 都需要重新編譯,這就使得編譯時間變長了。

因此,這裡就是一個可以優化的地方,Android Gradle Plugin 3.0 就想解決這個問題。

如果,你已經用上了 Android Studio 3.0 Preview 的話,就會發現在 build.gradle 中 api 和 implementation 已經取代了曾經的 compile。

  • api:和 compile 的作用一樣,當前 module 會暴露其依賴的其他 module 內容。
  • implementation:只在內部使用了該 module,不會向外部暴露其依賴的 module 內容。

所以,我們可以為特定 module 選擇 implementation 關鍵字來加快 gradle 構建速度。

dependencies { // recompile this module and all modules using this one // when legofy interface is modified api project(":legofy") // only recompile this module when landscapevideocamera interface is modified implementation project(":landscapevideocamera:1.0.0")}

更多信息,大家可以閱讀官方的遷移指南。

原文:Implementation vs API dependency

日報擴展閱讀:

探究在 TextView 中顯示 HTML 的正確方法

歡迎關註:知乎專欄「極光日報」,每天為 Makers 導讀三篇優質英文文章。

推薦閱讀:

現在還有像WM系統一樣好用的通話自動錄音手機么?
移動端消息推送 xmpp 和 mqtt 哪個更費電?
關於推送的一些補充

TAG:Android | Android开发 | Gradle |