Skip to content

배토의 개발일지

나를위한 단편적 기억들의 기록

Menu
  • 안드로이드
  • 코틀린
  • Godot
  • 블렌더
  • git
  • 게임제작일지
  • 기타
Menu

Android: Kapt to KSP

Posted on 2024년 5월 10일 by batmask

공식 문서 Migrate from kapt to KSP 에 잘 설명되어 있다.

Kapt

Kapt는 the Kotlin Annotation Processing Tool 의 약자로 Java Annotation을 코틀린에서 사용가능하도록 만들어준다. 결과적으로 Kotlin 코드에서 Annotation들의 사용이 가능해진다. 예를 들면, Room Database를 사용시 다음과 같은 Dao코드를 필요로 하는데,

@Dao
interface PlantDao {
    @Query("SELECT * FROM plants ORDER BY name")
    fun getPlants(): LiveData<List<Plant>>

    @Query("SELECT * FROM plants WHERE growZoneNumber = :growZoneNumber ORDER BY name")
    fun getPlantsWithGrowZoneNumber(growZoneNumber: Int): LiveData<List<Plant>>

    @Query("SELECT * FROM plants WHERE id = :plantId")
    fun getPlant(plantId: String): LiveData<Plant>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertAll(plants: List<Plant>)
}

@Dao, @Query 등이 코드에 부가적으로 달려있는 annotation이며 Kapt는 이를 해석하고 필요한 코드를 생성하는 역할을 한다.

Kapt의 사용은 build.gradle에 다음과 같은 코드의 추가로 사용한다.

plugins {
    id 'kotlin-kapt'
}
...
dependencies {
    kapt "androidx.room:room-compiler:2.6.1"
    kapt "com.github.bumptech.glide:compiler:4.16.0"
...

kapt 플러그인을 추가하고 이를 사용하는 라이브러리를 kapt 로 기술하고있다.

Kapt의 문제는 Java Annotation으로 처리하기위해 Kotlin 코드로부터 Java Stubs 코드를 생성하는 단계를 거친다. 이는 컴파일 단계에서 부하가 꽤 큰 작업이다.

KSP

KSP는 Kotlin Symbol Processing의 약자로, Kapt를 대체하고 Kotlin 코드에서 직접 Annotation을 처리하기위해 만들어진 것이다. Kotlin 코드를 보다 잘 이해하고 Java Stub코드의 생성을 제거함으로서 2배이상 빨라졌다고 한다. 그래서 요즘 안드로이드 스튜디오에서 kapt 부분이 보이면 KSP로 바꾸도록 권고하고 있다.

Migration Kapt to KSP

gradle 파일만 수정하면된다. 우선 프로젝트 수준의 build.gradle파일에 다음을 추가한다.

plugins {
    id 'com.google.devtools.ksp' version '1.9.24-1.0.20' apply false
}

버전 넘버는 KSP의 github에서 확인 가능하다. 다음, 모듈 레벨 build.gradle에 다음을 추가한다.

plugins {
    id 'kotlin-kapt'
}

이제 kapt를 사용하는 라이브러리의 접두어를 바꿔준다.

dependencies {
    //kapt "androidx.room:room-compiler:2.6.1"
    ksp "androidx.room:room-compiler:2.6.1"
...

마지막으로 kapt관련 코드를 제거해준다. 주석처리로 표시했지만, 그냥 삭제하면 된다.

plugins {
    //id 'org.jetbrains.kotlin.kapt'
}
...
//kapt {
    //correctErrorTypes true
    //useBuildCache true
//}

Kapt가 여전히 필요한 경우

예를들어 코드가 아직 databinding을 사용중이라면 Kapt를 삭제할 수 없다. 구글에서 databinding은 예전방식이고 완전히 compose로 넘어간 상태라서 databinding에서 KSP 지원계획은 없다고 한다. 이런경우는 여전히 Kapt를 사용해야 하는데, 필요한 부분은 KSP로 변경하고 databinding 사용만 일시적으로 kapt를 유지하여 Kapt와 KSP를 병행사용하는 것도 하나의 방법이다. 이후에 kapt 의존성이 사라지면 제거해도 된다.

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

최신 글

  • Blender : snap을 써서 다른 vertex에 정렬하기
  • KTor Client 기본 사용 정리
  • 게임 만들거다.
  • Using Koin with Android Compose

보관함

2024 5월
일 월 화 수 목 금 토
 1234
567891011
12131415161718
19202122232425
262728293031  
« 2월   7월 »

메타

  • 로그인
  • 엔트리 피드
  • 댓글 피드
  • WordPress.org
©2025 배토의 개발일지 | Built using WordPress and Responsive Blogily theme by Superb