在开发针对所有4.1以上版本的Android应用程序时,我发现卸载应用程序并重新安装它不会清除其数据。
该应用程序被设计成存储它在第一个屏幕中询问的详细信息。
在操作系统4.4.4版本卸载并重新安装后,app会提示用户填写数据,这是正常的。但是在6.0版本中,相同的安装/卸载顺序将带回最初输入的数据。
我试图通过访问/data/data/my package文件夹来确保数据库在卸载后已经消失,并且在卸载期间确实删除了该文件夹。
我试图通过访问设置页面删除该应用程序,通过Titanium Backup,结果是一样的。该设备是运行v6.0的Nexus 5。
这种奇怪行为的原因是什么?
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,一切似乎都可以工作。我希望这是一个可选择的功能,但是……似乎对于没有指定值的应用程序,默认情况下它是打开的。
我最近需要利用这些功能,我能够找到文档,经过广泛的测试,我能够推断出以下内容:
Android:allowbackup -将备份它所在设备上的本地应用数据。
Android:fullBackupContent -与谷歌的备份恢复api一起使用,可以通过一个xml文件来控制,以指定备份的内容,以及一个BackupManager类,您可以实现对过程的进一步控制。
However the documentation states, and I have confirmed with testing, that a restore will only occur either when the device is restored and the restore app data process is triggered. OR it will also restore when the app is sideloaded through adb, which is what we do when we run the app for testing or debug on our devices through Android Studio. Note that if you set android:allowbackup but do not configure android:fullBackupContent with a Google api code then the apps data only gets stored locally, whereas if you configured it properly then if your app was backed up and you get a new device the apps data was stored on the cloud so it can be restored on a new device.