環境
- Android Studio 2.3.3
- Java8
- Kotlin 1.1.51
- realm 3.5.0
現象
既存のJavaのAndroid StudioプロジェクトにKotlinを導入してビルドしたところ、起動時以下のエラーが必ず発生してお手上げとなった。
java.lang.RuntimeException: Unable to resume activity {my.package.MainActivity}: java.lang.IllegalArgumentException: MyMessageData is not part of the schema for this Realm at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3429) at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3469) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2732) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) Caused by: java.lang.IllegalArgumentException: MessageData is not part of the schema for this Realm at io.realm.internal.modules.CompositeMediator.getMediator(CompositeMediator.java:169) at io.realm.internal.modules.CompositeMediator.getTableName(CompositeMediator.java:87) at io.realm.RealmSchema.getTable(RealmSchema.java:218) at io.realm.RealmSchema.getSchemaForClass(RealmSchema.java:239) at io.realm.RealmQuery.<init>(RealmQuery.java:122) at io.realm.RealmQuery.createQuery(RealmQuery.java:76) at io.realm.Realm.where(Realm.java:1342)
MyMessageData is not part of the schema for this Realm
日本語訳:MyMessageDataは、このレルムのスキーマの一部ではありません
おかしいな、Kotlin追加する前までビルド通ってたんだけどなー
解決方法
なんと、app/build.gradleの宣言順を入れ替えるだけで解決した。
Before
apply plugin: 'com.android.application' apply plugin: 'realm-android' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { ...
After
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' // <= こいつを一番最後にする android { ...
apply plugin: 'realm-android'
よ、お前は一番最後だったのか…
これだけでビルドが通った。
エラーでググるとStackOverFlowにも回答がすぐに見つかったため、割と同様にハマっている人が多いのかもしれない。
参考リンク
- Kotlin+Realmで*** is not part of the schema for this Realm問題にハマった - Qiita https://qiita.com/u_nation/items/d401a2b589d3c101ce19
- java - Object is not part of the schema for this Realm - Stack Overflow https://stackoverflow.com/questions/37887303/object-is-not-part-of-the-schema-for-this-realm
- realm-java/build.gradle at master · realm/realm-java https://github.com/realm/realm-java/blob/master/examples/kotlinExample/build.gradle