MST

星途 面试题库

面试题:Kotlin多平台项目中如何实现共享代码模块

在Kotlin多平台项目开发中,阐述如何创建和配置共享代码模块,使其能在不同平台(如Android、iOS等)中复用。请说明关键的配置步骤以及共享代码模块的目录结构组织方式。
50.3万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

创建共享代码模块

  1. 使用Kotlin Multiplatform Project模板:在IDE(如IntelliJ IDEA或Android Studio)中创建新项目时,选择Kotlin Multiplatform Project模板。这样会自动生成一个基础的项目结构,包含共享代码模块和针对不同平台的特定模块。
  2. 手动配置Gradle:如果不是基于模板创建,在settings.gradle.kts文件中定义共享代码模块,例如:
include("shared")

在共享代码模块的build.gradle.kts文件中,应用kotlin-multiplatform插件:

plugins {
    kotlin("multiplatform")
}

配置共享代码模块

  1. 指定目标平台:在共享代码模块的build.gradle.kts文件中,配置要支持的目标平台,如:
kotlin {
    android()
    iosX64()
    iosArm64()
    iosSimulatorArm64()
    sourceSets {
        val commonMain by getting
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
        val androidMain by getting
        val androidTest by getting
        val iosX64Main by getting
        val iosArm64Main by getting
        val iosSimulatorArm64Main by getting
        val iosMain by creating {
            dependsOn(commonMain)
            iosX64Main.dependsOn(this)
            iosArm64Main.dependsOn(this)
            iosSimulatorArm64Main.dependsOn(this)
        }
        val iosTest by creating {
            dependsOn(commonTest)
            val iosX64Test by getting
            val iosArm64Test by getting
            val iosSimulatorArm64Test by getting
            iosX64Test.dependsOn(this)
            iosArm64Test.dependsOn(this)
            iosSimulatorArm64Test.dependsOn(this)
        }
    }
}
  1. 添加依赖:在commonMainandroidMainiosMainsourceSets中添加所需的依赖。例如,在commonMain中添加Ktor库:
kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("io.ktor:ktor-client-core:2.3.3")
            }
        }
    }
}

目录结构组织方式

  1. src目录:共享代码模块的根目录下有一个src目录,里面包含不同平台相关的sourceSets目录。
    • commonMain:存放通用的共享代码,可被所有目标平台使用。例如,业务逻辑、数据模型等。
    • commonTest:存放通用的测试代码,用于测试共享代码。
    • androidMain:存放Android平台特定的代码,如Android特定的UI逻辑、权限处理等。该目录下的代码可以依赖commonMain的代码。
    • iosMain:iOS平台通用代码目录,它的子目录iosX64MainiosArm64MainiosSimulatorArm64Main分别对应不同的iOS架构。iosMain可以依赖commonMain,其他iOS架构特定目录依赖iosMain
    • androidTest:Android平台特定的测试代码。
    • iosTest:iOS平台通用的测试代码,其子目录对应不同架构的测试代码。