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多平台项目中,commonMainiosMainandroidMain这些名称是约定俗成的命名方式,用于标识不同平台的源码集。它们是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 小时前
搭建 MySQL MHA
android·数据库·mysql·adb
德育处主任Pro2 小时前
『Django』模型入门教程-操作MySQL
android·数据库·mysql·django·sqlite
Geeker555 小时前
如何从iPhone恢复错误删除的照片
android·数据库·macos·ios·pdf·手机·iphone
野老杂谈6 小时前
【面试系列】Kotlin 高频面试题及详细解答
面试·职场和发展·kotlin·编程语言
Calvin8808286 小时前
Kotlin设计模式:深入解析Facade模式
设计模式·kotlin·外观模式
我又来搬代码了6 小时前
【Android】【Compose】Compose里面的Row和Column的简单使用
android
分享者花花7 小时前
如何从华为恢复永久删除的视频?
android·华为·智能手机·word·手机·cocoa·iphone
张风捷特烈8 小时前
FlutterUnit & TolyUI | 布局游乐场
android·flutter
程序猿的玻璃心17 小时前
【Android源码】AOSP下载
android
sky_brian18 小时前
android studio 添加aar包
android·ide·android studio