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
相关推荐
2301_78732849几秒前
44.Python(二)
android·python
峥嵘life1 小时前
Android16 EDLA 【CTS-V】Host-side 存在fail
android·linux·学习
_李小白1 小时前
【Android 性能分析工具】第二天:认识Perfetto
android
程序漫游人1 小时前
苹果IOS App Store加快审核进度
android·ios·软件工程·iphone
带带弟弟学爬虫__2 小时前
fancygo 解密演示
android·python·算法·网络爬虫
我命由我123452 小时前
Android 控件 - 悬浮常驻文本交互(IBinder 实现、BroadcastReceiver 实现)
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Android-Flutter2 小时前
android compose 左右滑动带指示器,HorizontalPager和HorizontalPagerIndicator使用
android·kotlin
csj503 小时前
安卓基础之《(13)—数据存储(3)存储卡的文件操作》
android
冬奇Lab3 小时前
Android车机代驾模式黑屏之谜:一次STR唤醒问题的深度剖析
android·性能优化·debug
2501_916008893 小时前
在 Windows 上使用开心上架(Appuploader)在 Windows 环境下创建与管理 iOS 证书
android·ios·小程序·https·uni-app·iphone·webview