AnkoからRoomへ:オープン☆パンドラ

今まで、作者はAndroidアプリを制作する時にAnkoというライブラリを使用していた。

AnkoはXMLを使わずに画面をレイアウトしたりSQLiteを使用できるスグレモノ!と書いてあったのでそれを使っていたが、いかんせんうまく使用する事が出来ずに開発が超停滞していた。

ある時、詳しい知り合いにコードを見て貰う機会があったのだが、その人曰くレイアウトは普通にXMLを使い、データベースは別のツールで作成したほうが良いとの事。そこで、今回からは進められたRoomで開発を行っていく。

さて、何をするにもまずはインストールだ。本当はある程度動かしてから実は上手くインストール出来ていなかった事に気がついたのだが、その順に書くと記事がややこしくなるためインストール編から書いていく。

Roomのインストール:ネバーエンディングインストール

皆さんはライブラリ等を使用する時、どこから詳細情報や使い方を持ってくるだろうか。本?まとめサイト?あるいは作者が繰る様なスタイリッシュ(になる予定)なブログからであろうか。

否、1番良いのは本家が提供している公式リファレンスだ。無論それだけでは分からない時は他を当たるのも良いであろうが、まずは本家から見ないと食事せずにサプリメントを飲む感じになってしまう。

さて、これがRoomの公式ページだ。

英語かよ

白状するが、作者はあまり英語が出来ない。TOEICでは600点位で主な得点源はリスニングだ。ネタバレすると、案の定今回も細かい部分を読み飛ばして盛大に落とし穴に嵌ってしまった。

さて、早速インストールだ。方法はとても簡単で、以下のコードを「build.gradle」に記述するだけで良いらしい。分かっている。Googleのコードは上手く動作しない時の方が多い。

dependencies {
    def room_version = "2.1.0-alpha05"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

    // optional - RxJava support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // Test helpers
    testImplementation "androidx.room:room-testing:$room_version"
}

ほら見ろ、絶対こうなると思った。さて、片っ端から直すか。

エラー文の推奨方法で修正する。

ManifestのApplication部分に
tools:replace=""android:appComponentFactory"
と記述する。

出来ないなら推奨しないでくれ・・・(´・ω・`)

「gradle.properties」に追記する。

この2文を追記すれば・・・

android.useAndroidX=true
android.enableJetifier=true

あら不思議!エラー内容が変わった!つまり動作はしなかった。

じっくりエラー文を読み、もう1度しっかりリファレンスを読み直す。

・・・わかったぞ。依存関係が上手く行っていないのか・・・何か前提となる物が必要だったか、あるいは別のライブラリと競合してしまっているのか・・・

衝撃の事実

どうやらこのRoomには前提条件があったようだ。公式リファレンスによると、

  • Google Maven repository
  • kotlin-kapt plugin

が予めインストールされている必要があったらしい。おまけに別サイトによると、更に「AndroidX」と呼ばれるAndroid拡張機能ライブラリが必要らしい。分かるかそんなの。

早速メニューからAndroidXに移行を実行すると・・・

またエラー。ankoのSDKレベルが27で、移行は28からじゃないと駄目らしい。

もういい。ウザい。どんなに頑張ってもこっちのお願いが実行されない。

だからこのプロジェクトは一旦消して作り直す。よくある事だ。

Reboot:やり直し

その後プロジェクトを作り直した。なぜかデータが保存されず焦ったが、(保存場所に問題があったらしい)その後は順調。AndroidXを適応した後module:appの方の「build.gradleのdependencies内」に以下を記述したら、それだけで上手く行った。

def room_version = "2.1.0-alpha05"

    implementation "androidx.room:room-runtime:$room_version"
    //annotationProcessor "androidx.room:room-compiler:$room_version"(kotlinでは使用しない)
    // For Kotlin use kapt instead of annotationProcessor

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"

    // optional - RxJava support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

すごい疲れた・・・Roomの使い方等はまた次回以降だな

お楽しみに...!

この記事が気に入ったら
フォローしよう

最新情報をお届けします

おすすめの記事