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


191

在开发针对4.1以上所有版本的Android应用程序时,我发现卸载并重新安装应用程序不会清除其数据。

该应用程序旨在将其询问的详细信息存储在其第一个屏幕中。在OS版本4.4.4中卸载并再次安装后,该应用程序会提示用户填写数据,这是正常的。但是,在6.0版中,相同的安装/卸载顺序将恢复原始输入的数据。

我试图通过访问来确保/data/data/my package folder卸载后数据库消失,并且确实在卸载过程中删除了该文件夹。

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

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

Answers:


321

这是因为Android 6具有自动备份功能。如果您不希望备份数据,或者想要包含或排除某些资源,则需要进行调整,android:allowBackupandroid:fullBackupContent在清单<application>标记中。这不是错误。

有关Android上自动备份的更多信息,请点击此处


27
这是正确的答案,它对我有用(我有同样的问题)为了避免这种行为,有必要将 android:allowBackup =“ false”android:fullBackupContent =“ false” 放入manifest.xml中
frusso 2016年

32
在某些情况下,你不知道,Android的:allowBackup和android:fullBackupContent是属性在<应用程序/>添加
杰克

2
从文档:android:fullBackupContent指向包含备份选项的XML文件。默认情况下,将备份大多数文件。尽管将此设置为“ false”不会触发任何错误,但我认为设置是错误的。
bajicdusko

3
不确定为什么要保留默认行为以进行备份,因为该行为与以前的版本不同步,因此很烦人。那些想要它的人可以打开它。
Atul

7
有人知道如何删除备份吗?
1800年信息

29

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,一切似乎都可以正常工作。我希望这是一个选择加入的功能,但是...似乎默认情况下对于未指定任一种方式的应用程序来说,它可能处于启用状态。


谢谢。我遇到过同样的问题。
哈迪·富拉迪·塔拉里

15

您应该检查设备的“备份和重置”设置,然后关闭“自动还原”(重新安装应用程序时,将还原备份的设置和数据。)

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

就我而言,我关闭了allowBackup功能,但是由于我已经在Cloud上备份了以前的版本,因此仍继续进行还原。

请参阅图片作为Android 6.0上Samsung设备的参考。其他设备和版本可能具有不同的屏幕。参见下图。

备份和重置下的自动还原设置


我遇到了同样的问题,我的应用在启动时为少数用户备份了数据。是否有可能清除/丢弃同步数据?
Aditya Chauhan

5

我最近需要利用这些功能,能够发现文档,并且经过广泛的测试,这是我能够得出的结论:

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

Android:fullBackupContent-与Google的备份还原API结合使用,可以通过xml文件进行控制,以指定要确切备份的内容,以及可以实现的BackupManager类,以进一步控制该过程。

但是,文档说明了这一点,并且我已经通过测试确认,只有在恢复设备和触发恢复应用程序数据过程时,才会发生恢复。或者,当通过adb侧面加载应用程序时,它也会恢复,这就是我们通过Android Studio运行应用程序以在设备上进行测试或调试时所做的事情。请注意,如果您设置了android:allowbackup但未使用Google api代码配置android:fullBackupContent,则应用程序数据仅存储在本地,而如果配置正确,则如果您的应用程序已备份并且您获得了新设备数据存储在云中,因此可以在新设备上还原。


3

在清单文件中的应用程序标记下添加android:allowBackup =“ false”解决了我的问题。

是使用自动备份备份用户数据的android文档


2

只需在manifiedt.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>

2

只是添加了这一点,我们发现,即使在通过界面和adb删除应用程序之后,在Android 9(在HMD诺基亚设备上)中,资产仍被保留。

添加答案:

android:allowBackup="false" android:fullBackupOnly="false"

显然,这不是一个新答案-而是对与我们处于同一位置的人们的观察。


2

如果您在指定Android 10,那么你必须把android:hasFragileUserData="true"在应用标签AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application
    android:name=".MyApplication"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="true"
    android:hasFragileUserData="true">

    .....

     </application>

 </manifest>

android:hasFragileUserData是一个新的清单设置(我在猜测)。“如果为true,则提示用户在卸载时保留应用程序的数据”。对于滥用而言,这似乎已经成熟,但是我可以看到它在某些应用程序中可能有用。

参见https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.