如何使用 HILT 支持 Android 应用程序的模块化?

GVi*_*i82 5 android dependency-injection module dagger-2 dagger-hilt

Jeroen Mols 的这篇有趣的文章展示了一种模块化 Android 应用程序的可能方法。它基本上将模块分为 3 层(AppFeaturesLibraries)。App直接与 通信FeaturesFeatures可以依赖Libraries. 这意味着App不直接与 交互Libraries

在此输入图像描述

现在,如果我正确理解 HILT 文档,则包含Application(即 App 模块)并因此具有 HILT 入口点 ( HiltAndroidApp) 的模块需要了解想要使用依赖项注入的所有其他模块。因此,例如,如果我有一个名为 的库libraries:analytics,我需要我的应用程序模块依赖于它,所以我将被迫在我的app/build.gradle

implementation project(":libraries:analytics")
Run Code Online (Sandbox Code Playgroud)

这违反了整个架构试图实现的分离和抽象。

我的解释正确吗?如果是这样,您会怎样做才能不破坏建议的架构?

tak*_*rsh 3

如果您使用Hilt Gradle 插件并且具有其他模块的传递依赖项,您可以在下面将其应用到:app/build.gradle并从中删除传递模块依赖项。

hilt {
    enableAggregatingTask = true
}
Run Code Online (Sandbox Code Playgroud)

另请参阅更多详细信息:https://github.com/google/dagger/issues/2123#issuecomment-928064317