我在某些设备(带有Android 7的Nexus 5x)上遇到非常奇怪的情况:当我清理其数据并卸载它,然后与Studio一起安装时,该应用并未统一,但它使用的是1月24日的数据!我在平板电脑上尝试了相同的步骤,但该应用程序没有数据。
我已经重复了很多次此过程,我清理了我的项目,多次对其进行了重建,并且始终以1月24日的数据(包括数据库和共享首选项)开始。
我什至尝试了adb shell并运行as来清理数据:
bullhead:/data/data/lelisoft.com.lelimath.debug $ ls -l databases/ total 232 -rw-rw---- 1 u0_a259 u0_a259 98304 2017-02-05 11:03 lelimath.sqlite -rw------- 1 u0_a259 u0_a259 16928 2017-02-05 11:03 lelimath.sqlite-journal
我删除了它们,应用程序似乎空了-直到删除并重新安装-1月24日又回来了。
这是一个日志,它是如何开始的:
$ adb shell am start -n "lelisoft.com.lelimath.debug/lelisoft.com.lelimath.activities.DashboardActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D Waiting for application to come online: lelisoft.com.lelimath.debug | lelisoft.com.lelimath.debug.test I/InstantRun: Instant Run Runtime started. Android package is lelisoft.com.lelimath.debug, real application class is lelisoft.com.lelimath.helpers.LeliMathApp. D/l.c.l.h.LeliMathApp: onCreate() D/l.c.l.h.BalanceHelper: Current points balance: 234
这是从调试器获得的数据库位置:
/data/user/0/lelisoft.com.lelimath.debug/databases/lelimath.sqlite
摇篮:
android { signingConfigs { } compileSdkVersion 24 buildToolsVersion "23.0.3" defaultConfig { applicationId "lelisoft.com.lelimath" resValue 'string', 'app_name', 'LeliMath' minSdkVersion 16 targetSdkVersion 24 versionCode 300 versionName '3.0.0' resValue "string", "app_build_number", getDate(); resValue "string", "app_version", versionName; } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { applicationIdSuffix ".debug" resValue 'string', 'app_name', 'LeliMath DEV' } }
清单部分:
<application android:name=".helpers.LeliMathApp" android:allowBackup="true" android:fullBackupContent="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" tools:ignore="GoogleAppIndexingWarning">
我不想恢复出厂设置以摆脱此数据。我认为这些数据不在我的构建中。我尚未添加它们,并且平板电脑中的应用安装后为空。
自Android 6.0(v 23)起,Android引入了一项称为“应用自动备份”的新功能。它的作用是将应用程序的某些文件备份到用户的Google驱动器。它更新的文件列表包括:
getFilesDir()
getDatabasePath(String)
getDir(String, int)
getExternalFilesDir(String)
现在,该行中的内容manifest.xml对此负责:
manifest.xml
android:allowBackup="true"
如果您希望禁用备份,则应选择将值设置为false。
false
此外,备份的数据间隔为24小时,Android 为此目的使用JobScheduler API,这意味着用户无法控制数据传输过程。
此外,用于自动备份的空间被限制为25MB,并且不计入用户的空间配额。
25
此外,您可以设置为,<include>并<exclude>上传某些类型的数据,例如,您可能不需要保存用户机密数据,因此它也很灵活,有关更多信息,请访问:Android Auto Backup for Apps( Google开发100天)
<include>
<exclude>