kotlin 跨平台 粗略步骤

启用多平台支持

  1. 修改项目的build.gradle.kts :

    首先,需要在build.gradle.kts文件中添加多平台插件并启用实验性功能。

    kotlin 复制代码
    plugins {
        kotlin("multiplatform") version "1.8.0" // 请使用当前最新版本
    }
    
    kotlin {
        // 设置多平台支持
        jvm() // 添加 JVM 平台支持
        ios() // 添加 iOS 平台支持
        android() // 添加 Android 平台支持
    
        // 启用多平台项目的实验性功能
        experimental {
            // 启用多平台项目支持
            multiPlatformProjects()
        }
    }
  2. 创建共享代码模块 :
    public actual typealias 是 Kotlin 语言中的一个关键字组合,通常出现在 Kotlin Multiplatform 项目中。它用于在不同的平台(如 JVM、JavaScript、Native)上定义公共类型别名。这些类型别名允许跨平台共享代码,同时在每个平台上有特定的实现。

  • public: 这是一个可见性修饰符,表示该类型别名可以在任何地方访问。

  • actual: 这个关键字用于声明平台特定的实际实现。它与 expect 关键字配对使用,后者用于声明平台无关的预期声明。

  • typealias: 这是 Kotlin 中用于创建类型别名的关键字。

    在项目中创建一个共享代码模块,例如shared。这个模块会包含使用expect关键字定义的共享代码。

    kotlin 复制代码
    // 在 shared/src/commonMain/kotlin 目录下创建代码文件
    // shared/src/commonMain/kotlin/Greeting.kt
    package com.example.shared
    
    // 共享代码块:共享代码可以在不同的平台上复用
    expect fun platformName(): String
    
    fun greeting(): String {
        return "Hello, ${platformName()}!"
    }
  1. 提供平台特定实现 :

    在相应的平台模块中提供platformName函数的具体实现。

    iOS平台实现:

    kotlin 复制代码
    // shared/src/iosMain/kotlin/Greeting.kt
    package com.example.shared
    
    actual fun platformName(): String {
        return "iOS"
    }

    Android平台实现:

    kotlin 复制代码
    // shared/src/androidMain/kotlin/Greeting.kt
    package com.example.shared
    
    actual fun platformName(): String {
        return "Android"
    }
  2. 运行项目 :

    确保你在main函数中调用了greeting函数,然后运行项目。输出会根据平台不同而有所区别。

    kotlin 复制代码
    // shared/src/commonMain/kotlin/Main.kt
    package com.example.shared
    
    fun main() {
        println(greeting())  // 根据平台输出 "Hello, iOS!" 或 "Hello, Android!"
    }

项目结构:

复制代码
.
├── build.gradle.kts
├── shared
│   ├── src
│   │   ├── commonMain
│   │   │   └── kotlin
│   │   │       └── Greeting.kt
│   │   ├── iosMain
│   │   │   └── kotlin
│   │   │       └── Greeting.kt
│   │   └── androidMain
│   │       └── kotlin
│   │           └── Greeting.kt
└── settings.gradle.kts

在Kotlin多平台项目中,commonMain、iosMain、androidMain这些名称是约定俗成的命名方式,用于标识不同平台的源码集。它们是Kotlin官方推荐的默认命名方案,但实际上可以根据需要进行自定义。

1. 默认源码集命名

默认情况下,Kotlin多平台项目使用以下源码集命名:

  • commonMain: 存放所有平台共享的代码。
  • iosMain: 存放iOS平台特定的代码。
  • androidMain: 存放Android平台特定的代码。

这些命名在构建工具中有特定的意义,Kotlin编译器会根据这些名称识别和处理对应平台的代码。

2. 自定义源码集名称

如果需要,可以自定义这些源码集的名称,但需要在项目的build.gradle.kts文件中明确指定。

自定义示例

假设想将iosMain重命名为iosSource,可以按以下步骤进行:

kotlin 复制代码
kotlin {
    jvm() // JVM支持
    ios("iosSource") // 自定义iOS源码集名称为 iosSource
    android() // Android支持

    sourceSets {
        val commonMain by getting {
            // 配置 commonMain 源码集
        }
        val iosSource by getting {
            // 配置自定义的 iosSource 源码集
        }
        val androidMain by getting {
            // 配置 androidMain 源码集
        }
    }
}

项目结构也需要相应调整:

复制代码
.
├── build.gradle.kts
├── shared
│   ├── src
│   │   ├── commonMain
│   │   │   └── kotlin
│   │   │       └── Greeting.kt
│   │   ├── iosSource // 自定义的iOS源码集目录
│   │   │   └── kotlin
│   │   │       └── Greeting.kt
│   │   └── androidMain
│   │       └── kotlin
│   │           └── Greeting.kt
└── settings.gradle.kts
相关推荐
拥小抱1 小时前
Compose 知识点
android
文章永久免费只为良心1 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_86892 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Goway_Hui4 小时前
【KMP for OpenHarmony】-- 在鸿蒙工程中使用 Apollo-Kotlin
华为·kotlin·harmonyos
Patrick在香港4 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
海雅达手持终端PDA5 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
释厄6235 小时前
AI 军备竞赛悖论——为 AI 卖游戏但 AI 需要游戏母场景
人工智能·游戏·kotlin
booboosui6 小时前
删掉一个住在本机的 agent:8 处要清,顺序不能反
android
hcgeng7 小时前
Android获取崩溃日志
android