[Error] cannot find implementation for ~Impl does not exist

Minji Jeong·2022년 5월 9일
1

Troubleshooting

목록 보기
5/20
post-thumbnail

문제

로컬 데이터베이스로 Room 라이브러리를 사용하기 위해 앱 수준의 build.gradle에서 종속성을 추가했을 때 발생했다.

dependencies {
	def room_version = "2.3.0"

	implementation "androidx.room:room-runtime:$room_version"
  	annotationProcessor "androidx.room:room-compiler:$room_version"
}

해결

  1. annotationProcessor → kapt로 변경한 후 플러그인 추가
    프로젝트 내부에서 Hilt, Room, Databinding 등 라이브러리가 사용된다면 기존의 annotation processor에서 kapt(코틀린의 annotation 처리)로 바꾸어 선언해야한다. 기존에 자바로 작성된 annotation process로 코틀린의 annotation을 제대로 처리할 수 없기 때문이다.
plugins {
	id 'kotlin-kapt'
}

dependencies {
	def room_version = "2.3.0"

  	implementation "androidx.room:room-runtime:$room_version"
  	kapt "androidx.room:room-compiler:$room_version"
}

보통 이렇게 하면 해결될테지만 내 안드로이드 스튜디오에선 다음의 오류가 발생했다 💦

Plugin with id 'kotlin-kapt' not found.

위 오류는 안드로이드 스튜디오에 코틀린이 설치되어 있지 않아서 발생하는 문제였다. 코틀린 설치 후 프로젝트 수준의 build.gradle에서 사용하고자 하는 코틀린 버전과 classpath를 추가해주면 빌드 오류는 해결된다.

buildscript {
    ext.kotlin_version = "1.6.10"

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
✔ 빌드 오류 해결 이후
빌드 오류는 해결되었지만 이제는 앱에서 오류가 발생했다. 앱 실행시 Room이 사용된 부분을 건드리면 강제종료가 되었는데, 어이없는 실수로 인해 발생한 것이었다 🤣 데이터베이스 객체를 만들기 위해 추상 클래스를 만들었는데, 이 추상클래스에 @Database 어노테이션을 사용하지 않아 문제가 발생했던 것. 이를 수정해주니 최종적으로 문제가 해결되었다.
@Database(entities = {DB.class}, version = 1)
public abstract class DB extends RoomDatabase {
	...
}

Reference

https://warmdeveloper.tistory.com/24

profile
Mobile Software Engineer

0개의 댓글