2015-10-16 300 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代码,则应用程序数据只能在本地存储,而如果您正确配置了它,则如果您的应用程序已备份,并且您获得了新设备,则应用程序数据存储在云上,因此可以在新设备上进行恢复。

相关问题