2015-10-16 298 views
57

在開發針對4.1以上版本的所有版本的Android應用程序時,我觀察到卸載我的應用程序並重新安裝應用程序不會清除其數據。Android應用程序在卸載並重新安裝後會記住其數據

該應用程序旨在存儲它在第一個屏幕中提供的詳細信息。 在操作系統版本4.4.4中再次卸載並安裝後,應用程序會提示用戶填寫數據,這是正常的。但是,在6.0版本中,相同的安裝/卸載順序會帶回原始輸入的數據。

我試圖確保通過訪問/data/data/my package folder看到數據庫卸載後消失了,確實該文件夾被卸載過程中刪除。

我試圖通過訪問設置頁面,通過鈦備份,刪除應用程序,結果是一樣的。該設備植根於運行v6.0的Nexus 5。

什麼可能是這種奇怪的行爲的原因?

回答

111

這是因爲Android 6具有自動備份功能。如果您不希望備份數據或者想要包含或排除某些資源,則需要在清單中調整android:allowBackupandroid:fullBackupContent。這不是一個錯誤。

+12

這是正確的答案,它爲我工作(我有同樣的問題) 爲了避免這種行爲調查是必要把 **機器人:allowBackup =「假」 **和**的android:fullBackupContent =」 false「** 在manifest.xml中 – frusso

+18

如果您有些人想知道,android:allowBackup和android:fullBackupContent是要添加到中的屬性 – Jack

+1

從文檔:android:fullBackupContent指向包含備份選項的XML文件。默認情況下,大多數文件都已備份。 儘管將此設置爲「false」不會觸發任何錯誤,但我想這是錯誤的設置。 – bajicdusko

4

greywolf82的回答是正確的,但我想爲此添加一些信息。

在開發我的Android應用程序(使用Xamarin),我注意到,每當我從Visual Studio從幾個月前重新啓動應用程序,我的數據將恢復到的數據。如果我停止並重新從VS運行它,或者如果我完全卸載應用程序並重新安裝它,這並不重要。

還值得一提的是,我們從未明確告知應用程序存儲備份。

備份似乎也從Visual Studio啓動時覆蓋較新的數據,我們可以選擇使用我們的應用程序的發佈版本,並也越來越被備份覆蓋較新的數據用戶的報告。

因爲我不知道什麼時候備份和還原發生這個功能似乎導致唯一的問題。

我們修改我們的AndroidManifest如下面的XML:

<?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,一切似乎工作。我希望這是一個選擇加入功能,但...似乎它可能會默認情況下應用程序沒有指定任何一種方式的價值。

1

您應該檢查設備的備份和重置設置,並關閉自動恢復(重新安裝應用程序時,備份的設置和數據都將被恢復。)

關閉自動備份與自動的不同恢復。如果您認爲爲您的應用程序啓用自動備份將會很有幫助。但是,如果您認爲這會讓最終用戶不知道其設備的自動恢復功能已打開,請隨時關閉它。

就我而言,我關掉了allowBackup功能,但既然我已經對雲以前版本的備份,但仍保持在恢復。

在Android 6.0上查看三星設備的參考圖片。其他設備和版本可能有不同的屏幕。見下圖。

Automatic Restore Setting under Backup and Reset

0

我最近需要採取的這些功能,我能夠發現文檔並在廣泛的測試,這是我已經能夠推斷出:

安卓allowbackup - 將備份本地應用程序數據在它所在的設備上。

Android:fullBackupContent-與Google的備份恢復api結合使用,並且可以通過xml文件控制CAN,以指定要備份的內容以及可以實施的BackupManager類,以便進一步控制過程。

但是,文檔指出,並且我已經通過測試進行了確認,只有當設備恢復並且觸發恢復應用程序數據進程時,恢復纔會發生。或者當應用程序通過adb進行側載時它也會恢復,這正是我們通過Android Studio在我們的設備上運行應用程序進行測試或調試時所要做的。請注意,如果您設置了android:allowbackup,但不要將android:fullBackupContent配置爲使用Google API代碼,則應用程序數據只能在本地存儲,而如果您正確配置了它,則如果您的應用程序已備份,並且您獲得了新設備,則應用程序數據存儲在雲上,因此可以在新設備上進行恢復。

相關問題