Di chuyển sang trình bổ trợ thư viện Android-KMP

Kotlin Multiplatform có một trình bổ trợ Gradle để định cấu hình mô-đun thư viện.

Trình bổ trợ com.android.kotlin.multiplatform.library là giải pháp thay thế chính thức cho phương thức trước đây để thêm các mục tiêu Android vào thư viện KMP bằng trình bổ trợ Gradle thông thường cho thư viện Android (com.android.library).

Phương pháp trước đây hiện không được dùng nữa, thay vào đó là trình bổ trợ (còn được gọi là trình bổ trợ Android-KMP). JetBrains sẽ không còn hỗ trợ việc tiếp tục sử dụng trình bổ trợ com.android.library cho KMP và trình bổ trợ này sẽ không được hưởng lợi từ các bản cập nhật và điểm cải tiến trong tương lai.

Để di chuyển sang trình bổ trợ này, hãy tham khảo phần Áp dụng trình bổ trợ Android-KMP.

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ị vô hiệu hoá theo mặc định: Cả kiểm thử đơn vị và kiểm thử thiết bị (đo lường) đều bị vô hiệu hoá 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 androidLibrary trong 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 ích android cấ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ối androidLibrary để 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 KMP Android.

  • Đơ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.library trong 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 thuộc với cấu trúc dự án KMP tiêu chuẩn.

Á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:

  1. 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.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" }
    
  2. Áp dụng khai báo trình bổ trợ trong tệp bản dựng gốc. Mở tệp build.gradle.kts nằm trong thư mục gốc của dự án. Thêm bí danh trình bổ trợ vào khối plugins bằng cách sử dụng apply false. Điều này giúp mọi 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
    }
  3. Á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.kts trong mô-đun thư viện KMP và áp dụng trình bổ trợ ở đầu tệp trong khối 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)
    }
  4. Định cấu hình mục tiêu KMP của Android. Định cấu hình khối Kotlin Multiplatform (kotlin) để xác định mục tiêu Android. Trong khối kotlin, hãy chỉ định mục tiêu Android bằng cách sử dụng androidLibrary:

    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.) ...
    }
  5. Á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.