小ネタですが、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
発生した問題
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は以下。
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"
}
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'realm-android'
xxxxx
解決方法
gradleを以下の様に修正します。
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を必要とする依存関係が出てきました。
発生したエラーは省略しますが、最終的には以下の設定になりました。
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}"
}
終わりに
同じ問題に苦しむ人が少しでも減ることを願っています。