【譯】Android Gradle 插件 4.0.0 中 Feature-on-Feature 的依賴關係

原文地址 : medium.com/pulselive/a…android

隨着 Android Studio 4.0 穩定版的發佈,有人對於 Feature-on-Feature Dependencies 的做用提出了疑問,表示不理解,經過本篇將介紹它在 Android Studio 4.0 新版本中的做用。bash

這個功能其實和 com.android.dynamic-feature 有關,將某些庫模塊遷移到 DFM (Dynamic Feature Modules) 要求在項目結構中進行更改,可使基礎 com.android.application 特性與任何 dynamic features 之間的依賴關係反轉,更多可見底部拓展閱讀。app

在 Android Gradle Plugin 4.0.0 中,動態功能如今能夠依賴於其餘動態功能,當你的應用程序下載動態功能時,它還會下載它依賴的全部動態功能。ide

更多官方解釋可見 feature-on-featurepost

通常 Feature-on-Feature Dependencies 中 Gradle 依賴關係圖能夠以下所示:gradle

最初,你可能會認爲這僅適用於動態功能的某些特定用途,但這實際上有助於解決 Android Gradle Plugin 3.5 當前動態功能項目面臨的一個很是現實的問題。ui

假設你有一個具備 3 個動態功能的項目,:video-list:video-player:news。其中 :video-list:video-player 依賴於一個共同的庫 :video-data,以下圖所示多是你會使用的 Gradle 依賴項:this

具備3個動態功能的示例項目,其中2個依賴於相同的庫模塊。google

若是此時嘗試構建此庫,可能會收到一條錯誤消息,指出 2 個動態功能都打包了相同的庫:spa

[:video-list, :video-player] all package the same library [:video-data].

Multiple APKs packaging the same library can cause runtime errors.
Adding the above library as a dependency of the base module will resolve this
issue by packaging the library with the base APK instead.
複製代碼

在Android Gradle Plugin 3.5 中,常見的依賴關係必須由 base 提供,所以你的 Gradle 依賴項將以下所示:

:video-data 必須由 :base 提供,由於 2 個或更多動態功能依賴於它, 這就產生了一個有趣的反作用,:news 如今隱含依賴 :video-data

若是要製做 :newsInstant apps, 這將成爲一個巨大的問題,由於 Instant apps 的下載大小限制爲 4MB,若是此時依賴庫實際上並不須要,那麼將下載大小降至 4MB 如下將很是困難。

例如 :video-data 可能依賴於 Google Play 服務提供的 Cast 庫,若是此時的項目還沒有使用 Google Play 服務,則會變成一個很大浪費的依賴關係。

在 Android Gradle Plugin 4.0 中的 Feature-on-Feature 依賴關係解決了此問題,此時有兩種不一樣的選擇,能夠像這樣進行 :video-list 依賴 :video-player

反之亦然,即 :video-player 取決於 :video-list , 如今就再也不擁有 2 個徹底依賴於的動態功能 :video-data,而且 「AGP is happy」 。

你還可使 :video-data 本身成爲動態功能,並具備 :video-list:video-player 依賴 :video-data

這些解決方案中的任何一個,都將避免 3.5 裏常見的依賴項構建錯誤,並確保它們 :news 不依賴 :video-data,所以 :news 能夠做爲 4MB 即時應用發佈。

補充:對於 DFM (Dynamic Feature Modules),基本對象 com.android.applicationcom.android.dynamic-feature 模塊的依賴項,這意味着您可使用 DFM 中基本模塊及其庫中定義的任何類,可是在編譯時不能從 base application 中引用 DFM 中定義的任何代碼。

Further Reading

相關文章
相關標籤/搜索