Flutter中Shared Preferences在Android设备的存储位置及外部访问方法
一、Shared Preferences的物理存储路径
Flutter应用的Shared Preferences数据并非存在Android/data目录,而是存储在应用的私有沙箱目录中:
- 完整路径:
/data/data/<你的应用包名>/shared_prefs/ - 文件名格式:通常为
<你的应用包名>_preferences.xml - 无法通过普通文件管理器查看的原因:该目录属于应用私有存储区,Android 11+系统进一步限制了外部访问权限,非Root设备的普通文件管理器无权限进入。
二、不通过应用本身获取Shared Preferences文件的方法
1. 调试自己的开发设备(无需Root)
利用adb工具即可导出文件:
- 步骤1:连接设备到电脑,确保开启USB调试
- 步骤2:执行命令直接导出(若有权限问题则用步骤3):
adb pull /data/data/<你的应用包名>/shared_prefs/<你的应用包名>_preferences.xml ./本地保存路径 - 步骤3:权限受限情况下的迂回方案:
# 进入应用沙箱 adb shell run-as <你的应用包名> # 将文件复制到外部存储 cp shared_prefs/<你的应用包名>_preferences.xml /sdcard/ # 退出沙箱后拉取到本地 exit adb pull /sdcard/<你的应用包名>_preferences.xml ./本地保存路径
2. 获取用户设备上的文件(应用无法启动时)
根据用户设备情况选择方案:
- 方案A:技术型用户可指导其用adb导出,步骤同上,让用户将导出的文件发送给你
- 方案B:若用户设备已Root,让其使用带Root权限的文件管理器(如Solid Explorer),直接进入
/data/data/<你的应用包名>/shared_prefs/目录复制文件 - 方案C:提前预防——在应用中加入备份功能,正常运行时将Shared Preferences文件备份到
Android/data/<你的应用包名>/files/这类可外部访问的目录,或支持云端备份,后续用户即使无法启动应用,也能从外部存储拿到备份文件
注意事项
- Android 11及以上版本,发布版应用(
android:debuggable="false")无法使用run-as命令,此时非Root设备无法通过adb获取文件,只能依赖用户Root或提前备份 - 导出的
.xml文件为明文存储,直接用文本编辑器即可查看所有键值对
内容的提问来源于stack exchange,提问作者S-Man
相关产品推荐
相关产品推荐

