Androidアプリは、アンインストールおよび再インストール後にデータを記憶します


191

4.1より上のすべてのバージョンを対象とするAndroidアプリを開発しているときに、アプリをアンインストールして再度インストールしてもデータが消去されないことに気付きました。

アプリは、最初の画面で要求する詳細を保存するように設計されています。OSバージョン4.4.4でアンインストールして再度インストールした後、アプリはユーザーにデータの入力を求めますが、これは正常です。ただし、バージョン6.0では、同じインストール/アンインストールシーケンスにより、最初に入力されたデータが返されます。

/data/data/my package folderアンインストール後にデータベースがなくなっていることを確認するためににアクセスして確認しようとしましたが、実際には、そのフォルダーはアンインストール中に削除されます。

Titanium Backupから設定ページにアクセスしてアプリを削除しようとしましたが、結果は同じです。デバイスは、v6.0を実行するNexus 5をルートとします。

この奇妙な行動の理由は何でしょうか?

回答:


322

Android 6には自動バックアップ機能があるからです。あなたは、チューニングする必要があるandroid:allowBackupandroid:fullBackupContentあなたのマニフェストで<application>、あなたのデータをバックアップしたり、いくつかのリソースを含めるか、除外したい場合はしたくない場合は、タグ。バグではありません。

Android での自動バックアップの詳細については、こちらをご覧ください


27
これは正解であり、私にとってはうまくいきます(同じ問題がありました)この動作を回避するには、 android:allowBackup = "false"android:fullBackupContent = "false" をmanifest.xmlに
追加

32
ご存知の方もいらっしゃると思いますが、android:allowBackupとandroid:fullBackupContentは<application />に追加するプロパティです
Jack '

2
ドキュメントから:android:fullBackupContentは、バックアップオプションを含むXMLファイルを指します。デフォルトでは、ほとんどのファイルがバックアップされます。これを「false」に設定してもエラーは発生しませんが、設定が間違っていると思います。
bajicdusko 2017

3
動作が以前のバージョンと同期していないので迷惑になるため、バックアップを取るためにデフォルトの動作を維持した理由がわかりません。それを望む人はそ​​れをオンにすることができます。
Atul

7
誰でもバックアップを削除する方法を知っていますか?
1800情報

29

greywolf82の答えは正しいですが、これにいくつかの情報を追加したいと思います。

(Xamarinを使用して)Androidアプリを開発しているときに、Visual Studioからアプリを再起動すると、データが数か月前のデータに戻ることに気付きました。単に停止してVSから再実行しただけでも、アプリを完全にアンインストールして再インストールしても問題ありませんでした。

また、アプリにバックアップを保存するよう明示的に指示したことはありません。

Visual Studioから起動すると、バックアップが新しいデータを上書きするように見えました。また、アプリのリリースビルドを使用し、バックアップによって新しいデータが上書きされたというユーザーのレポートがあります。

バックアップと復元がいつ発生するか正確にはわからないので、この機能は問題のみを引き起こすようです。

次のxmlに示すように、AndroidManifestを変更しました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.XXXXXXX" android:versionName="8.0.0" android:installLocation="auto" android:versionCode="439">
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="24" />
    <application 
               android:label="@string/appName" 
               android:icon="@drawable/icon_small" 
               android:installLocation="internalOnly" 
               android:largeHeap="true"
               android:allowBackup="false"
               android:fullBackupOnly="false"
               />
...
</manifest>

値を明示的にfalseに設定すると、すべてが機能するようになります。これはオプトイン機能であると思いますが...どちらの方法でも値を指定しないアプリでは、デフォルトでオンになっているようです。


ありがとう。同じ問題がありました。
Hadi Fooladi Talari

15

デバイスのバックアップとリセットの設定を確認し、自動復元をオフにする必要があります(アプリケーションを再インストールすると、バックアップされた設定とデータが復元されます)。

自動バックアップをオフにすることは、自動復元とは異なります。アプリケーションの自動バックアップをオンにすると便利だと思う場合は、そうしてください。ただし、これにより、デバイスの自動復元機能がオンになっていることに気付いていないエンドユーザーになってしまった場合は、遠慮なくオフにしてください。

私の場合、allowBackup機能をオフにしましたが、クラウド上に以前のバージョンのバックアップが既にあるため、引き続き復元し続けました。

Android 6.0でのSamsungデバイスのリファレンスとしての画像を参照してください。他のデバイスやバージョンでは画面が異なる場合があります。下の画像を参照してください。

バックアップおよびリセット時の自動復元設定


私も同じ問題を抱えています。私のアプリは、オンのときに少数のユーザーのデータをバックアップしていました。同期されたデータをクリア/破棄する可能性はありますか?
Aditya Chauhan

5

私は最近、これらの機能を利用する必要があり、ドキュメントを明らかにすることができました。広範なテストの結果、これは私が推測できたものです。

Android:allowbackup-ローカルアプリのデータを、それが配置されているデバイスにバックアップします。

Android:fullBackupContent-GoogleのバックアップリストアAPIと組み合わせて使用​​し、xmlファイルを介して制御して、何をバックアップするかを指定したり、プロセスをさらに制御するために実装できるBackupManagerクラスを指定したりできます。

ただし、ドキュメントには、デバイスが復元され、アプリデータの復元プロセスがトリガーされた場合にのみ復元が行われることがテストで確認されています。または、アプリがadbを介してサイドロードされたときにも復元されます。これは、Android Studioを介してデバイスでテストまたはデバッグするためにアプリを実行するときに行うことです。android:allowbackupを設定し、Google APIコードでandroid:fullBackupContentを構成しない場合、アプリのデータはローカルにのみ保存されますが、適切に構成した場合、アプリがバックアップされ、新しいデバイスを取得した場合、アプリデータはクラウドに保存されたので、新しいデバイスで復元できます。


3

マニフェストファイルのアプリケーションタグの下にandroid:allowBackup = "false"を追加すると、問題が解決しました。

ここに自動バックアップでユーザーデータをバックアップするためのAndroidのドキュメントがあります


2

manifiest.xmlでandroid:allowBackup = "true"をandroid:allowBackup = "false"に変更するだけです。動作します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    <application
        android:allowBackup="false"
        android:icon="@mipmap/app_icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
</manifest>

2

これに追加するだけで、Android 9(HMD Nokiaデバイス)では、インターフェイスとadbを介してアプリを削除した後でも、アセットが保持されていることがわかりました。

追加の答え:

android:allowBackup="false" android:fullBackupOnly="false"

明らかに、これは新しい答えではありませんが、私たちと同じ立場にいた人々のための観察です。


2

あなたがアンドロイド10をターゲットにしているなら、あなたはのandroid:hasFragileUserData="true"アプリケーションタグを入れなければなりませんAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true"
    android:hasFragileUserData="true">

    .....

     </application>

 </manifest>

android:hasFragileUserDataは新しいマニフェスト設定です(私は推測しています)。「trueの場合、ユーザーはアンインストール時にアプリのデータを保持するように求められます」。これは乱用には熟しているように見えますが、一部のアプリで役立つ場合があるかどうかはわかります。

https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.htmlを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.