간만에 안드로이드 포스팅 입니다.
코틀린에서 Room을 적용하는 경우에 주의해야 될 사항을 적어 보았습니다.
여태 껏 안드로이드 개발은 Java로만 해왔던 지라 해당 오류는 처음보았으며 당황했던 것 같습니다.
명칭은 다를 수 있습니다만 "~ Impl does not exist" 라는 문구는 동일 할 것 같습니다.
Database에노테이션이 존재하는 추상 클래스를 코틀린이 상속받아 만들지 못했다는 오류입니다.
Runtime과 관련된 오류이므로 코드상에서의 문제는 찾지를 못했습니다.
당황했던 것은 Room설정과 관련된 내용은 구글에서 제공하는 방법을 그대로 했었는데 오류가 났었기 때문 입니다.
아무튼, 해당 문제를 극복하려면 gradle에서 코틀린과 관련된 내용을 확인 해 보아야 합니다.
kapt라는 의존성 관련된 설정을 추가하여 주었습니다.
kapt는 코틀린이 자바파일의 에노테이션을 만나면 참조하여 동작하는 내용을 의미합니다.
다시 말해, 코틀린 파일에 추가한 자바의 에노테이션을 처리하기 위해서 필요한 내용이라 할 수 있습니다.
위 사진처럼 Room과 관련된 kapt를 추가 하여주고 상단에 플러그인 kapt를 추가하여 줍니다.
아래의 모양처럼 코틀린에 관련된 내용을 추가한 뒤에 동기화(sync)를 눌러줍니다.
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt' //추가합니다.
android {
//생략
defaultConfig {
//생략
}
buildTypes {
release {
//생략
}
}
}
dependencies {
//생략..
//저장소 관련--
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"
//코틀린인 경우 아래 kapt 추가
kapt "androidx.room:room-compiler:$room_version"
kapt "android.arch.lifecycle:compiler:$room_version"
kapt "android.arch.persistence.room:compiler:$room_version"
}
이렇게 하고 실행하여 보면 이상없이 동작하는 것을 볼 수 있습니다.
아마 Room설정을 하는 데 필요한 내용이라고 하기 보다는 "Java 에노테이션을 코틀린에 적용하기" 라는 내용이 맞을 것 같습니다.
이상으로 Room 설정시 코틀린에서 주의해야될 점에 대해서 적어보았습니다.
'기타 > Android' 카테고리의 다른 글
Android Jetpack Scaffold 영역 짤림 (0) | 2023.06.15 |
---|---|
안드로이드 usesCleartextTraffic (0) | 2023.06.15 |
Android Q(안드로이드 10) (0) | 2019.08.13 |
구글 마켓 정책 변경(2019) (0) | 2019.05.02 |
안드로이드 Doze모드 2 (0) | 2019.04.30 |
댓글