MST

星途 面试题库

面试题:Kotlin多平台项目搭建之中等难度题

在Kotlin多平台项目中,如何配置Gradle以共享通用代码模块到不同平台(如JVM、Android和iOS),请简述关键配置步骤。
47.9万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
  1. 创建通用模块
    • 在项目根目录下,使用kotlin-multiplatform插件创建一个通用模块,例如:
    plugins {
        kotlin("multiplatform")
    }
    
  2. 配置源集
    • 在通用模块的src目录下,创建commonMaincommonTest源集。commonMain用于存放通用代码,commonTest用于存放通用测试代码。
    • 例如:
    kotlin {
        sourceSets {
            val commonMain by getting {
                dependencies {
                    // 在这里添加通用依赖
                }
            }
            val commonTest by getting {
                dependencies {
                    implementation(kotlin("test"))
                }
            }
        }
    }
    
  3. 添加目标平台
    • JVM平台
      • kotlin块中添加jvm目标,例如:
      kotlin {
          jvm {
              compilations.all {
                  kotlinOptions.jvmTarget = "11"
              }
              withJava()
          }
          sourceSets {
              val jvmMain by getting {
                  dependsOn(commonMain)
              }
              val jvmTest by getting {
                  dependsOn(commonTest)
              }
          }
      }
      
    • Android平台
      • 首先确保项目根目录的build.gradle中包含google()mavenCentral()仓库。
      • kotlin块中添加android目标,例如:
      kotlin {
          android {
              publishLibraryVariants("release")
          }
          sourceSets {
              val androidMain by getting {
                  dependsOn(commonMain)
              }
              val androidTest by getting {
                  dependsOn(commonTest)
              }
          }
      }
      
    • iOS平台
      • kotlin块中添加iosX64iosArm64iosSimulatorArm64目标(用于不同的iOS架构),例如:
      kotlin {
          iosX64()
          iosArm64()
          iosSimulatorArm64()
          val iosMain by creating {
              dependsOn(commonMain)
          }
          val iosTest by creating {
              dependsOn(commonTest)
          }
      }
      
  4. 发布通用模块
    • 如果需要将通用模块发布到Maven仓库等,配置相关的发布插件和参数,例如:
    plugins {
        `maven-publish`
    }
    publishing {
        publications {
            val common by creating(MavenPublication::class) {
                groupId = "your.group.id"
                artifactId = "your - artifact - id"
                version = "1.0.0"
                from(components["kotlin"])
            }
        }
    }