はじめに
今回はDB関連の部分を進めていきます.前回の記事はこちらから
DBを触る準備をする
- 今回はroomというライブラリを使用していきます.公式資料があったので、指示に従い、build.gradleを初期状態からdependenciesに追加して最終的に下記に更新してビルドを走らせます.
build.gradle(app)
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
val roomVersion = "2.4.2"
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
// To use Kotlin annotation processing tool (kapt)
kapt("androidx.room:room-compiler:$roomVersion")
// To use Kotlin Symbolic Processing (KSP)
ksp("androidx.room:room-compiler:$roomVersion")
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:$roomVersion")
// optional - RxJava2 support for Room
implementation("androidx.room:room-rxjava2:$roomVersion")
// optional - RxJava3 support for Room
implementation("androidx.room:room-rxjava3:$roomVersion")
// optional - Guava support for Room, including Optional and ListenableFuture
implementation("androidx.room:room-guava:$roomVersion")
// optional - Test helpers
testImplementation("androidx.room:room-testing:$roomVersion")
// optional - Paging 3 Integration
implementation("androidx.room:room-paging:2.5.0-alpha01")
}
- ビルドしたところビルドエラーで止まり、最終的にエラーで3か所修正しました.以下修正内容を記載します.
1.val が使えない
- 僕の環境では変数にvalを使えませんでした.対処法として色々調べたところ、valの代わりにdefを使用している記事がいくつか見つかったのでdefを使いました.
build.gradle(app)
dependencies {
~略~
val roomVersion = "2.4.2"
~略~
}
↓修正
build.gradle(app)
dependencies {
~略~
def roomVersion = "2.4.2"
~略~
}
2.kaptが使えない
- 初期状態のbuild.gradleだとkaptが使えないようです.対処法として、pulugins{}のしたにapply文を入れる必要があるようなのでそのあたりを下記のように書き換えました.
build.gradle(app)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
apply plugin: 'kotlin-kapt' //←これを追加
3.kspが使えない
- こちらも初期状態だとkspが使えないようなので、導入文を追加します.下記を追加しました.
build.gradle(app)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id "com.google.devtools.ksp" version "1.5.31-1.0.0" //←これを追加
}
apply plugin: 'kotlin-kapt'
~略~
dependencies {
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
//ksp
implementation "org.jetbrains.kotlin:kotlin-stdlib" //←これを追加
implementation "com.google.devtools.ksp:symbol-processing-api:1.5.31-1.0.0" //←これを追加
def roomVersion = "2.4.2"
~略~
}
- 最終的に上記の修正を加えて再ビルドを行いました.ビルド(というよりライブラリのインストール)に少し時間はかかりましたが、ログに「build successful」と出たので完了です.
おわりに
- roomの導入のエラー調査に思ったよりも時間と労力がかかったので今回はここまでにします.次回こそは実際にDBの中身を触っていきます…それではまた次回!
参考資料まとめ
- 公式のroom資料
- kapt関連
- kspの導入関連