建立您的 Kotlin Multiplatform 程式庫 – 教學
建立 Kotlin Multiplatform 程式庫
本教學使用 IntelliJ IDEA,但您也可以在 Android Studio 中進行 —— 這兩個 IDE 共享相同的核心功能與 Kotlin Multiplatform 支援。
在本教學中,您將學習如何在 IntelliJ IDEA 中建立一個多平台程式庫,將該程式庫發佈到本機 Maven 存儲庫,並將其作為相依性新增至另一個專案中。
本教學基於我們的 多平台程式庫樣板 (multiplatform library template),這是一個包含產生費氏數列 (Fibonacci sequence) 函式的簡單程式庫。
設定環境
建立專案
在 IntelliJ IDEA 中,選取 File | New | Project from Version Control。
輸入 多平台程式庫樣板專案 的 URL:
texthttps://github.com/Kotlin/multiplatform-library-template點擊 Clone。
檢查專案結構
Kotlin Multiplatform 程式庫樣板專案為開發 Kotlin Multiplatform 程式庫提供了基礎結構。此樣板有助於建立可在各種平台上運行的程式庫。
在樣板專案中,library 是核心模組,包含多平台程式庫的主要原始碼與組建資源。

library 模組的結構旨在容納共享程式碼以及平台特定的實作。以下是其原始碼內容的分解:
commonMain:包含在所有目標平台之間共享的 Kotlin 程式碼。這裡是您放置不依賴任何平台特定 API 的程式碼之處。androidMain、iosMain、jvmMain與linuxX64Main:包含針對 Android、iOS、JVM 與 Linux 平台的特定程式碼。這裡是您實作這些平台獨有功能的地方。commonTest、androidUnitTest、iosTest、jvmTest與linuxX64Test:分別包含針對共享commonMain程式碼的測試,以及針對 Android、iOS、JVM 與 Linux 平台的特定測試。
讓我們關注在所有平台間共享的 library 程式碼。在 src/commonMain/kotlin 目錄中,您可以找到 CustomFibi.kt 檔案,其中包含定義費氏數列產生器的 Kotlin Multiplatform 程式碼:
package io.github.kotlin.fibonacci
// 定義產生費氏數列的函式
fun generateFibi() = sequence {
var a = firstElement
yield(a)
var b = secondElement
yield(b)
while (true) {
val c = a + b
yield(c)
a = b
b = c
}
}
// 宣告 `firstElement` 與 `secondElement` 的預期值
expect val firstElement: Int
expect val secondElement: IntfirstElement 與 secondElement 屬性是供平台特定程式碼實作的佔位符號。每個目標平台都應透過在各自的原始碼集中使用 actual 關鍵字來提供實際值。
expect 宣告會與 actual 實作進行配對。當編寫需要平台特定行為的跨平台程式碼時,此機制非常有用。
在這種情況下,多平台程式庫樣板包含了 firstElement 與 secondElement 屬性的平台特定實作。androidMain、iosMain、jvmMain 與 linuxX64Main 目錄包含為這些屬性提供值的 actual 宣告。
例如,以下是包含在 androidMain/kotlin/fibiprops.android.kt 中的 Android 實作:
package io.github.kotlin.fibonacci
actual val firstElement: Int = 1
actual val secondElement: Int = 2其他平台遵循相同的模式,僅在 firstElement 與 secondElement 屬性的值上有所變化。
新增一個新平台
既然您已熟悉樣板中共享程式碼與 platform-specific 程式碼的運作方式,讓我們透過新增對額外平台的支援來擴充專案。
透過使用 expect/actual 機制來配置對 Kotlin/Wasm 平台的支援,然後為 firstElement 與 secondElement 屬性實作平台特定的功能。
將 Kotlin/Wasm 目標新增至您的專案
在
library/build.gradle.kts檔案中,新增 Kotlin/Wasm 目標 (wasmJs) 與原始碼集:kotlinkotlin { // ... @OptIn(org.jetbrains.kotlin.gradle.ExperimentalWasmDsl::class) wasmJs { browser() binaries.executable() } // ... sourceSets { //... wasmJsMain.dependencies { // Wasm 特定的相依性 } } }點擊出現在組建檔案中的 Sync Gradle Changes 圖示 (
) 來同步 Gradle 檔案。或者,點擊 Gradle 工具視窗中的重新整理按鈕。
為 Wasm 建立平台特定程式碼
新增 Wasm 目標後,您需要一個 Wasm 目錄來存放 firstElement 與 secondElement 的平台特定實作:
右鍵點擊
library/src目錄,然後選取 New | Directory。從 Gradle Source Sets 清單中選取 wasmJsMain/kotlin。

右鍵點擊新建立的
wasmJsMain/kotlin目錄,然後選取 New | Kotlin Class/File。輸入 fibiprops.wasm 作為檔案名稱,並選取 File。
將以下程式碼新增至
fibiprops.wasm.kt檔案中:kotlinpackage io.github.kotlin.fibonacci actual val firstElement: Int = 3 actual val secondElement: Int = 5這段程式碼設定了一個 Wasm 特定的實作,將
firstElement的actual值定義為3,將secondElement定義為5。
組建專案
確保您的專案在新平台上能正確編譯:
選取 View | Tool Windows | Gradle 以開啟 Gradle 工具視窗。
在 multiplatform-library-template | library | Tasks | build 中,執行 build 任務。

或者,在終端從
multiplatform-library-template根目錄執行以下指令:bash./gradlew build
您可以在 Build 工具視窗中看到成功的輸出。
將您的程式庫發佈到本機 Maven 存儲庫
您的多平台程式庫已準備好在本地發佈,以便您可以在同一部電腦上的其他專案中使用它。
要發佈您的程式庫,請按如下方式使用 maven-publish Gradle 外掛程式:
在
library/build.gradle.kts檔案中,找到plugins { }區塊並套用maven-publish外掛程式:kotlinplugins { // ... // 新增以下行: id("maven-publish") }找到
mavenPublishing {}區塊,並註解掉signAllPublications()呼叫,以表示該發佈僅限本機:kotlinmavenPublishing { // ... // 註解掉以下呼叫: // signAllPublications() }點擊出現在組建檔案中的 Sync Gradle Changes 圖示 (
) 來同步 Gradle 檔案。或者,點擊 Gradle 工具視窗上的重新整理按鈕。在 Gradle 工具視窗中,前往 multiplatform-library-template | Tasks | publishing 並執行 publishToMavenLocal Gradle 任務。

或者,在終端從
multiplatform-library-template根目錄執行以下指令:bash./gradlew publishToMavenLocal
您的程式庫已發佈到本機 Maven 存儲庫。
要找到您發佈的產物,請使用您的檔案管理員或終端,並導覽至 ~\.m2\repository\io\github\kotlin\library\1.0.0\ 目錄。
將您的程式庫作為相依性新增至另一個專案中
將多平台程式庫發佈到本機 Maven 存儲庫後,您就可以在同一部電腦上的其他 Kotlin 專案中使用它。
在您取用端專案的 settings.gradle.kts 檔案中,新增從本機存儲庫尋找套件的選項:
dependencyResolutionManagement {
repositories {
// ...
mavenLocal()
}
}在模組的 build.gradle.kts 檔案中,新增對已發佈程式庫的相依性。如果您要將其新增至另一個多平台專案,可以將其新增至共享或平台特定的原始碼集:
kotlin {
//...
sourceSets {
// 針對所有平台
commonMain.dependencies {
implementation("io.github.kotlin:library:1.0.0")
}
// 或針對特定平台
wasmJsMain.dependencies {
implementation("io.github.kotlin:library:1.0.0")
}
}
}implementation() 呼叫接受在您程式庫的 build.gradle.kts 檔案中指定的群組、名稱與版本。
同步取用專案並開始使用您的程式庫,例如:
import io.github.kotlin.fibonacci.generateFibi
val seq = generateFibi()
println(seq.elementAt(3))下一步
我們鼓勵您進一步探索多平台開發:
加入社群:
Compose Multiplatform GitHub:為 該存儲庫 加上星標 (star) 並做出貢獻
Kotlin Slack:獲取 邀請 並加入 #multiplatform 頻道
Stack Overflow:訂閱 "kotlin-multiplatform" 標籤
Kotlin YouTube 頻道:訂閱並觀看關於 Kotlin Multiplatform 的影片
