很多时候,在开发移动应用程序时,我们意识到我们必须一次又一次地解决同样的问题。此问题的解决方案是从库中提取解决方案,以便可以在其他项目中重新使用。

当我们在 Android 项目中这样做时,我们面临着一个选择:创建一个 Android 库或一个 Java/Kotlin 库。

如果我们的解决方案依赖于 Android 框架、图形资源或 AndroidX 库,那么我们将选择 Android。另一方面,如果我们不依赖于任何这些事情,我们可以为所有 JVM 创建一个库,以便在其他项目(如桌面应用程序甚至后端)上重新使用。

发布多模块 Android 库

但是,如果我们的解决方案可以在不依赖 Google 生态系统的情况下实现,但拥有它们将简化其在 Android 中的实现,我们该怎么办呢?

我们可以找到此问题的各种解决方案:

  • 如果我们没有看到在 Android 之外使用的任何机会, 我们可以保留库的单个版本。
  • 我们可以创建两个不同的库项目:一个用于 JVM,另一个用于 Android。不过,这将迫使我们复制大量代码。
  • 我们可以有两个库项目,但这次,使Android库依赖于JVM一个。这样,库将只有促进其移动实现的代码,而不复制 Java/Kotlin 库上的内容。这种方法的问题在于,它将迫使我们为密切相关的代码创建两个不同的存储库:对 JVM 库的 API 的更改可能会影响 Android 的实现和 API。
  • 具有单个多模块项目,并分别发布每个模块。这样,我们拥有最后一个选项的所有好处,现在我们还可以使用 AndroidStudio 的重构工具对 API 进行一些更改,而不会破坏任何库。

在这篇文章中,我们将重点介绍最后一点,发布多模块 Android库, 特别是如何设置 Gradle,以便我们可以以舒适的方式发布自己的模块,而无需复制发布的逻辑。

项目的模块结构如下:

  • 示例: Android 应用程序, 显示如何使用和测试我们的库
  • 核心:Kotlin/JVM 核心,以我们库为核心,具有所有可能的功能,无需依赖 Android 的框架
  • Android: 科特林 / 安卓库与扩展或 API 仅在 Android 中可用
  • 测试:测试 API,在库使用时促进测试编写

我们的目标是发布我们的许多模块:”com.group:mylibrary 模块:1.0.0″

因此,我们可以有一个一致的命名系统,所有已发布的库在存档’设置我们将在顶部添加此行:

Groovy

不同模块的设置是每个模块的通常设置。我们需要考虑到,当我们开发测试 API 时,JUnit 的依赖项从测试实施到实现,因为代码的实现可能需要断言,例如毕业生 ‘。

对于第一个配置,因此我们可以检查我们正在做的事情是否有效,首先我们将在计算机的本地 maven 存储库上发布库。为此,我们将将下一个插件添加到我们的渐变脚本中:

Groovy