首页 文章

Android应用在卸载并重新安装后会记住其数据

提问于
浏览
112

在开发针对4.1以上版本的Android应用时,我发现卸载我的应用并再次安装它并不会清除其数据 .

该应用程序旨在存储它在第一个屏幕中询问的详细信息 . 在OS 4.4.4版中再次卸载并安装后,应用程序会提示用户填写数据,这是正常的 . 但是在6.0版中,相同的安装/卸载顺序会带回最初输入的数据 .

我试图通过访问 /data/data/my package folder 来确保卸载后数据库已经消失,并且在卸载期间该文件夹确实被删除了 .

我尝试通过访问设置页面,通过Titanium Backup删除应用程序,结果相同 . 该设备植根于运行v6.0的Nexus 5 .

这种奇怪行为的原因是什么?

5 回答

  • 192

    这是因为Android 6具有自动备份功能 . 如果你不是一个错误,你需要在清单 <application> 标签中调整 android:allowBackupandroid:fullBackupContent .

    有关Android here上的AutoBackup的更多信息 .

  • 9

    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,一切似乎都有效 . 我希望这是一个选择加入的功能,但是......对于没有指定值的应用程序,默认情况下可能会出现这种情况 .

  • 10

    您应检查设备的备份和重置设置,并关闭自动恢复(重新安装应用程序时,将恢复备份的设置和数据 . )

    关闭自动备份与自动恢复不同 . 如果您认为为您的应用程序启用自动备份会有所帮助 . 但是,如果您认为这会使最终用户不知道其设备的自动恢复功能已打开,请随时将其关闭 .

    在我的情况下,我关闭了allowBackup功能,但由于我已经在 Cloud 上备份了以前的版本,它仍然在继续恢复 .

    在Android 6.0上查看图像作为Samsung设备的参考 . 其他设备和版本可能具有不同的屏幕 . 见下图 .

    Automatic Restore Setting under Backup and Reset

  • 0

    我最近需要利用这些功能,我能够发现文档,经过广泛的测试,这是我能够推断出来的:

    Android:allowbackup - 将备份其所在设备上的本地应用数据 .

    Android:fullBackupContent - 与Google的备份恢复api结合使用,可以通过xml文件控制,以指定要备份的内容,以及可以实现的BackupManager类,以进一步控制该过程 .

    但是,文档说明并且我已经通过测试确认,只有在设备恢复并且触发恢复应用程序数据进程时才会进行恢复 . 或者,当应用程序通过adb进行侧载时,它也会恢复,这是我们通过Android Studio在我们的设备上运行应用程序进行测试或调试时所执行的操作 . 请注意,如果您设置android:allowbackup但不使用Google api代码配置android:fullBackupContent,那么应用数据只会存储在本地,而如果您正确配置,那么如果您的应用已备份并且您获得了新设备数据存储在 Cloud 上,因此可以在新设备上恢复 .

  • 3

    我认为你不是手动卸载应用程序,我也有这个问题,那是因为我只是在应用程序中运行一个设备,这样应用程序似乎是相同的,只有我最近做出的更改才会反映出来,但是我从设备卸载应用程序并再次安装apk删除记录,我的应用程序就像一个新的安装 .

    不要尝试在设备上使用测试模式,构建apk,卸载您设备上的当前应用程序,然后再次安装apk,启动您的应用程序,看看差异 . 希望能帮助到你 .

相关问题