我正在开发一个支持JVM、iOS和macOS的Kotlin/Native多平台项目。我的设置包含以下模块:
- common
- ios
- jvm
- macos
我想使用一些本机代码作为actual
类,并将expected
类放入common
中。但是,对于多个目标(iOS和macOS),实际的类实现是相同的。是否有办法设置我的源代码(可能在Gradle中),以便不必维护实际类的2个相同副本?
我正在开发一个支持JVM、iOS和macOS的Kotlin/Native多平台项目。我的设置包含以下模块:
- common
- ios
- jvm
- macos
我想使用一些本机代码作为actual
类,并将expected
类放入common
中。但是,对于多个目标(iOS和macOS),实际的类实现是相同的。是否有办法设置我的源代码(可能在Gradle中),以便不必维护实际类的2个相同副本?
4条答案
按热度按时间oprakyz71#
Stately有一个相当复杂的配置。iOS和Macos共享所有相同的代码。
为了构建项目,有
commonMain
,nativeCommonMain
依赖于它,实际上appleMain
依赖于nativeCommonMain
。这个结构可能比你需要的要深,但是我们需要linux和windows的不同的东西,我认为Egor上面的答案更容易理解。
实际上,我们在Stately中定义了多平台原子,所以您可以将它们作为灵感使用,或者实际上只使用库本身。
https://github.com/touchlab/Stately
常见
虚拟机
原生
gopyfrb32#
在Okio中,我们声明了两个额外的源代码集
nativeMain
和nativeTest
,并配置内置的原生源代码集以依赖它们:isr3a4wc3#
如果这三个实现完全相同,只需将代码放在
common
中。expect/actual
仅用于不同平台上的“不同”内容wvmv3b1j4#
如果您使用KotlinDSL,您的build.gradle.kts文件可能如下所示: