Trình bổ trợ Gradle com.android.kotlin.multiplatform.library là công cụ được hỗ trợ chính thức để thêm mục tiêu Android vào mô-đun thư viện Kotlin Multiplatform (KMP). Việc này giúp đơn giản hoá cấu hình dự án, cải thiện hiệu suất bản dựng và mang đến khả năng tích hợp tốt hơn với Android Studio.
Việc sử dụng trình bổ trợ com.android.library để phát triển KMP phụ thuộc vào các API của trình bổ trợ Android cho Gradle đã không còn được dùng và yêu cầu chọn sử dụng trong trình bổ trợ Android cho Gradle 9.0 trở lên (Quý 4 năm 2025). Chúng tôi dự kiến sẽ xoá các API này trong trình bổ trợ Android cho Gradle 10.0 (nửa cuối năm 2026).
Để áp dụng trình bổ trợ này, hãy tham khảo phần Áp dụng trình bổ trợ Android-KMP. Nếu bạn cần di chuyển từ các API cũ, hãy xem Hướng dẫn di chuyển.
Các tính năng và điểm khác biệt chính
Trình bổ trợ Android-KMP được thiết kế riêng cho các dự án KMP và khác với trình bổ trợ com.android.library tiêu chuẩn ở một số khía cạnh chính:
Cấu trúc một biến thể: Trình bổ trợ này sử dụng một biến thể duy nhất, loại bỏ việc hỗ trợ các phiên bản sản phẩm và loại bản dựng, giúp đơn giản hoá cấu hình và nâng cao hiệu suất bản dựng.
Được tối ưu hoá cho KMP: Trình bổ trợ này được thiết kế cho các thư viện KMP, tập trung vào mã Kotlin dùng chung và khả năng tương tác, bỏ qua việc hỗ trợ các bản dựng gốc dành riêng cho Android, AIDL và RenderScript.
Kiểm thử bị tắt theo mặc định: Cả kiểm thử đơn vị và kiểm thử thiết bị (đo lường) đều bị tắt theo mặc định để tăng tốc độ bản dựng. Bạn có thể bật các tính năng này nếu cần.
Không có tiện ích Android cấp cao nhất: Cấu hình được xử lý bằng khối
androidLibrarytrong DSL KMP của Gradle, duy trì cấu trúc dự án KMP nhất quán. Không có khối tiện íchandroidcấp cao nhất.Chọn tham gia biên dịch Java: Theo mặc định, tính năng biên dịch Java sẽ bị tắt. Hãy sử dụng
withJava()trong khốiandroidLibraryđể bật tính năng này. Điều này giúp cải thiện thời gian tạo bản dựng khi không cần biên dịch Java.
Lợi ích của trình bổ trợ thư viện Android-KMP
Trình bổ trợ Android-KMP mang lại những lợi ích sau cho các dự án KMP:
Cải thiện hiệu suất và độ ổn định của bản dựng: Được thiết kế để tối ưu hoá tốc độ bản dựng và tăng cường độ ổn định trong các dự án KMP. Việc tập trung vào quy trình KMP góp phần tạo nên quy trình xây dựng hiệu quả và đáng tin cậy hơn.
Tích hợp IDE nâng cao: Tính năng này giúp hoàn thành mã, điều hướng, gỡ lỗi và mang lại trải nghiệm tổng thể tốt hơn cho nhà phát triển khi làm việc với các thư viện Android KMP.
Đơn giản hoá cấu hình dự án: Trình bổ trợ này đơn giản hoá cấu hình cho các dự án KMP bằng cách loại bỏ các điểm phức tạp dành riêng cho Android, chẳng hạn như các biến thể bản dựng. Điều này giúp các tệp bản dựng trở nên gọn gàng và dễ duy trì hơn. Trước đây, việc sử dụng trình bổ trợ
com.android.librarytrong dự án KMP có thể tạo ra các tên tập hợp nguồn gây nhầm lẫn, chẳng hạn nhưandroidAndroidTest. Quy ước đặt tên này ít trực quan hơn đối với những nhà phát triển đã quen với cấu trúc dự án KMP tiêu chuẩn.
Điều kiện tiên quyết
Để sử dụng trình bổ trợ com.android.kotlin.multiplatform.library, dự án của bạn phải được định cấu hình với các phiên bản tối thiểu sau đây trở lên:
- Trình bổ trợ Android cho Gradle (AGP): 8.10.0
- Trình bổ trợ Kotlin cho Gradle (KGP): 2.0.0
Áp dụng trình bổ trợ Android-KMP cho một mô-đun hiện có
Để áp dụng trình bổ trợ Android-KMP cho một mô-đun thư viện KMP hiện có, hãy làm theo các bước sau:
Khai báo trình bổ trợ trong danh mục phiên bản. Mở tệp TOML của danh mục phiên bản (thường là
gradle/libs.versions.toml) rồi thêm phần định nghĩa trình bổ trợ:# To check the version number of the latest Kotlin release, go to # https://kotlinlang.org/docs/releases.html [versions] androidGradlePlugin = "8.13.2" 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" }Áp dụng khai báo trình bổ trợ trong tệp bản dựng gốc. Mở tệp
build.gradle.ktsnằm trong thư mục gốc của dự án. Thêm các tên thay thế của trình bổ trợ vào khốipluginsbằng cách sử dụngapply false. Điều này giúp tất cả các dự án con đều có thể sử dụng các bí danh trình bổ trợ mà không cần áp dụng logic trình bổ trợ cho chính dự án gốc.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 }
Áp dụng trình bổ trợ trong tệp bản dựng mô-đun thư viện KMP. Mở tệp
build.gradle.ktstrong mô-đun thư viện KMP và áp dụng trình bổ trợ ở đầu tệp trong khốiplugins: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) }
Định cấu hình mục tiêu KMP của Android. Định cấu hình khối Đa nền tảng Kotlin (
kotlin) để xác định mục tiêu Android. Trong khốikotlin, hãy chỉ định mục tiêu Android bằng cách sử dụngandroidLibrary:Kotlin
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } 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" } 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.) ... }
Áp dụng thay đổi. Sau khi áp dụng trình bổ trợ và định cấu hình khối
kotlin, hãy đồng bộ hoá dự án Gradle để áp dụng các thay đổi.
Di chuyển từ trình bổ trợ cũ
Hướng dẫn này giúp bạn di chuyển từ trình bổ trợ com.android.library cũ sang trình bổ trợ com.android.kotlin.multiplatform.library.
1. Khai báo phần phụ thuộc
Một tác vụ thường gặp là khai báo các phần phụ thuộc cho các nhóm tài nguyên dành riêng cho Android. Không giống như khối dependencies chung được dùng trước đây, trình bổ trợ mới yêu cầu bạn phải đặt rõ ràng những khối này trong khối sourceSets.
Android-KMP
Trình bổ trợ mới này giúp cấu trúc rõ ràng hơn bằng cách nhóm các phần phụ thuộc Android trong nhóm tài nguyên androidMain. Ngoài nhóm tài nguyên chính, còn có 2 nhóm tài nguyên kiểm thử được tạo theo yêu cầu: androidDeviceTest và androidHostTest (hãy xem phần định cấu hình kiểm thử trên thiết bị và máy chủ lưu trữ để biết thêm thông tin).
// build.gradle.kts
kotlin {
androidLibrary {}
//... other targets
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
}
// Dependencies are now scoped to the specific Android source set
androidMain.dependencies {
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.11.0")
}
}
}
Các nhóm tài nguyên có các trình biên dịch Kotlin tương ứng có tên là main, deviceTest và hostTest. Bạn có thể định cấu hình các tập hợp nguồn và quá trình biên dịch trong tập lệnh bản dựng như sau:
// build.gradle.kts
kotlin {
androidLibrary {
compilations.getByName("deviceTest") {
kotlinOptions.languageVersion = "2.0"
}
}
}
Trình bổ trợ cũ
Với trình bổ trợ cũ, bạn có thể khai báo các phần phụ thuộc dành riêng cho Android trong khối phần phụ thuộc cấp cao nhất. Đôi khi, điều này có thể gây nhầm lẫn trong mô-đun đa nền tảng.
// build.gradle.kts
kotlin {
androidTarget()
//... other targets
}
// Dependencies for all source sets were often mixed in one block
dependencies {
// Common dependencies
commonMainImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
// Android-specific dependencies
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.11.0")
}
2. Bật tài nguyên Android
Theo mặc định, trình bổ trợ mới không bật tính năng hỗ trợ Tài nguyên Android (thư mục res) để tối ưu hoá hiệu suất bản dựng. Bạn phải chọn sử dụng các tính năng này. Thay đổi này giúp đảm bảo rằng những dự án không yêu cầu tài nguyên dành riêng cho Android sẽ không bị ảnh hưởng bởi chi phí xây dựng liên quan.
Android-KMP
Bạn phải bật rõ ràng quy trình xử lý tài nguyên Android. Các tài nguyên phải được đặt trong src/androidMain/res.
// build.gradle.kts
kotlin {
androidLibrary {
// ...
// Enable Android resource processing
androidResources {
enable = true
}
}
}
// Project Structure
// └── src
// └── androidMain
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
Trình bổ trợ cũ
Tính năng xử lý tài nguyên được bật theo mặc định. Bạn có thể thêm ngay một thư mục res vào src/main và bắt đầu thêm các đối tượng có thể vẽ, giá trị XML, v.v.
// build.gradle.kts
android {
namespace = "com.example.library"
compileSdk = 34
// No extra configuration was needed to enable resources.
}
// Project Structure
// └── src
// └── main
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
3. Định cấu hình các kiểm thử trên máy chủ lưu trữ và thiết bị
Một thay đổi đáng kể trong trình bổ trợ mới là các kiểm thử phía máy chủ lưu trữ (đơn vị) và phía thiết bị (được đo lường) trên Android sẽ bị tắt theo mặc định. Bạn phải chọn tạo các nhóm tài nguyên kiểm thử và cấu hình một cách rõ ràng, trong khi trình bổ trợ cũ sẽ tự động tạo các nhóm tài nguyên kiểm thử và cấu hình.
Mô hình chọn sử dụng này giúp xác minh rằng dự án của bạn vẫn tinh gọn và chỉ bao gồm logic bản dựng cũng như các nhóm tài nguyên mà bạn đang sử dụng.
Android-KMP
Trong trình bổ trợ mới, bạn bật và định cấu hình các kiểm thử bên trong khối kotlin.androidLibrary. Điều này giúp việc thiết lập trở nên rõ ràng hơn và tránh tạo các thành phần kiểm thử không dùng đến. Nhóm tài nguyên test sẽ trở thành androidHostTest và androidTest sẽ trở thành androidDeviceTest.
// build.gradle.kts
kotlin {
androidLibrary {
// ...
// Opt-in to enable and configure host-side (unit) tests
withHostTest {
isIncludeAndroidResources = true
}
// Opt-in to enable and configure device-side (instrumented) tests
withDeviceTest {
instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
execution = "HOST"
}
}
}
// Project Structure (After Opt-in)
// └── src
// ├── androidHostTest
// └── androidDeviceTest
Trình bổ trợ cũ
Với trình bổ trợ com.android.library, theo mặc định, các nhóm tài nguyên test và androidTest sẽ được tạo. Bạn sẽ định cấu hình hành vi của các thành phần này bên trong khối android, thường là bằng cách dùng DSL testOptions.
// build.gradle.kts
android {
defaultConfig {
// Runner was configured in defaultConfig
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
// Configure unit tests (for the 'test' source set)
unitTests.isIncludeAndroidResources = true
// Configure device tests (for the 'androidTest' source set)
execution = "HOST"
}
}
// Project Structure (Defaults)
// └── src
// ├── test
// └── androidTest
4. Bật tính năng biên dịch nguồn Java
Nếu thư viện KMP của bạn cần biên dịch các nguồn Java cho mục tiêu Android, bạn phải bật rõ ràng chức năng này bằng trình bổ trợ mới. Xin lưu ý rằng thao tác này cho phép biên dịch các tệp Java nằm ngay trong dự án của bạn, chứ không phải cho các phần phụ thuộc của dự án. Phương thức đặt phiên bản mục tiêu JVM của trình biên dịch Java và Kotlin cũng thay đổi.
Android-KMP
Bạn phải chọn biên dịch Java bằng cách gọi withJava(). Mục tiêu JVM hiện được định cấu hình ngay bên trong khối kotlin { androidLibrary {} } để có một chế độ thiết lập hợp nhất hơn. Việc thiết lập jvmTarget ở đây sẽ áp dụng cho cả quá trình biên dịch Kotlin và Java cho mục tiêu Android.
// build.gradle.kts
kotlin {
androidLibrary {
// Opt-in to enable Java source compilation
withJava()
// Configure the JVM target for both Kotlin and Java sources
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
}
}
// ...
}
// Project Structure:
// └── src
// └── androidMain
// ├── kotlin
// │ └── com/example/MyKotlinClass.kt
// └── java
// └── com.example/MyJavaClass.java
Trình bổ trợ cũ
Chế độ biên dịch Java được bật theo mặc định. Mục tiêu JVM cho cả nguồn Java và Kotlin được đặt trong khối android bằng compileOptions.
// build.gradle.kts
android {
// ...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
kotlin {
androidTarget {
compilations.all {
kotlinOptions.jvmTarget = "1.8"
}
}
}
5. Tương tác với các biến thể bản dựng bằng cách sử dụng androidComponents
Tiện ích androidComponents vẫn có sẵn để tương tác với các cấu phần phần mềm bản dựng theo phương thức lập trình. Mặc dù phần lớn API Variant vẫn giữ nguyên, nhưng giao diện AndroidKotlinMultiplatformVariant mới sẽ bị hạn chế hơn vì trình bổ trợ chỉ tạo ra một biến thể duy nhất.
Do đó, các thuộc tính liên quan đến loại bản dựng và phiên bản sản phẩm sẽ không còn có sẵn trên đối tượng biến thể nữa.
Android-KMP
Khối onVariants hiện lặp lại trên một biến thể duy nhất. Bạn vẫn có thể truy cập vào các thuộc tính chung như name và artifacts, nhưng không thể truy cập vào các thuộc tính dành riêng cho loại bản dựng.
// build.gradle.kts
androidComponents {
onVariants { variant ->
val artifacts = variant.artifacts
}
}
Trình bổ trợ cũ
Với nhiều biến thể, bạn có thể truy cập vào các thuộc tính dành riêng cho loại bản dựng để định cấu hình các tác vụ.
// build.gradle.kts
androidComponents {
onVariants(selector().withBuildType("release")) { variant ->
// ...
}
}
6. Chọn các biến thể của phần phụ thuộc thư viện Android
Thư viện KMP của bạn tạo ra một biến thể duy nhất cho Android. Tuy nhiên, bạn có thể phụ thuộc vào một thư viện Android tiêu chuẩn (com.android.library) có nhiều biến thể (ví dụ: free/paid phiên bản sản phẩm). Kiểm soát cách dự án của bạn chọn một biến thể từ phần phụ thuộc đó là một yêu cầu phổ biến.
Android-KMP
Trình bổ trợ mới sẽ tập trung và làm rõ logic này trong khối kotlin.androidLibrary.localDependencySelection. Điều này giúp bạn biết rõ hơn những biến thể của các phần phụ thuộc bên ngoài sẽ được chọn cho thư viện KMP một biến thể.
// build.gradle.kts
kotlin {
androidLibrary {
localDependencySelection {
// For dependencies with multiple build types, select 'debug' first, and 'release' in case 'debug' is missing
selectBuildTypeFrom.set(listOf("debug", "release"))
// For dependencies with a 'type' flavor dimension...
productFlavorDimension("type") {
// ...select the 'typeone' flavor.
selectFrom.set(listOf("typeone"))
}
}
}
}
Trình bổ trợ cũ
Bạn đã định cấu hình các chiến lược chọn phần phụ thuộc bên trong các khối buildTypes and
productFlavors. Điều này thường liên quan đến việc sử dụng missingDimensionStrategy để cung cấp một phiên bản mặc định cho một nhóm phiên bản mà thư viện của bạn không có, hoặc matchingFallbacks trong một phiên bản cụ thể để xác định thứ tự tìm kiếm.
Hãy tham khảo bài viết Giải quyết lỗi so khớp để biết thêm thông tin chi tiết về cách sử dụng API.
7. Các phần phụ thuộc của bản xem trước trong Compose
Thông thường, chúng ta muốn có các thư viện cụ thể được giới hạn trong môi trường phát triển cục bộ để ngăn các công cụ nội bộ rò rỉ vào cấu phần phần mềm đã xuất bản cuối cùng. Đây là một thách thức đối với trình bổ trợ Android KMP mới vì trình bổ trợ này sẽ xoá cấu trúc loại bản dựng dùng để tách các phần phụ thuộc phát triển khỏi mã phát hành.
Android-KMP
Để chỉ thêm một phần phụ thuộc cho quá trình phát triển và kiểm thử cục bộ, hãy thêm phần phụ thuộc đó trực tiếp vào cấu hình classpath thời gian chạy (trong khối dependencies cấp cao nhất) của quá trình biên dịch Android chính. Điều này giúp đảm bảo rằng phần phụ thuộc có sẵn trong thời gian chạy (ví dụ: đối với các công cụ như Compose Preview) nhưng không thuộc classpath biên dịch hoặc API đã xuất bản của thư viện.
// build.gradle.kts
dependencies {
"androidRuntimeClasspath"(libs.androidx.compose.ui.tooling)
}
Trình bổ trợ cũ
Các dự án Kotlin Multiplatform sử dụng trình bổ trợ com.android.library cho mục tiêu Android nên sử dụng cấu hình debugImplementation. Cấu hình này sẽ giới hạn phạm vi của phần phụ thuộc đối với loại bản dựng gỡ lỗi và ngăn phần phụ thuộc đó được đưa vào biến thể phát hành của thư viện mà người dùng sử dụng.
// build.gradle.kts
dependencies {
debugImplementation(libs.androidx.compose.ui.tooling)
}
8. Định cấu hình mục tiêu JVM cho mục tiêu Android KMP
Trình bổ trợ Android KMP đặt mục tiêu JVM bằng androidLibrary.compilerOptions.jvmTarget, áp dụng cho cả Java và Kotlin, giúp đơn giản hoá cấu hình so với các khối compileOptions và kotlinOptions riêng biệt trong các dự án Android thuần tuý.
Android-KMP
Khi làm việc với một dự án Kotlin Multiplatform (KMP) có chứa một mục tiêu Android, bạn có thể định cấu hình phiên bản mục tiêu JVM cho cả trình biên dịch Kotlin và Java theo nhiều cách. Việc nắm rõ phạm vi và hệ thống phân cấp của các cấu hình này là yếu tố then chốt để quản lý khả năng tương thích mã byte của dự án.
Sau đây là 3 cách chính để đặt mục tiêu JVM, được sắp xếp theo thứ tự ưu tiên từ thấp nhất đến cao nhất. Các giá trị mục tiêu JVM có mức độ ưu tiên cao hơn sẽ áp dụng cho một nhóm nhỏ hơn các mục tiêu đã định cấu hình và ghi đè các giá trị có mức độ ưu tiên thấp hơn. Điều này có nghĩa là bạn có thể đặt các phiên bản JVM khác nhau cho các mục tiêu và bản biên dịch khác nhau trong các mục tiêu trong dự án của mình.
Sử dụng chuỗi công cụ kotlin (mức độ ưu tiên thấp nhất)
Cách chung nhất để đặt mục tiêu JVM là chỉ định chuỗi công cụ trong khối kotlin của tệp build.gradle.kts. Phương pháp này đặt mục tiêu cho cả tác vụ biên dịch Kotlin và Java trên tất cả các mục tiêu dựa trên JVM trong dự án của bạn, bao gồm cả Android.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
Cấu hình này giúp cả kotlinc và javac nhắm đến JVM 21. Đây là một cách tuyệt vời để thiết lập đường cơ sở nhất quán cho toàn bộ dự án của bạn.
Sử dụng các lựa chọn trình biên dịch cấp mục tiêu Android (mức độ ưu tiên trung bình)
Bạn có thể chỉ định mục tiêu JVM dành riêng cho mục tiêu KMP Android trong khối android. Chế độ cài đặt này sẽ thay thế cấu hình jvmToolchain trên toàn dự án và áp dụng cho tất cả các bản biên dịch Android.
// build.gradle.kts
kotlin {
androidLibrary {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
}
Trong trường hợp này, ngay cả khi jvmToolchain được đặt thành một phiên bản khác, mã Kotlin và Java của mục tiêu Android sẽ được biên dịch để nhắm đến JVM 11.
Sử dụng các lựa chọn của trình biên dịch ở cấp độ biên dịch (độ ưu tiên cao nhất)
Để có quyền kiểm soát chi tiết nhất, bạn có thể định cấu hình các lựa chọn của trình biên dịch trên cơ sở mỗi lần biên dịch (ví dụ: chỉ trên androidMain hoặc androidHostTest). Điều này hữu ích nếu một quy trình biên dịch cụ thể cần nhắm đến một phiên bản JVM khác. Chế độ cài đặt này sẽ ghi đè cả chuỗi công cụ Kotlin và các lựa chọn ở cấp mục tiêu Android.
// build.gradle.kts
kotlin {
androidLibrary {
compilations.all {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.JVM_11)
}
}
}
}
Cấu hình này giúp đảm bảo rằng tất cả các quá trình biên dịch trong mục tiêu Android đều sử dụng JVM 11, mang lại khả năng kiểm soát chi tiết.
Trình bổ trợ cũ
Trong dự án KMP sử dụng trình bổ trợ thư viện Android tiêu chuẩn (com.android.library), cấu hình sẽ hơi khác so với khi bạn sử dụng trình bổ trợ Android KMP (nhưng về cơ bản thì tương tự).
Sử dụng chuỗi công cụ Kotlin
Phương thức kotlin.jvmToolchain() hoạt động giống hệt nhau, đặt sourceCompatibility và targetCompatibility cho Java và jvmTarget cho Kotlin. Bạn nên sử dụng phương pháp này.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
compileOptions và kotlinOptions
Nếu không sử dụng chuỗi công cụ Kotlin, bạn phải định cấu hình các mục tiêu JVM bằng cách sử dụng các khối riêng biệt cho Java và Kotlin.
// build.gradle.kts
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
Tài liệu tham khảo về Plugin API
Trình bổ trợ mới có một nền tảng API khác với com.android.library. Để biết thông tin chi tiết về DSL và giao diện mới, hãy xem tài liệu tham khảo về API:
KotlinMultiplatformAndroidLibraryExtensionKotlinMultiplatformAndroidLibraryTargetKotlinMultiplatformAndroidDeviceTestKotlinMultiplatformAndroidHostTestKotlinMultiplatformAndroidVariant
Các vấn đề đã biết trong trình bổ trợ thư viện Android-KMP
Sau đây là các vấn đề đã biết có thể xảy ra khi bạn áp dụng trình bổ trợ com.android.kotlin.multiplatform.library mới:
Tính năng xem trước Compose không hoạt động khi sử dụng trình bổ trợ android-KMP mới
- Đã khắc phục trong
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3vàAndroid Gradle Plugin 9.0.0-alpha13
- Đã khắc phục trong
-
- Đã khắc phục trong
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3vàAndroid Gradle Plugin 9.0.0-alpha13
- Đã khắc phục trong
-
- Đã khắc phục trong
Kotlin Gradle Plugin 2.3.0-Beta2
- Đã khắc phục trong
Hỗ trợ instrumented sourceSetTree cho mục tiêu androidLibrary
- Đã khắc phục trong
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3vàAndroid Gradle Plugin 9.0.0-alpha13
- Đã khắc phục trong
Tính năng không được hỗ trợ
So với việc tích hợp KMP với trình bổ trợ com.android.library, trình bổ trợ com.android.kotlin.multiplatform.library thiếu các tính năng sau:
Liên kết dữ liệu và liên kết khung hiển thị
Đây là những tính năng của khung giao diện người dùng dành riêng cho Android, được liên kết chặt chẽ với hệ thống Khung hiển thị Android và bố cục XML. Trong trình bổ trợ thư viện Android-KMP mới, bạn nên xử lý giao diện người dùng bằng một khung đa nền tảng như Compose Multiplatform. Liên kết dữ liệu và liên kết khung hiển thị được coi là chi tiết triển khai của một ứng dụng Android hoàn chỉnh, chứ không phải là một thư viện có thể chia sẻ.
Hỗ trợ bản dựng gốc
Trình bổ trợ mới tập trung vào việc tạo AAR tiêu chuẩn cho mục tiêu Android. Việc tích hợp mã gốc trong Kotlin Multiplatform được xử lý trực tiếp bằng các mục tiêu gốc riêng của KMP (chẳng hạn như
androidNativeArm64vàandroidNativeX86) và khả năng tương tác C của KMP. Nếu cần đưa mã C/C++ gốc vào, bạn nên xác định mã đó trong một nhóm tài nguyên chung hoặc nhóm tài nguyên gốc và định cấu hình C-interop trong khốikotlin, thay vì sử dụng cơ chếexternalNativeBuilddành riêng cho Android.Ngoài ra, nếu cần hỗ trợ bản dựng gốc, bạn nên tạo một
com.android.libraryđộc lập riêng biệt. Tại đây, bạn có thể tích hợp mã gốc và sử dụng thư viện độc lập từ dự án thư viện Kotlin Multiplatform.Lớp
BuildConfigTính năng
BuildConfighữu ích nhất trong môi trường có nhiều biến thể. Vì trình bổ trợ thư viện Kotlin Multiplatform mới không phụ thuộc vào biến thể và không hỗ trợ các loại bản dựng cũng như các phiên bản sản phẩm, nên tính năng này không được triển khai. Ngoài ra, bạn nên sử dụng trình bổ trợBuildKonfighoặc các giải pháp tương tự của cộng đồng để tạo siêu dữ liệu cho tất cả các mục tiêu.
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Thiết lập môi trường
- Thêm mô-đun KMP vào dự án