偷摸骗一下SharedPreferences持久化存储方案,用户再卸载试试??

目录

  • 吐槽
  • 反射

吐槽

SharedPreferences用烂了吧?

在封装友好的情况下存储一些配置项之类的简单信息还是很高效方便的.

but就是一点不好,一旦卸载应用,数据就丢了.神烦不? mmp

神说:我烦毛线?管我屁事,巴拉巴拉\*&$*%#*^ 你个只能写写八阿哥的辣鸡 !…*

反射

我们发现SharedPreferences,已下简称SP,被存储的位置是/data/data/包名/shared_prefs,android这样设计是为了保证数据的安全性,不被其它应用随意读取到.(这里先排除root的设备)同时带来的问题就是当我们的APP被卸载后data下的目录也被同时移除了.有没有办法让用户卸载后应用再次安装时SP数据还保留呢?

这个可以有,换一个存储路径!

通过阅读源码,我们发现SP并不支持配置文件路径.那这里我们任然可以选择万精油的反射来完成.

下面是骚操作:

1
2
3
4
5
6
7
8
9
private void spPathChange(File file) {
Field field = ContextWrapper.class.getDeclaredField("mBase");
field.setAccessible(true);
Object obj = field.get(this);
field = obj.getClass().getDeclaredField("mPreferencesDir");
field.setAccessible(true);
FileUtils.createOrExistsDir(file);
field.set(obj, file);// 替换路径
}

这里是使用方法:

1
2
3
//你需要存储的私有路径
File file = new File(Environment.getExternalStorageDirectory(),File.separator + "MyApp" + File.separator + "cache");
spPathChange(file);

是的,到这里就完成了。愉快的保存,随便的卸载吧。

随缘打赏!