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
相关推荐
SRC_BLUE_171 小时前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
无尽的大道4 小时前
Android打包流程图
android
镭封6 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4876 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio
邹阿涛涛涛涛涛涛6 小时前
月之暗面招 Android 开发,大家快来投简历呀
android·人工智能·aigc
IAM四十二6 小时前
Jetpack Compose State 你用对了吗?
android·android jetpack·composer
奶茶喵喵叫7 小时前
Android开发中的隐藏控件技巧
android
Winston Wood8 小时前
Android中Activity启动的模式
android
众乐认证8 小时前
Android Auto 不再用于旧手机
android·google·智能手机·android auto
三杯温开水9 小时前
新的服务器Centos7.6 安卓基础的环境配置(新服务器可直接粘贴使用配置)
android·运维·服务器