Di chuyển sang trình bổ trợ Android-KMP

Trước đây, cách duy nhất để tích hợp Android vào dự án KMP là sử dụng trình bổ trợ Gradle thư viện Android thông thường: com.android.library. Tuy nhiên, phương pháp này hiện không còn được dùng nữa mà thay vào đó là trình bổ trợ com.android.kotlin.multiplatform.library chuyên dụng, còn được gọi là trình bổ trợ Android-KMP. Hướng dẫn này giải thích cách di chuyển sang trình bổ trợ mới.

Các tính năng và điểm khác biệt chính

Trình bổ trợ Android-KMP (com.android.kotlin.multiplatform.library) được điều chỉnh dành riêng cho các dự án KMP và khác với trình bổ trợ com.android.library truyền thống ở một số khía cạnh chính:

  • Cấu trúc biến thể đơn: Trình bổ trợ hoạt động với một biến thể duy nhất, giúp đơn giản hoá quy trình xây dựng bằng cách xoá tính năng hỗ trợ cho các phiên bản sản phẩm và loại bản dựng thường thấy trong các dự án thư viện Android tiêu chuẩn. Điều này giúp đơn giản hoá cấu hình và nâng cao hiệu suất bản dựng cho các thư viện Android KMP.
  • Tối ưu hoá cho KMP: Trình bổ trợ này được thiết kế riêng cho các thư viện Kotlin Multiplatform, tập trung vào mã Kotlin dùng chung và khả năng tương tác. Do đó, công cụ này bỏ qua tính năng hỗ trợ cho các bản dựng gốc dành riêng cho Android, AIDL (Ngôn ngữ định nghĩa giao diện Android) và RenderScript. Những công cụ này thường không liên quan trong ngữ cảnh mã dùng chung của KMP.
  • Các bài kiểm thử bị tắt theo mặc định: Để tăng cường thêm tốc độ bản dựng trong môi trường đa nền tảng, các bài kiểm thử sẽ bị tắt theo mặc định. Bạn có thể bật kiểm thử một cách rõ ràng nếu dự án của bạn yêu cầu. Điều này áp dụng cho cả kiểm thử trên máy chủ (kiểm thử đơn vị) và kiểm thử trên thiết bị (kiểm thử đo lường).
  • Không có tiện ích Android cấp cao nhất: Trình bổ trợ không tạo tiện ích android cấp cao nhất trong các tệp bản dựng Gradle. Cấu hình được xử lý bằng một khối androidLibrary trong DSL đa nền tảng Kotlin, duy trì cấu trúc dự án KMP nhất quán.
  • Chọn biên dịch Java: Tính năng biên dịch Java không được bật theo mặc định. Nếu thư viện KMP của bạn cần biên dịch mã dựa trên Java, bạn phải chọn sử dụng một cách rõ ràng bằng cách sử dụng API withJava() trong khối cấu hình androidLibrary trong khối kotlin. Điều này cho phép kiểm soát tốt hơn quy trình biên dịch và có thể cải thiện thời gian tạo bản dựng khi không cần biên dịch mã dựa trên Java.

Lợi ích của việc di chuyển

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: Trình bổ trợ Android-KMP được thiết kế để tối ưu hoá tốc độ bản dựng và nâng cao độ ổn định trong các dự án KMP. Cấu trúc tinh giản và tập trung vào quy trình công việc 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: Trình bổ trợ này cung cấp khả năng tích hợp vượt trội với Android Studio và các IDE Kotlin khác. Điều này giúp hoàn thành mã, điều hướng, gỡ lỗi và trải nghiệm tổng thể của nhà phát triển tốt hơ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: Bằng cách xoá các yếu tố phức tạp dành riêng cho Android như biến thể, trình bổ trợ Android-KMP sẽ đơn giản hoá cấu hình cho các dự án KMP. Điều này giúp các tệp bản dựng trở nên rõ ràng và dễ bảo trì hơn, đồng thời giảm độ dốc học tập cho các nhà phát triển mới làm quen với việc phát triển Android bằng KMP. Trước đây, khi tích hợp Android vào dự án KMP bằng trình bổ trợ com.android.library, hoạt động tương tác giữa trình bổ trợ Android cho Gradle và trình bổ trợ Kotlin cho Gradle trong cấu trúc đa nền tảng đôi khi dẫn đến tên nhóm tài nguyên gây hiểu lầm. Ví dụ: nhóm tài nguyên dành riêng cho việc định cấu hình kiểm thử đo lường trên Android được đặt tên là 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 chuẩn.
  • Giải pháp chính thức và được đề xuất: 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 là thêm mục tiêu Android vào thư viện KMP bằng trình bổ trợ com.android.library. 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à bạn sẽ không được hưởng lợi từ các bản cập nhật và cải tiến trong tương lai.

Áp dụng trình bổ trợ Android-KMP cho một dự án

Có hai cách chính để áp dụng trình bổ trợ Android-KMP cho dự án của bạn: * Đối với các mô-đun thư viện KMP hiện có, hãy chỉnh sửa tệp Gradle theo cách thủ công. * Đối với các mô-đun thư viện KMP mới, hãy tạo trực tiếp mô-đun mới từ giao diện người dùng Android Studio.

Áp dụng trình bổ trợ 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. Mở tệp TOML của danh mục phiên bản rồi thêm nội dung sau vào phần plugins:

    [plugins]
    kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform",
    version.ref = "KOTLIN_PLUGIN_VERSION" }
    android-kotlin-multiplatform-library = { id =
    "com.android.kotlin.multiplatform.library", version.ref =
    "ANDROID_KMP_PLUGIN_VERSION" }
    

    Thay thế KOTLIN_PLUGIN_VERSIONANDROID_KMP_PLUGIN_VERSION bằng các phiên bản thực tế mà bạn đang sử dụng.

  2. Mở tệp build.gradle.kts (Kotlin) hoặc build.gradle (Groovy) trong thư mục gốc của mô-đun thư viện KMP.

  3. Áp dụng trình bổ trợ ở đầu tệp trong khối plugins:

    Kotlin

    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }

    Groovy

    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }
  4. Đị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. 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.

Tạo mô-đun mới bằng trình bổ trợ

Bạn cũng có thể tạo mô-đun thư viện Kotlin Multiplatform mới ngay trong Android Studio. Thao tác này sẽ tự động áp dụng các trình bổ trợ cần thiết, bao gồm cả trình bổ trợ Android-KMP. Để biết thêm hướng dẫn về cách tạo mô-đun thư viện KMP mới bằng Android Studio, hãy xem phần Thêm Kotlin Multiplatform vào dự án hiện có.

Để biết thêm thông tin về hệ sinh thái đa nền tảng tổng thể và các cấu hình nâng cao hơn, hãy xem tài liệu chính thức về Kotlin Multiplatform.