O kapt (ferramenta de processamento de anotações do Kotlin) permite usar processadores de anotações Java com código Kotlin, mesmo que eles não tenham suporte específico para o Kotlin. Isso é feito gerando stubs Java dos arquivos Kotlin que podem ser lidos pelos processadores. Essa geração de stubs é uma operação cara e tem um impacto significativo na velocidade do build.
O KSP (Processamento de símbolos do Kotlin) é uma alternativa ao kapt que prioriza o Kotlin. O KSP analisa o código Kotlin diretamente, o que é até duas vezes mais rápido. Ele também entende melhor as construções da linguagem Kotlin.
Como o kapt está em modo de manutenção, recomendamos que você migre do kapt para o KSP sempre que possível. Na maioria dos casos, essa migração requer apenas mudanças na configuração do build do projeto.
É possível executar o kapt e o KSP simultaneamente durante a migração. Ela pode ser feita por módulo ou biblioteca.
Confira uma visão geral das etapas da migração:
- Conferir se as bibliotecas que você usa têm suporte ao KSP
- Adicionar o plug-in KSP ao projeto
- Substituir processadores de anotações pelo KSP
- Remover o plug-in kapt
Conferir se as bibliotecas que você usa têm suporte ao KSP
Para começar, confira se as bibliotecas que você está usando com o kapt já oferecem suporte ao KSP. Isso se aplica a muitas bibliotecas populares (incluindo Dagger, Glide, Room, e Moshi), e outros estão adicionando suporte.
Confira a lista de bibliotecas com suporte na documentação. Também é possível consultar a documentação e o Issue Tracker das bibliotecas usadas.
Adicionar o plug-in KSP ao projeto
Primeiro, declare o plug-in KSP no arquivo build.gradle.kts
de nível superior.
Escolha uma versão do KSP alinhada à versão do Kotlin do seu
projeto. Acesse uma lista de versões na página do GitHub
da KSP (em inglês).
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 }
Em seguida, ative a KSP no arquivo build.gradle.kts
do módulo:
Kotlin
plugins { id("com.google.devtools.ksp") }
Groovy
plugins { id 'com.google.devtools.ksp' }
Substituir processadores de anotações pelo KSP
Com o KSP ativado, comece a substituir os usos do kapt por KSP. Para a maioria das bibliotecas, isso requer apenas a mudança do kapt para KSP na declaração de dependência, já que elas enviam o processador de anotações e o processador KSP no mesmo artefato.
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' }
Depois de mudar para a KSP, sincronize e crie seu projeto para testar se ele ainda funciona corretamente.
Confira alguns problemas comuns:
- Algumas bibliotecas não oferecem suporte ao mesmo conjunto de recursos com kapt e KSP. Se o código falhar após a migração, verifique a documentação da biblioteca.
- O KSP tem informações do tipo Kotlin mais precisas do que o kapt (por exemplo, sobre nulidade). Isso significa que os processadores KSP podem ser mais precisos sobre os requisitos de tipo. Algumas correções no código-fonte podem ser necessárias, assim como a atualização dos arquivos de build.
- Se você transmitia argumentos para o processador de anotações, provavelmente vai ser necessário transmiti-los para o KSP. Observe que o formato dos argumentos pode ser diferente entre o kapt e o KSP. Consulte a documentação do KSP (em inglês) e a da biblioteca usada para saber mais.
Remover o plug-in kapt
Quando você não tiver mais dependências incluídas com kapt
no módulo,
remova o plug-in kapt.
Se ela tiver sido declarada em um bloco de plug-ins, use este código:
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
Groovy
plugins {id 'org.jetbrains.kotlin.kapt'}
Se estava usando a sintaxe de aplicação do plug-in com o Groovy:
apply plugin: 'kotlin-kapt'
Também é necessário remover qualquer configuração restante relacionada ao kapt, como:
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
Groovy
kapt { correctErrorTypes true useBuildCache true }
Outros recursos
- Documentação do KSP em Kotlinlang.org (em inglês)
- KSP no GitHub (em inglês)
- kapt no Kotlinlang.org -->