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

新手上路,请多包涵

在开发针对 4.1 以上所有版本的 Android 应用程序时,我观察到卸载我的应用程序并再次安装它不会清除其数据。

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

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

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

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

原文由 Narayanan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

这是因为Android 6 有自动备份。您需要调整 android:allowBackupandroid:fullBackupContent 清单中的 <application> 标记 如果您不想备份或排除某些资源.这不是错误。

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

原文由 greywolf82 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

在开发我的 Android 应用程序(使用 Xamarin)时,我注意到每当我从 Visual Studio 重新启动该应用程序时,我的数据都会恢复为几个月前的数据。无论我只是停止并从 VS 重新运行它,还是完全卸载该应用程序并重新安装,都没有关系。

同样值得注意的是,我们从未明确告诉应用程序存储备份。

从 Visual Studio 启动时,备份似乎也覆盖了较新的数据,并且我们有用户使用我们应用程序的发布版本的报告,并且更新的数据也被备份覆盖了。

因为我不知道备份和恢复发生的确切时间,所以这个功能似乎只会导致问题。

我们通过添加以下两行修改了我们的 AndroidManifest:

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

添加它们后,我们的 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,一切似乎都有效。我希望这是一个选择加入的功能,但是……对于没有以任何方式指定值的应用程序,它似乎默认情况下处于启用状态。

原文由 Victor Chelaru 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题