任何人都可以在这里详细解释Kotlin / Native微调应用程序项目结构? 还有关于不同模块如何工作的细节

我想具体了解各个客户端模块如何使用通用模块。 哪些是所有客户端和服务器共享的真正常见部分。

谢谢。

这很容易。 我怀疑你在谈论Kotlin多平台模块。
考虑printprint

在通用模块中,我们可以expect打印function:

 expect fun print(a: String) 

但是我们不知道它是如何实现的,因为通用模块对Java的System.out以及JavaScript的console一无所知。
但是通用模块可以expect在屏幕上打印Stringfunction,而不提供实现。

由于我们已经print ,我们可以实现println

 fun println(a: String) = print("$a\n") 

以上所有代码均位于通用模块内部。
而你所要做的只是为了实现JVM / JS的打印。

对于JVM:

 actual fun print(a: String) = System.out.println(a) 

对于JS:

 actual fun print(a: String) = console.log(a) 

(也许)对于本机:

 actual fun print(a: String) = printf(a) 

以上三个代码块位于客户端模块内部。

考虑你已经设计了一个数据格式,你有编码和解码代码。 这些代码用于Android设备(JVM),后端服务器(JVM),前端网页(JS)和本地应用程序(Native)。
您在所有这些子项目中都使用Kotlin,但是您只需编写一次编码器/解码器。 Kotlin多平台模块解决了这个问题。

关于微调应用程序

它没有使用标准的kotlin方法来创建多平台项目。 这是一个关于gradle的技巧。
有一个readResources (以及osx / linux的randomInit )函数,在平台上执行不同的签名,Gradle将决定哪个Kommon.kt应该与客户端项目一起编译。

readResourcesrandomInit应该被标记为actual ,并且应该有一个“通用模块”来“期待”这两个函数。
他们并没有这样做,可能是因为Kotlin 1.2(带来稳定的多平台支持)在KotlinConf成立时并没有出现。