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
相关推荐
LSL666_1 小时前
5 Repository 层接口
android·运维·elasticsearch·jenkins·repository
alexhilton4 小时前
在Jetpack Compose中创建CRT屏幕效果
android·kotlin·android jetpack
2501_940094026 小时前
emu系列模拟器最新汉化版 安卓版 怀旧游戏模拟器全集附可运行游戏ROM
android·游戏·安卓·模拟器
下位子6 小时前
『OpenGL学习滤镜相机』- Day9: CameraX 基础集成
android·opengl
参宿四南河三8 小时前
Android Compose SideEffect(副作用)实例加倍详解
android·app
火柴就是我9 小时前
mmkv的 mmap 的理解
android
没有了遇见9 小时前
Android之直播宽高比和相机宽高比不支持后动态获取所支持的宽高比
android
shenshizhong10 小时前
揭开 kotlin 中协程的神秘面纱
android·kotlin
vivo高启强10 小时前
如何简单 hack agp 执行过程中的某个类
android
沐怡旸10 小时前
【底层机制】 Android ION内存分配器深度解析
android·面试