web-dev-qa-db-ja.com

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

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

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

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

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

この奇妙な行動の理由は何だろうか?

150
Narayanan

Android 6には自動バックアップがあるからです。データをバックアップしたくない場合や、リソースを追加または除外したい場合は、マニフェストのAndroid:allowBackupタグでAndroid:fullBackupContent<application>を調整する必要があります。それはバグではありません。

Androidでの自動バックアップの詳細 こちら

254
greywolf82

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に設定すると、すべてうまくいくようです。私はこれがオプトイン機能であることを期待していますが、どちらの方法でも値を指定していないアプリではデフォルトでオンになっているようです。

18
Victor Chelaru

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

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

私の場合は、allowBackup機能をオフにしましたが、以前のバージョンのバックアップをクラウド上に既に持っていたので、復元は続行されました。

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

バックアップとリセットによる自動復元設定

12
Matcieou7th

私は最近これらの機能を利用する必要がありました、私はドキュメンテーションを発見することができました、そして徹底的なテストでこれは私が推測することができたものです:

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

Android:fullBackupContent - Googleのバックアップ復元APIと組み合わせて使用​​され、xmlファイルで制御してバックアップ対象を正確に指定できます。また、プロセスをさらに制御するために実装できるBackupManagerクラスも指定できます。

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

5
Xijukx

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

1
Vinay John

Manifest.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>
1
Nag Kosanam

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

追加の答え:

Android:allowBackup="false" Android:fullBackupOnly="false"

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

0
JRK

私はあなたが手動でアプリケーションをアンインストールしているのではないと思います、私もこの問題を抱えていました、それは私がちょうど1つのアプリを実行していたからです。私はデバイスから私の自己をアプリをアンインストールし、再びレコードが削除され、私のアプリはちょうど新しいインストールのようなものですAPKをインストールしてください。

デバイスモードでのテストを使用しないでください。apkをビルドし、現在のアプリをデバイスからアンインストールしてから、もう一度apkをインストールし、アプリを起動して違いを確認してください。それが役に立てば幸い。

0
Anana Aristotle