当前位置: 首页 > backend >正文

Kotlin Multiplatform--02:项目结构进阶

Kotlin Multiplatform--02:项目结构进阶

    • 引言
    • 正文

引言

        在上一章中,我们对 Kotlin Multiplatform 项目有了基本的了解,已经可以进行开发了。但我们只是使用了系统默认的项目结构。本章介绍了如何进行更复杂的项目结构管理。


正文

        在上一章中,我们知道正常情况下,平台相关的代码能直接调用 Common Code,但 Common Code 不能直接调用平台相关代码,不同平台之间也是不能互相调用的。即如下关系:

        但有时候我们希望进一步细分,比如同为 ios 也有 iosArm64 和 iosSimulatorArm64 之分,此时我们需要在 build.gradle.kts 中的 sourceSets 用到 dependsOn。
        dependsOn 用来连接两个不同的 kotlin source sets,一般是用来连接 Common Code 和平台相关代码。假设现在有两个 kotlin source sets A 和 B,现有表达式 A.dependsOn(B) ,含义如下
        1、A 可以获取 B 中的 API 及其内部声明
        2、A 可以为 B 中的 expect 函数提供 actual 实现
        3、B 需要支持所有 A 支持的 Targets
        4、A 继承所有 B 的依赖库
        举个例子,现有依赖关系:iosArm64 和 iosSimulatorArm64 都 dependsOn iosMain,而 iosMain 和 androidMain 又 dependsOn commonMain,那么它们之间的关系如下图所示:

        上述这些都是系统内置的 sourceSets 其实我们也可以自定义 sourceSets,如下所示:

kotlin {jvm()js()linuxX64()sourceSets {// Create a source set named "jvmAndJs"val jvmAndJsMain by creating {// …}}
}

        我们声明了一个名为 jvmAndJsMain 的自定义 sourceSets,如下图所示:

        现在 jvmAndJsMain 是独立于项目结构树的,我们需要将其加到项目结构树中去:

kotlin {jvm()js()linuxX64()sourceSets {val jvmAndJsMain by creating {// Don't forget to add dependsOn to commonMaindependsOn(commonMain.get())}jvmMain {dependsOn(jvmAndJsMain)}jsMain {dependsOn(jvmAndJsMain)}}
}

        现在项目结构树如下所示:

http://www.xdnf.cn/news/1688.html

相关文章:

  • Kafka 命令行操作与 Spark-Streaming 核心编程总结
  • Python3 基础:变量、数据类型和基本运算
  • 驱动开发系列53 - 一个OpenGL应用程序是如何调用到驱动厂商GL库的
  • 济南国网数字化培训班学习笔记-第二组-5节-输电线路设计
  • vue3--手写手机屏组件
  • 【工具】使用 MCP Inspector 调试服务的完全指南
  • 关于nginx,负载均衡是什么?它能给我们的业务带来什么?怎么去配置它?
  • 服务器的演进与应用:从物理设备到云端革命
  • 前端出现的一些新技术或者升级的技术汇总
  • Git多人协作与企业级开发模型
  • 两段文本比对,高亮出差异部分
  • 【多智能体系统】特点解析与高效组织策略
  • Milvus(6):Collection 管理分区、管理别名
  • 深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
  • 字典与集合——测试界的黑话宝典与BUG追捕术
  • C语言编程--16.删除链表的倒数第n个节点
  • 触觉智能RK3506核心板,工业应用之RK3506 RT-Linux实时性测试
  • arm64适配系列文章-第九章-arm64环境上sentinel的部署
  • 【mysql】windows mysql命令
  • Verilog 语法 (一)
  • springboot在eclipse里面运行 run as 是Java Application还是 Maven
  • Java面试场景篇:分布式锁的实现与组件详解
  • MCP‌和LangGraph‌结合2
  • 基于Vue3 的 h5监听从左到右手滑返回上一页
  • 开源模型应用落地-语音合成-MegaTTS3-零样本克隆与多语言生成的突破
  • 从工作到娱乐:Codigger Desktop 让桌面环境更智能
  • c#-命名和书写规范
  • k8s基于角色的访问控制(RBAC)
  • GPT-4o最新图像生成完全指南:10大应用场景与提示词模板
  • opencv--图像变换