kapt to KSP migration

박채빈·2024년 3월 19일
0

AndroidStudy

목록 보기
19/19

kapt

kapt(koltin annotation process tool)를 사용하면 Kotlin 코드에서 자바 주석 프로세서를 사용할 수 있다.

기존 사용방법 (Gradle)

  1. Gradle 플러그인 적용
plugins {
	kotlin("kapt") version "1.9.23"
}

또는

plugins {
  id("kotlin-kapt")
}
  1. dependencies block에 kapt 배치
dependencies {
    kapt("groupId:artifactId:version")
}

특징

kapt를 사용하면 kotlin 코드에서 자바 주석 프로세서를 사용할 수 있다.
kotlin 파일에서 프로세서가 읽을 수 있는 자바 스텁이 생성되어 자바 주석 프로세서 사용이 지원된다.
이 작업은 비용이 많이 들어 빌드 속도에 영향을 준다.

KSP(Kotlin Symbol Processing)

kapt의 대안. KSP는 kotlin 코드를 직접 분석하기에 kapt 대비 최대 2배 빠르다.
kapt는 현재 유지보수 모드로 전환되었으므로 가능한 경우 KSP로 이전하는 것을 권장한다.

migration 단계

  1. KSP 지원에 사용되는 라이브러리 확인
    kapt에 사용되는 라이브러리에서 이미 KSP를 지원하는 지 확인해야 한다.
    Dagger, Glide, Room, Moshi등에서 가능.
    지원가능 라이브러리 목록

  2. 프로젝트에 KSP 플러그인 추가
    2.1 최상위 build.gradle (또는 build.gradle.kts) 에서 KSP 플러그인 선언.

  • build.gradle (Groovy)
plugins {
    id 'com.google.devtools.ksp' version '1.8.10-1.0.9' apply false
}
  • build.gradle.kts (Kotlin)
plugins {
    id("com.google.devtools.ksp") version "1.8.10-1.0.9" apply false
}

2.2 모듈 수준 build.gradle (또는 build.gradle.kts) 에서 KSP 사용 설정.

  • build.gradle (Groovy)
plugins {
    id 'com.google.devtools.ksp'
}
  • build.gradle.kts (Kotlin)
plugins {
    id("com.google.devtools.ksp")
}
  1. 주석 프로세서를 KSP로 대체
    대다수의 라이브러리에서 kapt와 KSP 프로세서를 동일한 아티펙트에 포함하여 출시하므로, kapt를 ksp로 변경하면 된다.
  • build.gradle (Groovy)
dependencies {
	kapt 'androidx.room:room-compiler:2.5.0' // 삭제
    ksp 'androidx.room:room-compiler:2.5.0'
}
  • build.gradle.kts (Kotlin)
dependencies {
    kapt("androidx.room:room-compiler:2.5.0") // 삭제
    ksp("androidx.room:room-compiler:2.5.0")
}

3.1 주의사항

  • 일부 라이브러리는 kapt와 KSP에서 정확히 동일한 기능을 사용하지 않는다.
  • KSP의 kotlin 타입 정보는 kapt보다 명확하므로, KSP 프로세서가 타입 요구사항이 더 엄밀할 수 있다. (ex: null 허용 여부) 따라서 소스 코드를 수정해야 할 수도 있다.
  • 이전 주석 프로세서에 인수를 전달했다면, 이제는 KSP에 인수를 전달해야 할 것이다. kapt와 KSP의 인수 형식이 다를 수 있으므로, KSP 문서 및 라이브러리 문서의 확인이 필요하다.
  1. kapt 플러그인 삭제
    모듈에 더 이상 kapt와 함께 포함된 종속 항목이 없으면, kapt 플러그인을 삭제한다.

    데이터 결합이 사용되는 모듈에서는 kapt를 삭제할 수 없다. (확인 필요)

kapt와 관련된 남아있는 구성도 삭제해야 한다.

  • build.gradle (Groovy)
// 삭제
kapt {
    correctErrorTypes true
    useBuildCache true
}
  • build.gradle.kts (Kotlin)
// 삭제
kapt {
    correctErrorTypes = true
    useBuildCache = true
}
profile
안드로이드 개발자

0개의 댓글