Kotlin利用時にAnnotationによってコードが生成されない
例えば、androidx.room利用時に
java.lang.RuntimeException: cannot find implementation for com.hassakulab.sample.XXXDatabase. XXXDatabase_Impl does not exist
環境
- Gradle 6.9
- Android Gradle Plugin 4.2.2
対応方法
build.gradleでannotationProcessorを使っている箇所をkaptに置き換えます。
以下コードはKotlinですがGroovyでも同じですね。
plugins {
id("com.android.application")
id("kotlin-android")
id("kotlin-kapt") // 追加
}
dependencies{
// ...中略
implementation("androidx.room:room-runtime:2.3.0")
implementation("androidx.room:room-ktx:2.3.0")
// annotationProcessorを使っているところをkaptに変更
// annotationProcessor("androidx.room:room-compiler:2.3.0")
kapt("androidx.room:room-compiler:2.3.0")
}
補足1
annotationProcessorを利用しているとビルド時に警告が出ます。
app: 'annotationProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'androidx.room:room-compiler:2.3.0'.
annotationProcessor使っているので、そのまま転記していると見落としちゃうんですよね。なまじコンパイルが通るだけに。
Room を使用してローカル データベースにデータを保存する | Android デベロッパー | Android Developers
上手くいかないときはビルドログにちゃんと目を通して、警告ハンドリングもしっかりしましょうということですね。
補足2
kapt is 何ってことなんですが、Java の Pluggable Annotation Processing API1をKotlinから叩くための、Kotlinコンパイラのプラグインってことらしいです。Kotlin Annotation Processing Tool でkapt。
最終更新日:
August 11, 2021