2015-10-16 18 views
57

4.1以上のすべてのバージョンを対象とするAndroidアプリを開発しているうちに、自分のアプリをアンインストールしてから再度インストールしてもデータは消去されません。Androidアプリがアンインストールして再インストールした後にデータを記憶する

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

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

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

この異常な動作の原因は何でしょうか?

答えて

111

Android 6に自動バックアップが設定されているからです。データをバックアップしたくない場合や、いくつかのリソースを含めるか除外したい場合は、マニフェストにandroid:allowBackupandroid:fullBackupContentを調整する必要があります。これはバグではありません。

+12

これが正解であり、このbehaviouを避けるために (私は同じ問題を抱えていた)私のために働く を置くことが必要である**アンドロイド:allowBackup =「false」を**と**アンドロイド:fullBackupContent =」 false "** in manifest.xml – frusso

+18

もしあなたが不思議な人がいたら、アンドロイド:allowBackupとandroid:fullBackupContentはに追加するプロパティーです – Jack

+1

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

4

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

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

私たちは明示的にバックアップを保存するようアプリに指示していないことにも注意してください。

また、Visual Studioからの起動時に新しいデータを上書きしてしまったように見えます。また、アプリケーションのリリースビルドを使用していて、バックアップによって上書きされた新しいデータを取得したという報告もあります。

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

次のXMLに示すように、我々は、我々のAndroidManifestを変更した:我々は、明示的に値をfalseに設定し

<?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> 

たら、すべてが動作しているようです。私はこれがオプトイン機能であると期待していますが...どちらの方法でも値を指定しないアプリでは、デフォルトでオンになっているようです。

1

あなたがお使いのデバイスのバックアップをチェックして、設定をリセットし、自動復元オフにしてください(アプリケーションを再インストールする場合、設定をバックアップし、データが復元されます。)

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

私の場合、私はallowBackup機能を無効にしましたが、クラウド上の以前のバージョンのバックアップがすでにあったので、それでもリストアを続けました。

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

Automatic Restore Setting under Backup and Reset

0

I最近、これらの機能を利用するために必要な、私はドキュメントを発見することができましたし、広範なテスト時に、これは私が推測することができたものです:

アンドロイド:allowbackup - 意志バックアップローカルアプリデータは、そのデバイスが配置されているデバイス上にあります。

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

しかし、ドキュメントでは、デバイスの復元と復元アプリケーションのデータプロセスが起動されたときにのみリストアが行われると述べており、テストで確認しています。または、Android Studioを使用してデバイスでテストまたはデバッグするためにアプリを実行するときに行う、adb経由でのアプリのサイドロード時にも復元されます。 android:allowbackupを設定しても、Google APIコードを使ってandroid:fullBackupContentを設定しないと、アプリデータはローカルにしか保存されませんが、正しく設定した場合は、アプリがバックアップされ、データはクラウドに保存され、新しいデバイスに復元することができます。

関連する問題