New XSharedPreferences 使用

  • Lsposed New XSharedPreferences 使用

  • 资料来源:

    https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences

  • 更新

    1
    2022.03.17 初始

导语

重新整理与 nowakelock 的一切,New XSharedPreferences 似乎一直是遗失的一环.

最终结果是 New XSharedPreferences 依旧无法完成 ipc,它是只读的,单向信息传递,仅能从模块到 hook app.

New XSharedPreferences

主要参考: > https://github.com/LSPosed/LSPosed/wiki/New-XSharedPreferences

启用 New XSharedPreferences

  • 设置 xposedminiversion >= 93

  • 或同样在 AndroidManifest.xml 中添加 xposedsharedprefs

    1
    2
    3
    <meta-data
    android:name="xposedsharedprefs"
    android:value="true" />

之后是正常在 module 中使用 ShardPreferences,并配置为 Context.MODE_WORLD_READABLE

之后在 hook app 中获取 XSharedPreferences(String packageName) or XSharedPreferences(String packageName, String prefFileName) 正常读取.

1
2
3
4
5
private fun getPref(path: String): SharedPreferences? {
val pref = XSharedPreferences(BuildConfig.APPLICATION_ID, path)
return if (pref.file.canRead()) pref else null
}
val pref = XSharedPreferences(BuildConfig.APPLICATION_ID, path)

如同文档里说明的,通常使用 packName 获取 pref.

NewXSharedPreferences 有个好处是在系统初始化阶段就能直接读到信息,不像其他 ipc 必须等到应用启动完毕才可以.

结语

一篇水文,仅记录,估计 nowakelock 的 ipc 会拆分成两个部分: 传递配置的使用 NewXShardedPreferences,从 hook 写回模块的过程使用多种方式解耦.