在 Android 中构建多项目有什么好处?

What are the benefits of a multi-project build in Android?

我正在阅读 Android : Clean Architecture, mostly to learn how to properly organize an application into layers, and for the MVP pattern, and also to match it with what I've been reading on MVP here 的源代码。

然而,尽管我发现结构很漂亮,但我并不真正理解将单个应用程序排序为多个 子项目[=]的好处 25=] 或 模块 。考虑到它们(数据、表示、域)相互依赖,最终将成为同一可执行文件的一部分,它看起来更像是配置地狱。

dependencies {
  ...
  compile project(':domain')
  compile project(':data')

Android应用程序划分为多个子项目(模块)而不是将它们放在一个项目,但仅通过 packages?

将它们分开

实际上这个问题不是 Android 特定的,而是更多的软件架构相关,因为它适用于您开发的几乎所有软件(例如,为什么任何应用程序都由多个模块组成,而不是全部包含在一个包中)。

将代码拆分为模块至少会给您带来以下好处(这是我想到的前 3 个):

  1. 模块之间的明确隔离。 MVP 模式的全部目标是确保您的业务逻辑和表示层不会紧密耦合在一起。通过在不同的模块中定义它们,它使这种分离更加清晰,并鼓励您坚持这种模式。
  2. 代码重用 - 考虑这样一种情况,您有一个应用程序要出售给多个客户,但每个客户都希望获得不同的外观和感觉。如果您将所有代码都放在一个整体项目中,您将不得不拥有项目的许多分支,每个客户一个,或者以其他方式使用自定义选项使提供的应用程序代码膨胀。现在,如果另一方面你已经分离了你的模块,那么你可以为每个客户准备一个不同的表示层并将其与其他公共模块捆绑在一起。
  3. 将您的项目拆分为子项目可以实现更高效的构建和测试,因为您可以仅重建和测试更改的模块,而不是在其中一个文件发生更改时重新编译整个项目。

我希望这对你有意义。

使用多模块项目而不是仅仅使用包的主要好处是模块之间的代码使用仅在一个方向上。

任何代码inside模块可以有来回关系:

A -> 使用来自 -> B

的 classes

B -> 使用来自 -> A

的 classes

如果 A 和 B 在 单独的 模块中,这只会是单向的:

A ->(使用 classes 来自)-> B...

但是B在A里面什么也看不到

这会将您的思维分成更小的、一口大小的块。如果你需要了解模块 B 中的一个 class 是如何工作的,你只需要查看 B 中的其他 class 即可。 但在第一种情况下,您必须查看 A 和 B 中的所有 classes。

作为额外的好处,如果您确实想重复使用任何代码,您可以将该模块直接复制到下一个项目。

我通常将大部分代码放在模块中,并用一个薄的应用程序层将它们连接在一起。我建议使用依赖倒置在模块之间建立任何连接。

除了更快的构建时间之外,拆分成模块的另一个 Android 特定优势是应用的更新大小会更小。