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.mzph.cn/web/77215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】连接github时的疑难杂症(DNS解析失败)

大家好,我是jstart千语。最近在将项目推送到github的时候,突然github就拒绝访问了,即使挂了VPN,网页也进不去,通过git也不能把代码推送上去。 即使后面看别人的一些解决方案,比如取消代理啊、更换ssh的方式…

ViTMAE:掩码自编码器是可扩展的视觉学习者

摘要 本文展示了掩码自编码器(MAE)作为计算机视觉中的可扩展自监督学习方法。我们的MAE方法很简单:我们对输入图像进行随机掩码,并重建缺失的像素。该方法基于两个核心设计。首先,我们开发了一种非对称的编码器-解码器…

全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)

一、行业全景:从“材料突破”到“能源革命”的核心引擎 碳化硅(SiC)作为第三代半导体材料的代表,凭借其宽禁带(3.26eV)、高临界击穿场强(3MV/cm)、高热导率(4.9W/cmK&…

AWS Glue ETL设计与调度最佳实践

一、引言 在AWS Glue中设计和调度ETL过程时,需结合其无服务器架构和托管服务特性,采用系统化方法和最佳实践,以提高效率、可靠性和可维护性。本文将从调度策略和设计方法两大维度详细论述,并辅以实际案例说明。 二、调度策略的最…

数据结构手撕--【二叉树】

目录 定义结构体: 初始化: 手动创建一个二叉树: 前序遍历: 中序遍历: 后序遍历 二叉树节点个数: 叶子节点个数: 二叉树第k层节点个数: 二叉树的高度: 查找值为x…

2025 Java 开发避坑指南:如何避免踩依赖管理的坑?

在 Java 开发的世界里,依赖管理就像是一座看不见的桥梁,连接着项目所需的各种第三方库和框架。然而,这座桥梁并非总是稳固,稍有不慎就可能掉入 “依赖地狱”,导致项目编译失败、运行异常。2025 年,随着开源…

用node打开一个网页

前言 使用node打开网页,要求跨平台 方案 使用子进程来用命令行打开网页链接就可以了,需要注意的是Mac系统使用的是open命令,Windows系统使用的是start命令,Linux等系统使用xdg-open命令。针对不同的操作系统使用不同的命令。 封…

使用功能包组织C++节点的具体教程

在 ROS(Robot Operating System)中,使用功能包(package)来组织 C 节点是一种常见且有效的方式,它能让代码结构更清晰、便于管理和复用。 1. 环境准备 确保已经安装了 ROS,这里以 ROS 2 Humble…

二项式分布html实验

二项式分布html实验 本文将带你一步步搭建一个纯前端的二项分布 Monte-Carlo 模拟器。 只要一个 HTML 文件,打开就能运行: 动态输入试验次数 n、成功概率 p 与重复次数 m点击按钮立刻得到「模拟频数 vs 理论频数」柱状图随着 m 增大,两组柱状…

通过 API 对接应用网络商城实现订单自动化

前言 API(Application Programming Interface)即应用程序编程接口,是一种允许不同软件应用程序之间进行交互和数据共享的工具。它通过定义一组明确的规则和协议,使得各个软件系统能够以标准化的方式相互通信。 在支付领域&#x…

openwrt作旁路由时的几个常见问题 openwrt作为旁路由配置zerotier 图文讲解

1 先看openwrt时间,一定要保证时间和浏览器和服务器是一致的,不然无法更新 2 openwrt设置旁路由前先测试下,路由器能否ping通主路由,是否能够连接外网,好多旁路由设置完了,发现还不能远程好多就是旁路由本…

FANUC机器人GI与GO位置数据传输设置

FANUC机器人GI与GO位置数据传输设置(整数小数分开发) 一、概述 在 Fanuc 机器人应用中,如果 IO 点位足够,可以利用机器人 IO 传输位置数据及偏移位置数据等。 二、操作步骤 1、确认通讯软件安装 首先确认机器人控制柜已经安装…

UE5 Assimp 自用

记录一下配assimp库到ue中的过程。因为想在ue里面实现一些几何处理(虽然ue好像有相关的geo的代码),遂配置了一下assimp。 1. 编译整理生成自己所需要的文件。cmake编译,下载github 的官方的assimp-master,然后cmake都是默认的就行…

第18章:MCP在创作领域中的应用

第18章:MCP在创作领域中的应用 创意过程,无论是写作、绘画、音乐创作还是设计,往往充满了不确定性、迭代和灵感的迸发。传统 AI 在创意领域的应用常常局限于风格迁移、简单内容生成等。MCP 框架通过其对记忆、上下文和规划的整合,为 AI Agent 参与和辅助更深层次的创意活动…

电子电子架构 --- 主机厂视角下ECU开发流程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

【Agent】LangManus深度解析:AI自动化框架的对比与langgraph原理

LangManus深度解析:AI自动化框架的技术演进与实践 本文将带你深入探索LangManus这一AI自动化框架的核心技术与其基于langgraph的实现原理,并与OpenManus进行全面对比,助你掌握多智能体系统的前沿技术。 本文3万字,没有时间的话可以…

机器学习-08-推荐算法-案例

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中关联规则 参考 机器学习(三):Apriori算法(算法精讲) Apriori 算法 理论 重点 MovieLens:一个常用的电影推荐系统领域的数据集 23张图&#x…

OpenCV 图形API(63)图像结构分析和形状描述符------计算图像中非零像素的边界框函数boundingRect()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算点集或灰度图像非零像素的 upright(不旋转)边界矩形。 该函数计算并返回指定点集或灰度图像非零像素的最小 upright …

Redis ⑥-string | hash | list

string类型基本介绍 Redis 中的字符串,是直接按照二进制的方式进行存储的。也就是说,在存取的过程中,是不会做任何编码转换的。存的是啥,取的时候就是啥。 Redis 的这个机制,就使得 Redis 非常适合用来存储各种各样的…

星火燎原:大数据时代的Spark技术革命在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。

星火燎原:大数据时代的Spark技术革命 在数字化浪潮席卷全球的今天,海量数据如同奔涌不息的洪流,传统的数据处理方式已难以满足实时、高效的需求。Apache Spark作为大数据领域的璀璨明星,凭借其卓越的性能和强大的功能&#xff0c…