You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用重装后如何保留SharedPreferences数据?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:35:36