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). Trình bổ trợ 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à 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 đã ngừng hoạt độ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). Các API này
dự kiến sẽ bị xoá 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 khỏi các API cũ, hãy xem Hướng dẫn di chuyển.
Để được trợ giúp về việc di chuyển AGP 9.0 trở lên, bạn có thể sử dụng kỹ năng của tác nhân do JetBrains tạo cho các ứng dụng KMP. Để biết thêm thông tin về cách sử dụng kỹ năng trong Android Studio, hãy xem bài viết Mở rộng Chế độ tác nhân bằng kỹ năng. Xin lưu ý rằng kết quả của AI không hoàn toàn có thể dự đoán được.
Các tính năng chính và điểm khác biệt
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:
Kiến trúc biến thể đơn: Trình bổ trợ này sử dụng một biến thể duy nhất, loại bỏ tính năng hỗ trợ cho 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.
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 tính năng hỗ trợ cho 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 một khối
androidtrong 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: Tính năng biên dịch Java bị tắt theo mặc định. Hãy sử dụng
withJava()trong khốiandroidđể bật tính năng hỗ trợ 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ông cụ này đượ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 làm việc KMP góp phần tạo nên một 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: Cung cấp khả năng hoàn thành mã, điều hướng, gỡ lỗi và 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.
Cấu hình dự án đơn giả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ỏ những yếu tố phức tạp dành riêng cho Android, chẳng hạn như biến thể bản dựng. Điều này giúp các tệp bản dựng gọn gàng và dễ bảo 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 tên nhóm tài nguyê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 các nhà phát triển đã quen thuộc với cấu trúc dự án KMP tiêu chuẩn.
Cách giải quyết cho các tính năng không được hỗ trợ
Khi so sánh với việc tích hợp KMP với trình bổ trợ com.android.library, một số tính năng bị thiếu trong trình bổ trợ com.android.kotlin.multiplatform.library. Sau đây là các giải pháp tạm thời
cho những tính năng không được hỗ trợ:
Các biến thể bản dựng
Loại bản dựng và phiên bản sản phẩm không được hỗ trợ. Điều này là do trình bổ trợ mới sử dụng cấu trúc biến thể đơn, giúp đơn giản hoá cấu hình và cải thiện hiệu suất bản dựng.
Nếu bạn cần các biến thể bản dựng, bạn nên tạo một mô-đun thư viện Android độc lập riêng biệt bằng cách sử dụng trình bổ trợ
com.android.library, định cấu hình các loại bản dựng và phiên bản sản phẩm trong mô-đun đó, sau đó sử dụng mô-đun đó làm phần phụ thuộc dự án tiêu chuẩn từ nhóm tài nguyênandroidMaincủa thư viện Kotlin Multiplatform. Để biết thêm thông tin, hãy xem bài viết Tạo thư viện Android và Định cấu hình biến thể bản dựng.Liên kết dữ liệu và Liên kết khung hiển thị
Đây là các tính năng 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. Với 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à thông tin 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 một AAR chuẩn cho mục tiêu Android. Tính năng 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 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ã đó là một phần của nhóm tài nguyên gốc hoặc chung và định cấu hình khả năng tương tác C 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 thông qua
externalNativeBuild, bạn nên tạo một mô-đuncom.android.libraryđộc lập riêng biệt, nơi bạn có thể tích hợp mã gốc và sử dụng thư viện độc lập đó từ nhóm tài nguyênandroidMaincủa dự án thư viện Kotlin Multiplatform. Để biết thêm thông tin, hãy xem bài viết Tạo thư viện Android và Thêm mã C và C++ vào dự án của bạn.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ư phiên bản sản phẩm, nên tính năng này không được triển khai. Thay vào đó, 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ả mục tiêu.
Điều kiện tiên quyết
Để sử dụng trình bổ trợ com.android.kotlin.multiplatform.library, bạn phải định cấu hình dự án bằng 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 = "9.4.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" }Áp dụng nội dung 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 bí danh trình bổ trợ vào khốipluginsbằngapply false. Thao tác này giúp tất cả các dự án phụ đều có thể sử dụng bí danh của trình bổ trợ mà không cần áp dụng logic của 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 cho Android. Định cấu hình khối Kotlin Multiplatform (
kotlin) để xác định mục tiêu Android. Trong khốikotlin, hãy chỉ định mục tiêu Android bằngandroid:Kotlin
kotlin { android { 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 { android { 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 các 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. Di chuyển nguồn
Trình bổ trợ cũ cho phép bạn sử dụng các nhóm tài nguyên src/main, src/test và src/androidTest, ngoài src/androidMain, src/androidHostTest và src/androidDeviceTest. Trình bổ trợ mới chỉ sử dụng các thư mục nguồn sau, vì vậy, bạn cần di chuyển các nguồn từ src/main sang src/androidMain, từ src/test sang src/androidHostTest và từ src/androidTest sang src/androidDeviceTest.
2. Định cấu hình thư mục tài nguyên và nguồn tuỳ chỉnh
Nếu có nguồn hoặc tài nguyên trong các thư mục không chuẩn, thì trước đây bạn đã định cấu hình các nguồn hoặc tài nguyên đó bằng khối sourceSets. Với trình bổ trợ mới, hãy sử dụng tiện ích androidComponents để thêm thư mục nguồn tĩnh vào biến thể.
Xin lưu ý rằng với trình bổ trợ mới, phương thức addStaticSourceDirectory sẽ thêm thư mục vào danh sách thư mục nguồn hiện có. Với trình bổ trợ cũ, phương thức setSrcDirs thay thế danh sách, còn phương thức srcDir thêm vào danh sách.
Android-KMP
Với trình bổ trợ mới, hãy sử dụng khối onVariants để tương tác với các nguồn của biến thể.
// build.gradle.kts
androidComponents {
onVariants { variant ->
// Add a directory for Kotlin sources
variant.sources.kotlin?.addStaticSourceDirectory("other/kotlin")
// Add a directory for Android assets
variant.sources.assets?.addStaticSourceDirectory("other/assets")
}
}
Trình bổ trợ cũ
Với trình bổ trợ com.android.library, khối sourceSets được dùng để đặt hoặc thêm thư mục nguồn.
// build.gradle.kts
android {
sourceSets {
getByName("main") {
// Replaces the directory for Kotlin sources.
kotlin.setSrcDirs(listOf("other/kotlin"))
// Appends a directory for assets.
assets.srcDir("other/assets")
}
}
}
3. Khai báo phần phụ thuộc
Một nhiệm vụ phổ biến là khai báo các phần phụ thuộc cho nhóm tài nguyên dành riêng cho Android. Trình bổ trợ mới yêu cầu các phần phụ thuộc này phải được đặt rõ ràng trong khối sourceSets, không giống như khối dependencies chung được sử dụng trước đây.
Android-KMP
Trình bổ trợ mới 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ó hai nhóm tài nguyên kiểm thử được tạo theo yêu cầu: androidDeviceTest và androidHostTest (xem phần định cấu hình máy chủ lưu trữ và kiểm thử thiết bị để biết thêm thông tin).
// build.gradle.kts
kotlin {
android {}
//... 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ó bản biên dịch Kotlin tương ứng tên là main, deviceTest và hostTest. Bạn có thể định cấu hình nhóm tài nguyên và bản biên dịch trong tập lệnh bản dựng như sau:
// build.gradle.kts
kotlin {
android {
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, việc 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")
}
4. Bật tài nguyên Android
Tính năng hỗ trợ Tài nguyên Android (thư mục res) không được bật theo mặc định với trình bổ trợ mới để 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 các dự án không yêu cầu tài nguyên dành riêng cho Android sẽ không bị gánh nặng bởi chi phí xây dựng liên quan.
Android-KMP
Bạn phải bật rõ ràng tính năng xử lý tài nguyên Android. Tài nguyên phải được đặt trong src/androidMain/res.
// build.gradle.kts
kotlin {
android {
// ...
// 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 thư mục res trong src/main và bắt đầu thêm các giá trị, đối tượng có thể vẽ 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
5. Định cấu hình kiểm thử máy chủ và thiết bị
Theo mặc định, trình bổ trợ mới sẽ tắt các bài kiểm thử phía máy chủ (đơn vị) và phía thiết bị (đo lường) của Android. Bạn phải chọn sử dụng một cách rõ ràng để tạo các nhóm tài nguyên và cấu hình kiểm thử, trong khi trình bổ trợ cũ tạo các nhóm tài nguyên và cấu hình kiểm thử một cách tự động.
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ư nhóm tài nguyên mà bạn chủ động sử dụng.
Android-KMP
Với trình bổ trợ mới, bạn có thể bật và định cấu hình các hoạt động kiểm thử bên trong khối kotlin.android. Đ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 androidUnitTest trở thành androidHostTest (thư mục kiểm thử thay đổi từ src/androidUnitTest thành src/androidHostTest) và androidInstrumentedTest trở thành androidDeviceTest (thư mục kiểm thử thay đổi từ src/androidInstrumentedTest thành src/androidDeviceTest).
// build.gradle.kts
kotlin {
android {
// ...
// 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, các nhóm tài nguyên androidUnitTest và androidInstrumentedTest được tạo theo mặc định. Bạn định cấu hình hành vi của các phần phụ thuộc này bên trong khối android, thường là bằng cách sử dụng testOptions DSL.
// 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
6. Bật tính năng biên dịch nguồn Java
Nếu thư viện KMP cần biên dịch các nguồn Java cho mục tiêu Android, bạn phải bật chức năng này một cách rõ ràng bằng trình bổ trợ mới. Xin lưu ý rằng việc này cho phép biên dịch các tệp Java nằm trực tiếp 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 sử dụng tính năng 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 trực tiếp bên trong khối kotlin { android {} } để thiết lập hợp nhất hơn. Việc đặt jvmTarget tại đâ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 {
android {
// 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ũ
Tính năng 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"
}
}
}
7. Tương tác với các biến thể bản dựng bằng androidComponents
Tiện ích androidComponents vẫn có sẵn để tương tác với 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 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 không còn có sẵn trên đối tượng biến thể.
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 phổ biến 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 tác vụ.
// build.gradle.kts
androidComponents {
onVariants(selector().withBuildType("release")) { variant ->
// ...
}
}
8. Chọn 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 tập trung và làm rõ logic này trong khối kotlin.android.localDependencySelection. Điều này giúp bạn biết rõ hơn biến thể nào của phần phụ thuộc bên ngoài sẽ được chọn cho thư viện KMP biến thể đơn.
// build.gradle.kts
kotlin {
android {
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 chiến lược lựa chọn phần phụ thuộc bên trong các khối buildTypes and
productFlavors. Việc này thường liên quan đến việc sử dụng missingDimensionStrategy để cung cấp 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.
9. Thêm phần phụ thuộc của bản xem trước Compose
Thông thường, chúng ta muốn có các thư viện cụ thể trong phạm vi 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 được xuất bản cuối cùng. Điều này trở thành một thách thức với plugin Android KMP mới vì plugin này loại bỏ cấu trúc loại bản dựng dùng để tách biệt các phần phụ thuộc phát triển khỏi mã phát hành.
Android-KMP
Để chỉ thêm 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. Việc này giúp đảm bảo 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ư Xem trước trong Compose) nhưng không thuộc classpath biên dịch hoặc API đã phát hành 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ẽ đặt phạm vi của phần phụ thuộc vào loại bản gỡ lỗi và ngăn phần phụ thuộc này đượ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)
}
10. Định cấu hình mục tiêu JVM cho mục tiêu Android KMP
Trình bổ trợ KMP Android đặt mục tiêu JVM bằng android.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 xử lý một dự án Kotlin Multiplatform (KMP) có mục tiêu Android, bạn có một số cách để đị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. Việc hiểu rõ phạm vi và hệ 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 của mã byte trong dự án.
Dưới đây là ba 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 trong số 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 của dự án.
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 đều nhắm đến JVM 21. Đây là một cách hiệu quả để thiết lập đường cơ sở nhất quán cho toàn bộ dự án.
Sử dụng các tuỳ chọn trình biên dịch cấp mục tiêu của 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 ghi đè 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 {
android {
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 tuỳ chọn trình biên dịch ở cấp biên dịch (mức độ ư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 tuỳ chọn 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 rất hữu ích nếu một bản 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 ghi đè cả chuỗi công cụ Kotlin và các tuỳ chọn cấp mục tiêu của Android.
// build.gradle.kts
kotlin {
android {
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 bản 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 một 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 Plugin Android KMP (nhưng về mặt khái niệm 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"
}
}
11. Xuất bản quy tắc giữ lại cho người dùng
Nếu thư viện KMP cần cung cấp quy tắc lưu giữ của người dùng (chẳng hạn như quy tắc ProGuard cho R8) cho người dùng, thì bạn cần bật tính năng xuất bản một cách rõ ràng bằng trình bổ trợ mới. Trước đây, các quy tắc giữ lại của người dùng được xuất bản theo mặc định nếu được chỉ định.
Android-KMP
Với trình bổ trợ mới, bạn phải đặt optimization.consumerKeepRules.publish = true và chỉ định các tệp quy tắc trong khối consumerKeepRules để xuất bản quy tắc giữ lại của người dùng.
// build.gradle.kts
kotlin {
android {
optimization {
consumerKeepRules.apply {
publish = true
file("consumer-proguard-rules.pro")
}
}
}
}
Trình bổ trợ cũ
Với com.android.library, mọi tệp quy tắc được chỉ định bằng consumerProguardFiles trong android.defaultConfig đều được xuất bản trong cấu phần phần mềm của thư viện theo mặc định.
// build.gradle.kts
android {
defaultConfig {
consumerProguardFiles("consumer-proguard-rules.pro")
}
}
12. Xuất bản thư viện lên Maven
Nếu bạn dự định phát hành thư viện KMP lên Maven để các dự án khác sử dụng, thì quy trình sẽ khác nhau tuỳ thuộc vào việc bạn đang sử dụng trình bổ trợ Android-KMP mới hay trình bổ trợ cũ.
Android-KMP
Trình bổ trợ com.android.kotlin.multiplatform.library tích hợp với các cơ chế phát hành Kotlin Multiplatform tiêu chuẩn. Bạn không cần thực hiện bước nào dành riêng cho Android ngoài quy trình phát hành thư viện KMP tiêu chuẩn.
Để xuất bản thư viện, hãy làm theo tài liệu chính thức của JetBrains: Thiết lập tính năng xuất bản cho thư viện đa nền tảng.
Trình bổ trợ cũ
Khi sử dụng com.android.library cho mục tiêu Android trong dự án KMP,
bạn cần làm theo hướng dẫn xuất bản thư viện Android tiêu chuẩn để
chuẩn bị và xuất bản cấu phần phần mềm dành riêng cho Android (.aar).
Để biết hướng dẫn chi tiết, hãy xem bài viết Chuẩn bị phát hành thư viện.
Tài liệu tham khảo API trình bổ trợ
Trình bổ trợ mới có 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 API:
KotlinMultiplatformAndroidLibraryExtensionKotlinMultiplatformAndroidLibraryTargetKotlinMultiplatformAndroidDeviceTestKotlinMultiplatformAndroidHostTestKotlinMultiplatformAndroidVariant
Các vấn đề đã biết về trình bổ trợ thư viện Android-KMP
Dưới đâ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:
Bản xem trước trong 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ợ sourceSetTree được đo lường 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
Đề 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