Kotlin 通用库可在多个 MPP 中重用

Posted

技术标签:

【中文标题】Kotlin 通用库可在多个 MPP 中重用【英文标题】:Kotlin common library to reuse in multiple MPP 【发布时间】:2020-03-06 03:34:09 【问题描述】:

我正在建立一个 Kotlin 多平台项目,这样我就可以在多个平台上为单个应用重用通用代码。在为应用程序构建通用代码时,我提取了一些我希望能够在多个 多平台项目中作为库重用的基类。我正在尝试将库添加为 commonMain 中的依赖项。有几件事我不明白。

首先:这目前可行吗?

如果是: 默认的 stdlib-common 是一个 jar 文件,对吗?如果不能在 commonMain 中使用 jar,那么如何在 commonMain 中将 jar 引用为依赖项?或者使用纯 Kotlin 编译的 jar 是否可以,只要它只有 Kotlin 依赖项?

如何编译一个可以在 commonMain 中使用的纯 Kotlin jar,就像使用 stdlib-common 一样?是否有任何关于如何打包的示例 build.gradle 项目或指南?

如果没有: 如果我想避免重复,我还有哪些选择可以在多个多平台项目上重用代码?我真的需要将所有源代码保存在实际的 commonMain 源文件夹中吗?如果是这样,它可以从另一个文件夹链接吗?我尝试添加额外的内容根,但它似乎不起作用,因为 Gradle 控制配置,我不确定如何通过 Gradle 在 commonMain 中添加额外的内容根。

提前致谢。

【问题讨论】:

【参考方案1】:

我得到了它的工作,主要是通过查看this thread 和查看this example。虽然有些内容现在可能已经过时,但它帮助我理解了以下内容:

MPP1 可以有另一个 MPP2 作为依赖项。 Here 是 MPP 库列表供参考。

MPP2 需要为 MPP1 使用的同一组平台生成工件。

MPP2 生成平台工件以及描述它们的module file。 MPP1 然后可以使用以下配置。得益于模块文件,不需要显式添加各个平台对应的依赖,只需要在commonMain中声明依赖即可。

commonMain 
    dependencies 
        implementation kotlin('stdlib-common')
        implementation 'com.company:mpp2:1.0'
    

【讨论】:

以上是关于Kotlin 通用库可在多个 MPP 中重用的主要内容,如果未能解决你的问题,请参考以下文章

kotlin MPP 与 Kotlin Native 有啥不同?

UICollectionView 子类可在多个 viewController 中重用

在情节提要中使用 iOS 静态库公共视图控制器?

Kotlin MultiPlatform - 发布 Android 库失败

Kotlin编程开发Android运用程序(Volley+Gson依赖库)

RKMPP库快速上手--MPP解码入门