发布于 2026-01-06 2 阅读
0

Creating your first Kotlin Multiplatform library Plan Setting up the environment Creating a multiplatform library Publishing your library to the local Maven repository

创建你的第一个 Kotlin 多平台库

计划

建立环境

创建多平台库

将您的库发布到本地 Maven 仓库

Kotlin 多平台技术正变得越来越流行,其生态系统也在快速发展。您是否曾想过创建一个多平台库?现在正是着手创建的好时机,因为社区中有很多开放的需求,您的参与将不胜感激!

当然,作为库的作者,编写高质量的代码和提供实用的 API 应该是你的首要任务。但如果你是第一次发布库,则需要克服一些障碍。例如,由于 Bintray 将于 2021 年 5 月关闭,你必须处理 Maven Central 的注册流程,并配置你的库以便发布到 Maven Central。
本文将帮助你完成多平台库的发布流程,让你少操一份心,从而可以专注于库本身的开发。🧘🏼‍♀️

计划

在本系列的第一部分中,我们将创建一个多平台库,它使用带有 expect/actual 机制的平台 API,为用户提供简洁易用的 API,并支持三个目标平台:原生平台(iOS 或主机平台,取决于您的选择)、JVMJavaScript。这样的库可以用于任何 KMM(Kotlin 多平台移动开发)或其他Kotlin 多平台项目中。

如果您已有想要发布的项目,可以直接跳到本部分的最后一步——将库发布到本地 Maven 仓库,以确保一切正常运行。在下一部分中,我们还将探索已发布的构件,以了解多平台发布格式。最后,在本系列的最后一部分中,我们将注册一个 Sonatype 帐户,这是将您的库发布到 MavenCentral 所必需的。

🤔如果你对我们不断抛出的新 Maven 术语感到有点困惑——没关系!这里有一个很有用的 Twitter 小技巧,或许能帮到你!

接下来,我们将设置项目发布机制,以便您只需调用一个 Gradle 任务即可配置、签名和发布库。最后,我们将把您的库发布到 MavenCentral,使其可供全球开发者使用!

有很多事情要做,让我们开始吧!

ℹ️ 免责声明:本教程基于官方文档和其他现有文章。它们都提供了实用且最新的说明,但并未完全涵盖发布过程中所有复杂曲折的步骤。在这里,您将找到最相关的现有内容和补充信息,应该可以解答您的所有疑问。

建立环境

  • 如果您希望您的库支持 iOS 或 macOS 目标平台,则需要使用 macOS 来构建原生产品。但除此之外,您可以在任何操作系统上构建您的库。
  • 我将演示如何使用 IntelliJ IDEA(点击此处下载最新版本)和最新的 Kotlin 插件,但您也可以使用Android Studio。IntelliJ IDEA 自带一些实用的 Kotlin 向导,包括一个多平台库向导。
  • 为了创建用于签署库所需的 GPG 密钥,我们将使用 GPG 命令行工具。您可以手动下载并安装它,也可以使用软件包管理工具(例如 brew)进行安装:brew install gpg

好了,介绍和准备工作就到此为止——让我们开始吧!

创建多平台库

要发布内容,首先需要构建一些东西!如果您还没有库,但想获得发布库的实践经验,那么让我们从创建一个示例库开始,遵循官方教程。该教程详细介绍了从零开始开发多平台库的过程。
在本教程中,您将学习如何为 JVM、JS 和 Native 平台创建多平台库,为所有平台编写通用测试,并将库发布到本地 Maven 仓库。该库会将原始数据(字符串和字节数组)转换为 Base64 格式。为了在不同平台上实现 Base64 格式的转换,您将使用 JVM 和 JS 的平台功能,并为 Native 平台编写自己的实现。

支持 iOS 目标平台

本教程演示如何构建一个支持与宿主机目标平台相同的原生目标平台的库(例如,如果您在 macOS 上开发,则生成的原生产品将适用于 macOS)。不过,您可以轻松配置支持的目标平台。例如,您可以添加 iOS 目标平台,使您的库适用于 KMM 项目。有两种方法可以实现这一点:

  • 如果您不需要支持宿主目标平台,而只需要 iOS 平台,则可以将项目向导生成的依赖于宿主平台的原生目标声明替换为ios()目标声明:

    // Before
    kotlin {
        jvm {
           // …
        }
        js(IR) {
           // …
        }
        val hostOs = System.getProperty("os.name")
        val isMingwX64 = hostOs.startsWith("Windows")
        val nativeTarget = when {
            hostOs == "Mac OS X" -> macosX64("native")
            hostOs == "Linux" -> linuxX64("native")
            isMingwX64 -> mingwX64("native")
            else -> throw GradleException("Host OS is not supported in Kotlin/Native.")
        }
    }
    
    // After
    kotlin {
        jvm {
          // …
        }
        js(IR) {
          // …
        }
        ios()
    }
    

    不要忘记根据目标名称重命名源集声明和文件夹名称(在我们的例子中是nativeMain-> iosMain)。

  • 如果您希望同时支持主机和 iOS 原生目标并在它们之间共享代码,则应手动配置分层项目结构

支持 Android 目标平台

本教程使用jvm()目标声明来实现对 JVM 平台的支持。生成的工件可用于面向任何 JVM 平台(包括 Android)的多平台项目。如果您希望可以直接在 Android 项目中使用您的库,或者需要使用 Android SDK 来实现特定于平台的功能(例如,处理存储在设备上的文件),请改用android()目标声明。要使其生效,您需要连接Gradle 插件,并在 `<gradle-plugin-name> ` 的配置块android-library中提供特定于 Android 的信息androidbuild.gradle.kts

android {
    compileSdkVersion($compileSdkVersion) 
 sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") // Create AndroidManifest.xml and provide path to it
    defaultConfig {
        minSdkVersion($minSDKVersiom)
        targetSdkVersion($targetSDKVersion)
    }
}
Enter fullscreen mode Exit fullscreen mode

此外,您还需要在 Android 目标中指定变体名称,因为默认情况下不会发布 Android 库的任何工件(有关详细信息,请参阅官方文档)。

kotlin {
    android {
        publishLibraryVariants("release", "debug")
    }
}
Enter fullscreen mode Exit fullscreen mode

完成“创建并发布多平台库”教程,并根据您的需求配置目标平台。以下是支持 JVM、JS 和 iOS 的示例 Base64 库的源代码:

GitHub 标志 KaterinaPetrova / mpp-sample-lib

Kotlin 多平台库示例(jvm + ios + js)

现在我们进入下一阶段,发布我们的图书馆!

将您的库发布到本地 Maven 仓库

与开发常规多平台模块的唯一区别在于使用了maven-publish Gradle 插件。与 maven-publish 配合使用时maven-publish,Kotlin 插件会自动为每个可在当前主机上构建的目标创建发布(文档)。使用插件提供的相应 Gradle 任务maven-publish,您可以将这些发布部署到远程或本地仓库。

如果您已经有想要发布的代码,那么您只需要申请maven-publish并提供库组和版本信息(请参阅教程的最后一步)。

plugins {
    kotlin("multiplatform") version "1.4.31"
    id("maven-publish")
}

group = "org.jetbrains.base64"
version = "1.0.0"
Enter fullscreen mode Exit fullscreen mode

运行此命令./gradlew publishToMavenLocal会将所有必需的构件上传到本地 Maven 仓库,该仓库位于本地计算机上的一个目录中。您可以在此目录中查看结果(通常位于 ` /Users/<user_name>/.m2<path>` 目录下),或者将您的库连接到示例多平台项目(例如 KMM 项目)来查看结果。KMM 项目可以使用Android Studio 的 KMM 插件项目向导轻松创建。在共享模块中添加对本地已发布库的依赖项build.gradle.kts

repositories {
    mavenLocal() 
}

kotlin {
    android()
    ios ()

    sourceSets {
        val commonMain by getting {
            dependencies {
              implementation("io.github.katerinapetrova:mpp-sample-lib:1.0.0")
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

探索我们新库结构的最佳方式是通过dependency项目树中的相应部分:
多平台库结构

哇!😱 这里面内容真丰富,我知道你们肯定很好奇!所以在正式发布之前,我们先花点时间了解一下图书馆的结构——敬请期待本系列的下一部分👀

文章来源:https://dev.to/kotlin/how-to-build-and-publish-a-kotlin-multiplatform-library-creating-your-first-library-1bp8