BETA

開発中のAndroidアプリを再インストールするたびに昔のデータが復活するときの対処法

投稿日:2020-04-09
最終更新:2020-04-09

※この内容は Flutter SDK v1.12.13+hotfix.5、Android 9が乗っている AQUOS SH-M05で確認しました。
※これは Flutter での話なのですが Android アプリ全般に当てはまると思います。

事象

2020年に入ってから開発を始めた Flutter のアプリがありました。
それは SQLite を使ってローカルにデータを保存するアプリで、今までずっと順調だったのですが、昨日ふと気づきました。

「なぜかアプリをアンインストールしてから再インストールしたとき、毎回同じデータが登録された状態になっている……?」

今までずっと、アプリをアンインストールすると登録されていたデータは消えていました。
というか昨日も登録したデータはアンインストールすると消えていたのですが、なぜか再インストールすると特定のデータが登録された状態から始まるのです。

毎回登録されているデータは、3月26日に登録したテストデータでした。

もちろん3月26日以来、何度もアンインストールしましたし、再インストールもしました。
いろいろなデータも登録したり消したりしました。
でも3月26日に登録した特定のデータだけが毎回復活してしまう状態になっていました。

最初はソースコード内にテストデータを挿入するようなデバッグコードがあるのかと思いましたが、検索してもありませんでした。
更に詳しく調べていくうちに、どうやらアプリをインストールした時点で SQLite のデータベースファイルが存在しており、そのデータベースファイルには3月26日に登録したテストデータが入った状態であることがわかりました。

そしてそのデータベースファイルは、消しても消してもインストールするたびに復活していたのです。

夜の1時まで調べてその事実を突き止めたところで完全にわけがわからなくなり、私はあきらめて寝ました。

真相

私のテスト端末OSはAndroid 9なのですが、Androidにはバックアップ機能があります。
私はしばらく前からそのバックアップ機能をONにしていたのですが、3月26日のテストデータを登録した時点で偶然バックアップが取られてしまっていました。
そのせいでアプリをインストールするたびに3月26日時点のデータが復元されていました。

対応

とりあえずバックアップを切るとバックアップデータは消えます。バックアップを切ったことにより、私のテスト端末で3月26日のデータが復元されることはなくなりました。

アプリ側の対応としてはバックアップが取得されないように AndroidManifest.xml を設定する必要があるとのことです。

<application  

    android:name="app_name"  
    android:allowBackup="false"  
    android:fullBackupOnly="false"  

参考

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

技術系記事を書きます。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう