Di chuyển từ kapt sang KSP

Kapt (Công cụ xử lý chú giải Kotlin) cho phép bạn dùng trình xử lý chú giải Java với mã Kotlin, ngay cả khi những trình xử lý đó không có hình thức hỗ trợ cụ thể cho Kotlin. Việc này có thể được thực hiện bằng cách tạo mã giả lập Java từ các tệp Kotlin mà sau đó trình xử lý có thể đọc. Việc tạo mã giả lập này là một hoạt động tiêu tốn tài nguyên và có tác động lớn đến tốc độ bản dựng.

KSP (Kotlin Symbol Processing) là một giải pháp thay thế ưu tiên Kotlin cho kapt. KSP trực tiếp phân tích mã Kotlin, giúp tăng tốc gấp 2 lần. KPS cũng hiểu rõ hơn về cấu trúc ngôn ngữ của Kotlin.

Kapt hiện đang ở chế độ bảo trì và bạn nên di chuyển từ kapt sang KSP bất cứ khi nào có thể. Trong hầu hết các trường hợp, bạn chỉ cần thay đổi cấu hình bản dựng của dự án để di chuyển.

Bạn có thể chạy kapt và KSP cùng với nhau trong dự án khi đang di chuyển, và quá trình di chuyển này có thể được thực hiện theo từng mô-đun cũng như từng thư viện một.

Dưới đây là thông tin tổng quan về các bước di chuyển:

  1. Kiểm tra những thư viện bạn dùng để hỗ trợ KSP
  2. Thêm trình bổ trợ KSP vào dự án
  3. Thay thế trình xử lý chú giải bằng KSP
  4. Xoá trình bổ trợ kapt

Kiểm tra những thư viện bạn dùng để hỗ trợ KSP

Để bắt đầu, hãy kiểm tra xem các thư viện mà bạn đang sử dụng với kapt đã hỗ trợ KSP hay chưa. Trường hợp này xảy ra với nhiều thư viện phổ biến (bao gồm Dagger, Glide, Room, và Moshi), và những người khác đang hỗ trợ thêm.

Bạn có thể xem danh sách các thư viện được hỗ trợ trong tài liệu hoặc tham khảo tài liệu và công cụ theo dõi lỗi của thư viện mà bạn đang sử dụng.

Thêm trình bổ trợ KSP vào dự án

Trước tiên, hãy khai báo trình bổ trợ KSP trong tệp build.gradle.kts cấp cao nhất. Hãy đảm bảo rằng bạn chọn một phiên bản KSP phù hợp với phiên bản Kotlin của dự án. Bạn có thể xem danh sách các bản phát hành trên trang GitHub về KSP.

Kotlin

plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
}

Sau đó, hãy bật KSP trong tệp build.gradle.kts ở cấp mô-đun:

Kotlin

plugins {
    id("com.google.devtools.ksp")
}

Groovy

plugins {
    id 'com.google.devtools.ksp'
}

Thay thế trình xử lý chú giải bằng KSP

Khi bật KSP, bạn có thể bắt đầu thay thế các trường hợp sử dụng kapt bằng KSP. Đối với hầu hết các thư viện, việc này chỉ yêu cầu thay đổi kapt thành KSP ở phần khai báo phần phụ thuộc, vì chúng gửi trình xử lý chú giải và trình xử lý KSP trong cùng một cấu phần phần mềm.

Kotlin

dependencies {
    kapt("androidx.room:room-compiler:2.5.0")
    ksp("androidx.room:room-compiler:2.5.0")
}

Groovy

dependencies {
    kapt 'androidx.room:room-compiler:2.5.0'
    ksp 'androidx.room:room-compiler:2.5.0'
}

Sau khi chuyển sang KSP, hãy đồng bộ hoá và tạo dự án để xem dự án có hoạt động đúng cách hay không.

Một số vấn đề thường gặp cần lưu ý:

  • Một số thư viện không hỗ trợ chính xác cùng một bộ tính năng với kapt và KSP. Nếu mã của bạn bị lỗi sau khi di chuyển, hãy xem tài liệu của thư viện.
  • KSP có thông tin về loại Kotlin chính xác hơn so với kapt (ví dụ: về tính chất rỗng), tức là trình xử lý KSP có thể chỉ ra chính xác hơn những yêu cầu về loại. KSP này có thể yêu cầu một số sửa đổi trong mã nguồn, ngoài việc cập nhật các tệp bản dựng.
  • Nếu trước đây bạn đã truyền các đối số vào trình xử lý chú giải, thì rất có thể bạn sẽ cần truyền ngay các đối số đó đến KSP. Lưu ý rằng định dạng của các đối số có thể khác nhau giữa kapt và KSP. Hãy xem tài liệu về KSP và tham khảo tài liệu về thư viện mà bạn đang sử dụng để tìm hiểu thêm.

Xoá trình bổ trợ kapt

Khi bạn không có phần phụ thuộc nào đi kèm với kapt trong mô-đun, hãy xoá trình bổ trợ kapt.

Nếu trình bổ trợ kapt được khai báo trong một khối trình bổ trợ:

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

Groovy

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

Nếu bạn sử dụng cú pháp áp dụng trình bổ trợ qua Groovy:

apply plugin: 'kotlin-kapt'

Bạn cũng nên xoá mọi cấu hình còn lại liên quan đến kapt, chẳng hạn như:

Kotlin

kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy

kapt {
    correctErrorTypes true
    useBuildCache true
}

Tài nguyên khác