在多模块项目中,此框架的打包方式非常重要。假设我们有两个多平台模块,例如登录和主页。还有第三个模块称为网络,它包含一个通用 HTTP 客户端。登录和主页模块都依赖于网络模块。当 Android 应用分别导入登录和主页模块时,它们仍使用来自网络模块的相同 HTTP 客户端。
多个 KMP 模块如何在 Android 平台上运作
在 iOS 上情况有所不同。如果我们从 login 和 home 生 巴拉圭电话号码库 成两个单独的框架,则每个框架都包含其所依赖的所有代码的精确副本。这意味着我们的功能不使用相同的 HTTP 客户端;相反,它们各自都有它的单独副本。
多个 KMP 模块如何在 iOS 平台上运作
在多模块项目中,模块对其他模块有很多依赖,这种行为可能会导致几个问题。最大的问题是模块之间缺乏状态共享。如果多个模块使用另一个模块来保存公共状态,则在编译到 iOS 后将无法工作。每个模块都有自己独立的状态副本,而不是使用共享的状态副本。此外,由于不同框架之间的代码重复,应用程序大小将不必要地增加。
伞形模块
这就是为什么我们应该在多模块 KMP 项目中引入一个伞模块。伞模块是唯一生成 iOS 框架的模块。因此,iOS 应用程序只有一个依赖项,即伞框架,并且它不依赖于其他单个模块。另一方面,Android 应用程序可以通过 Gradle 依赖单个模块,也可以仅使用伞模块来与 iOS 保持一致。
将应用程序迁移到 KMP – 伞模块
伞模块本身依赖于所有多平台模块,并决定哪些模块应该可以从本机应用程序访问。对于那些应该严格由多平台代码内部使用的模块,我们将它们作为实现依赖项添加到伞模块。相反,应该公开的模块被添加为 API 依赖项,并从 iOS 框架中额外导出。下面,您可以找到伞模块 build.gradle.kts 文件中的示例。