Roomが「DatabaseのVersionが違う」とクラッシュしてしまう原因パターン
パターン1:新規開発もしくは、初めてDBに変更を加える
パターン2:DB修正後とかに、再度DBに修正を加える
パターン1:新規開発もしくは、初めてDBに変更を加える
例
①開発環境(Android Studio)で、初めてDBに修正を入れてDBバージョンを1→2に上げた
②実機(Android端末)から、アプリ(←DBバージョン1)をアンインストールせずに、アプリを再インストール(←DBバージョン2)
③マイグレーションが実行される
(DBバージョンが上がっているアプリを再インストールされたため、マイグレーションが実行される)
★ここで例外が出て(クラッシュして)しまうとダメ!!
ここでクラッシュするのはヤバいので、要調査&要対応!!
パターン2:DB修正後とかに、再度DBに修正を加える
例
①開発環境(Android Studio)で修正したDB周りのコードが間違えてたから直したお!
(DBバージョンは2から変更せず、 DBの定義(Entityクラスとか)修正)
②実機(Android端末)から、アプリ(←DBバージョン2)をアンインストールせずに、アプリを再インストール(←DBバージョン2)
③実機(Android端末)内で、allowBackup
のバックアップ情報(コードを直す前のDB情報)を参照
④マイグレーションが実行されず、DB情報が噛み合わなくなって例外が発生(クラッシュする)!!
(↑開発中はよくある(よくやってしまう)ため、あまり問題にはならない)
これの回避策は、
アプリをちゃんとアンインストールしてから再インストールしなおす。
もしくは、実機(Android端末)の設定から、アプリのストレージ情報を手動で削除する。
こうすることで、DBのバックアップ情報を削除できる!!
備考
Roomで「DatabaseのVersionが違う」とクラッシュしてしまうのは、もし問題が元々のソースコードであった場合、アプリアップデート時に検出されるような目立つクラッシュ。
開発環境では、DBを弄ることが多いため、この手のクラッシュは必然的に出やすくなるが、テスト観点としても気にしておく必要はある。
参考サイト