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.pswp.cn/web/77215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77215.shtml
英文地址,請注明出處:http://en.pswp.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…