理解 Android 新的依賴方式
簡評:Android 團隊在 Android Studio 3.0 中給我們帶來了非常多的改變,其中一點就是對項目依賴方式的改進。這篇文章就將詳細介紹下這項改進。
首先,我們來看這樣一種情況:
一個 App 工程往往是由許多互相依賴的 module 所組成,對於處於最底層、最基礎的 module,有兩種可能的變化:
- Implementation change: 內部代碼變更,但模塊的外部介面不變。
- 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 哪個更費電?
※關於推送的一些補充