LoginSignup
6
2

More than 5 years have passed since last update.

[small tips] realmを使ったプロジェクトにkotlinをインポートしたらMediatorが生成されなかった話

Last updated at Posted at 2018-11-20

小ネタですが、Androidプロジェクトにkotlinをインポートしたところ、realm初期化時にクラッシュしてしまう現象が発生しました。

結果としては、gradleを変更したところ、解決しました。
しかし、ここに到るまでに中々原因らしい原因が分からず、大分ハマってしまいました。
(ググっても似たような問題が少ない)

以下、詳細です。

※ 11/21 13:10 gradleの記載に誤りがあったので修正しました。
@sato-shin さん、ありがとうございます!

環境

・AndroidStudio : 3.2.1
・gradle : gradle-4.6-all.zip、com.android.tools.build:gradle:3.2.1
・realm : io.realm:realm-gradle-plugin:5.1.0(少々古いのは気にしない)
・kotlin : 1.3.10

発生した問題

RealmException
Caused by: io.realm.exceptions.RealmException: Could not find io.realm.XxxxxMediator
        at io.realm.RealmConfiguration.getModuleMediator(RealmConfiguration.java:377)
        at io.realm.RealmConfiguration.createSchemaMediator(RealmConfiguration.java:351)
        at io.realm.RealmConfiguration$Builder.build(RealmConfiguration.java:826)

下記の様にrealmを初期化した際に発生します。

    Realm.init(context);
    RealmConfiguration config = new RealmConfiguration.Builder()
            .name(zzzzz)
            .schemaVersion(zzzzz)
            .modules(new Xxxxx())
            .migration(zzzzz)
            .build();

この時のgradleは以下。

build.gradle(Project)
buildscript {
    ext.kotlin_version = '1.3.10'
    repositories {
        mavenCentral()
        google()
        maven { url 'https://maven.google.com/' }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        xxxxx
        classpath "io.realm:realm-gradle-plugin:5.1.0"
        xxxxx
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
build.gradle(Module)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'realm-android'
xxxxx

解決方法

gradleを以下の様に修正します。

build.gradle(Module)
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'  // 参考:https://realm.io/docs/java/5.8.0/
apply plugin: 'realm-android'
xxxxx

・・・ん? アプリが上手く動作しないぞ・・・?

どうやら、上記の対策では不十分で、芋づる式にkaptを必要とする依存関係が出てきました。
発生したエラーは省略しますが、最終的には以下の設定になりました。

build.gradle(Module)
dependencies {
-    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
+
+    def bkCompilerVer = '8.8.1'
+    annotationProcessor "com.jakewharton:butterknife-compiler:${bkCompilerVer}"
+    kapt "com.jakewharton:butterknife-compiler:${bkCompilerVer}"


-    annotationProcessor 'org.parceler:parceler:1.1.10'
+
+    def parcelerVer = '1.1.10'
+    annotationProcessor "org.parceler:parceler:${parcelerVer}"
+    kapt "org.parceler:parceler:${parcelerVer}"


     annotationProcessor "com.google.dagger:dagger-compiler:${daggerVersion}"
+    kapt "com.google.dagger:dagger-compiler:${daggerVersion}"
+    kaptTest "com.google.dagger:dagger-compiler:${daggerVersion}"
}

終わりに

同じ問題に苦しむ人が少しでも減ることを願っています。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2