Android Studioでgradle taskを使ってgreenDaoのDao生成を行う
はじめに
AndroidのSqliteって便利だけど直接sqlをコードに書くのはちょっと抵抗ありますよね。
あとカラム追加時の修正とか色々大変。。。
参考書籍
greenDaoもそうだけど、他にも今まで知らなかったオープンソースのライブラリとか一杯乗っててとても勉強になります。 内容自体は初心者でも読めるけど、利用するとなると中級〜上級向けかな?
導入した環境
- Android Studio 0.4.0
- 生成したDaoを利用するプロジェクトは作成済み
導入手順
Dao生成用のgradleのみのプロジェクト?を作成する
開発中のAndroidプロジェクトを開く(Android Studioでcreateしたプロジェクト)
プロジェクトを右クリック > New > Directoryで「DaoGenerator」ディレクトリを作る。
プロジェクトを右クリック > New > Fileで「build.gradle」ファイルを作る。
Dao生成のbuild.gradleのtaskを書いちゃう。
project/DaoGenerator/build.gradle
import de.greenrobot.daogenerator.DaoGenerator; import de.greenrobot.daogenerator.Entity; import de.greenrobot.daogenerator.Schema; // DBのバージョン def dbVersion = 1 // 出力先のパッケージ名 def daoOutputPackage = "com.kyokomi.hogehoge.db" // 出力先のディレクトリパス(generator実行前にcleanするのでソースは分けたほうがいい) def daoOutputDirPath = "HogehogeApp/src-gen/main/java" // generatorで作成したディレクトリを削除する task daoGeneratorClean(type: Delete) { delete "../${daoOutputDirPath}" } task daoGenerator { description 'daoを生成します' doLast { Schema schema = new Schema(dbVersion, daoOutputPackage); // ------------- この辺でテーブル定義 START ------------------- Entity hogeTable = schema.addEntity("HogeTable"); hogeTable.addLongProperty("id").primaryKey().autoincrement().notNull().unique(); hogeTable.addLongProperty("fuga").notNull(); hogeTable.addStringProperty("hoge").notNull(); // ------------- この辺でテーブル定義 END ------------------- try { // 未作成ならディレクトリを作る File file = new File(daoOutputDirPath); if (!file.exists()) { file.mkdirs(); } // Dao生成! new DaoGenerator().generateAll(schema, daoOutputDirPath); } catch (Exception e) { e.printStackTrace(); } } }
gradleの親子関係を設定
プロジェクト直下のgradle設定ファイルにDaoGeneratorを追加(もしかしたら自動でAndroidStudioが追加するかも)
project/settings.gradle
include ':DaoGenerator'
親からtaskを実行する時の子のbuild設定
プロジェクト直下のgradleのbuild設定にDaoGeneratorを追加。
project/build.gradle
project(':DaoGenerator') { buildscript { repositories { mavenCentral() } dependencies { classpath 'de.greenrobot:greendao:1.3.7' classpath 'de.greenrobot:greendao-generator:1.3.0' classpath 'org.freemarker:freemarker:2.3.19' } } }
生成したDaoをアプリで使用する設定
今回生成したDaoを使用するアプリプロジェクトのbuild.gradleも修正。関係ない部分は省略してます。
project/HogeHogeApp/build.gradle
buildscript { // 〜省略〜 } // 〜省略〜 android { // 〜省略〜 sourceSets { main { java.srcDirs = ['src/main/java', 'src-gen/main/java'] } } } dependencies { compile 'de.greenrobot:greendao:1.3.7' }
終わり
メニューバーの「Sync Project with Gradle Files」でgradle buildする。
こんな感じになってたら大丈夫。
とまあ、環境作って終わってしまった。 Android Studioがツンデレすぎて苦戦しまくった。。。
次回は、この運用でDao生成して組み込んで実装しやすいかとかまとめられればと思います。