修复反射修改 mPreferencesDir 未恢复导致备份恢复后设置丢失的问题

This commit is contained in:
HapeLee
2026-05-29 01:02:17 +08:00
parent 7f8b2c205b
commit c641ce5d44
@@ -33,12 +33,17 @@ fun Context.getSharedPreferences(
// 获取 ContextImpl。mPreferencesDir变量,该变量保存了数据文件的保存路径
val fieldMPreferencesDir = objMBase.javaClass.getDeclaredField("mPreferencesDir")
fieldMPreferencesDir.isAccessible = true
// 保存原始路径
val originalDir = fieldMPreferencesDir.get(objMBase)
// 创建自定义路径
val file = File(dir)
// 修改mPreferencesDir变量的值
fieldMPreferencesDir.set(objMBase, file)
// 返回修改路径以后的 SharedPreferences :%FILE_PATH%/%fileName%.xml
return getSharedPreferences(fileName, Activity.MODE_PRIVATE)
val sp = getSharedPreferences(fileName, Activity.MODE_PRIVATE)
// 恢复原始路径,避免后续 defaultSharedPreferences 等调用读到错误目录
fieldMPreferencesDir.set(objMBase, originalDir)
return sp
} catch (e: NoSuchFieldException) {
e.printOnDebug()
} catch (e: IllegalArgumentException) {