概要

  • Realm の model を変えた場合は、一旦アプリを uninstall しておかないと、migration が必要だよという RealmMigrationNeededException を吐く
  • というのは、model が変わったから当然なんだけど、いつからか uninstall → install しても同じ exception を吐くようになって謎だったのでメモ
  • デバイスから *.realm を全部消して、package 名が入っているディレクトリ・ファイルを全部消しても、「model にメンバが1つ増えたから migration しろ」的な exception を吐くから謎すぎた

原因

  • ここ に書かれている通り、auto-backup が効いてて、uninstall → install しても実行する前に古いデータでリストアされるので、exception を吐くのだった。。そんな気もしたけど、、ちょっとハマった^^;

解決方法

  • 以下のどれかで良さそう(一番上しか確認してない)

    • AndroidManifest.xml の application element の android:allowBackup attribute を false にしてバックアップを無効にする

    • 上記サイトに書かれてる通り、res/xml/backup.xml でバックアップするファイルから realm 関係を exclude する

      • サーバ側のデータを消すには
        adb shell bmgr wipe com.google.android.gms/.backup.BackupTransportService <package.name>
        とするらしい

      • サーバ名(↑の com.google.android.gms/.backup.BackupTransportService の部分)は、
        adb shell bmgr list transports
        を実行して * が付いているところ

    • ここに書かれている通り、res/xml/backup.xml でバックアップするファイルを include する