【Android】Realmのモデルクラスを変更後、アプリを再インストールして起動するとRealmMigrationNeededExceptionが発生する
3時間ハマった
事象
Realmのモデルクラスを変更後(カラム名のリネームをしただけ)、アプリの再インストールを行って起動すると RealmMigrationNeededExceptionを吐いてアプリがクラッシュしてしまう。
原因
RealmMigrationNeededException reinstallでググったらissueに挙がっていた・・
Android6.0からアプリの自動バックアップ機能が実装されたらしく、GoogleDriveに保存するのだとか。
これが原因で、新旧realmファイルがぶつかってMigrationNeddedExceptionを起こしているっぽい。
おそらく再インストール時には以下のようになっている?
アプリのインストール
↓
GoogleDriveからバックアップを取得
↓
バックアップしたアプリに対して更新
(新旧realmファイルがこんにちは)
↓
MigrationNeddedException
対策
公式ドキュメントを見る限り、以下の手順を実施すればよい。
Back up user data with Auto Backup | Android Developers
手順1.GoogleDriveからバックアップを削除する
削除後にアプリを再インストールするとMigrationNeddedExceptionは起こらなかった。
手順2.realmファイルをバックアップ対象から外す
バックアップの設定ファイル(backup.xml)を作成し、AndroidManifest.xmlのapplication要素内にandroid:fullBackupContentを追加する。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hoge"> <application android:fullBackupContent="@xml/backup"
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <exclude domain="file" path="default.realm"/> <exclude domain="file" path="default.realm.lock"/> </full-backup-content>