Kotlin Multiplatform 具有用于配置库模块的 Gradle 插件。
com.android.kotlin.multiplatform.library
插件是官方替代方案,可取代之前使用常规 Android 库 Gradle 插件 (com.android.library
) 将 Android 目标平台添加到 KMP 库的方法。
之前的做法现已弃用,取而代之的是插件(也称为 Android-KMP 插件)。继续使用 KMP 的 com.android.library
插件将不再受 JetBrains 支持,并且无法受益于未来的更新和改进。
如需迁移到此插件,请参阅应用 Android-KMP 插件部分。
主要功能和区别
Android-KMP 插件专门针对 KMP 项目量身打造,在几个关键方面与标准 com.android.library
插件有所不同:
单变体架构:插件使用单个变体,不再支持产品变种和 build 类型,从而简化配置并提升 build 性能。
针对 KMP 进行了优化:该插件专为 KMP 库设计,侧重于共享 Kotlin 代码和互操作性,省略了对特定于 Android 的原生 build、AIDL 和 RenderScript 的支持。
默认停用的测试:默认情况下,单元测试和设备(插桩)测试均处于停用状态,以提高 build 速度。您可以根据需要启用它们。
没有顶级 Android 扩展程序:配置通过 Gradle KMP DSL 中的
androidLibrary
代码块处理,从而保持一致的 KMP 项目结构。没有顶级android
扩展块。选择启用 Java 编译:Java 编译默认处于停用状态。在
androidLibrary
块中使用withJava()
即可启用该功能。这样可以缩短不需要 Java 编译时的构建时间。
Android-KMP 库插件的优势
Android-KMP 插件可为 KMP 项目带来以下好处:
提升了构建性能和稳定性:它经过精心设计,可优化 KMP 项目中的构建速度并提高稳定性。它专注于 KMP 工作流,有助于提高构建流程的效率和可靠性。
增强的 IDE 集成:在处理 KMP Android 库时,可提供更好的代码补全、导航、调试和整体开发者体验。
简化的项目配置:该插件通过移除 build 变体等特定于 Android 的复杂性,简化了 KMP 项目的配置。这有助于生成更简洁且更易于维护的 build 文件。 之前,在 KMP 项目中使用
com.android.library
插件可能会创建令人困惑的源代码集名称,例如androidAndroidTest
。对于熟悉标准 KMP 项目结构的开发者来说,这种命名惯例不太直观。
将 Android-KMP 插件应用于现有模块
如需将 Android-KMP 插件应用于现有的 KMP 库模块,请按以下步骤操作:
在版本目录中声明插件。打开版本目录 TOML 文件(通常为
gradle/libs.versions.toml
),然后添加插件定义部分:# To check the version number of the latest Kotlin release, go to # https://kotlinlang.org/docs/releases.html [versions] androidGradlePlugin = "8.12.0" kotlin = "KOTLIN_VERSION" [plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }
在根 build 文件中应用插件声明。打开位于项目根目录中的
build.gradle.kts
文件。使用apply false
将插件别名添加到plugins
代码块。这样一来,插件别名便可供所有子项目使用,而无需将插件逻辑应用于根项目本身。Kotlin
// Root build.gradle.kts file plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Groovy
// Root build.gradle file plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
在 KMP 库模块 build 文件中应用插件。打开 KMP 库模块中的
build.gradle.kts
文件,并在plugins
块内的文件顶部应用插件:Kotlin
// Module-specific build.gradle.kts file plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Groovy
// Module-specific build.gradle file plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
配置 Android KMP 目标平台。配置 Kotlin Multiplatform 块 (
kotlin
) 以定义 Android 目标平台。在kotlin
块内,使用androidLibrary
指定 Android 目标平台:Kotlin
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.configure { jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } } sourceSets { androidMain { dependencies { // Add Android-specific dependencies here } } getByName("androidHostTest") { dependencies { } } getByName("androidDeviceTest") { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Groovy
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.options.jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } sourceSets { androidMain { dependencies { } } androidHostTest { dependencies { } } androidDeviceTest { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
应用更改。应用插件并配置
kotlin
块后,同步 Gradle 项目以应用更改。
为您推荐
- 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字
- 设置环境
- 向项目添加 KMP 模块