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.
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:
- Kiểm tra những thư viện bạn dùng để hỗ trợ KSP
- Thêm trình bổ trợ KSP vào dự án
- Thay thế trình xử lý chú giải bằng KSP
- 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. Có nhiều thư viện phổ biến (bao gồm Dagger, Glide, Room và Moshi) đã hỗ trợ KPS và các thư viện khác thì đang thêm hình thức hỗ trợ.
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 "2.0.21-1.0.27" apply false }
Groovy
plugins { id 'com.google.devtools.ksp' version '2.0.21-1.0.27' 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 trình bổ trợ kapt sử dụng cú pháp trình bổ trợ bằng 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 }