Android应用重装后如何保留SharedPreferences数据?
从以下关键环节排查修复:
1. 优化备份规则配置
你的backup_rules.xml已包含sharedpref域,但可简化规则,去掉不必要的域避免干扰(仅保留需要备份的内容):
<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="EXPONEA_PUSH_TOKEN.xml"/> <!-- 其他需要备份的域(如database、file)按需保留 --> </full-backup-content>
注:sharedpref域对应应用私有目录下的shared_prefs文件夹,path="."会包含该目录下所有文件,你的name.xml(对应getSharedPreferences("name",...))会被正常匹配。
2. 修正Manifest配置
- 显式声明
android:allowBackup="true"(默认值,但显式声明更稳妥) - 测试阶段移除
android:fullBackupOnly="true":该属性强制仅使用Google Play自动备份,本地adb测试时会失效 - 最终Manifest配置示例:
<application android:allowBackup="true" android:fullBackupContent="@xml/backup_rules" tools:replace="android:fullBackupContent">
3. 手动触发备份与恢复(测试必做)
Android自动备份默认每日触发,且需满足充电、锁屏、联网条件,测试阶段必须手动操作:
触发备份
终端执行:
adb shell bmgr backupnow [你的应用包名]
确认返回结果显示Success,表示备份完成。
触发恢复
先卸载应用,再执行:
adb shell bmgr restore [你的应用包名]
重新安装应用后检查SharedPreferences数据。
4. 确保数据持久化完成
测试时将apply()替换为commit(),确保数据同步写入磁盘后再备份:
val namePreferences: SharedPreferences = getSharedPreferences("name", Context.MODE_PRIVATE) namePreferences.edit().putString("name_test", user.name).commit()
5. 检查签名与系统设置
- 重装后的应用必须和备份时使用相同签名:测试用debug签名需一致,正式环境需用同一keystore
- 设备需开启系统备份功能:进入设置→系统→备份,开启云端/本地备份选项(使用Google备份需登录对应账号)
内容的提问来源于stack exchange,提问作者user19579696
相关产品推荐
相关产品推荐

