# YukiHookPrefsBridge - class | Yuki Hook API
一个使用 Kotlin 构建的高效 Hook API 与 Xposed 模块解决方案

# # YukiHookPrefsBridge - class

    class YukiHookPrefsBridge private constructor(private var context: Context?)

变更记录

`v1.0` `添加`

`v1.1.9` `修改`

`YukiHookModulePrefs` 更名为 `YukiHookPrefsBridge`

功能描述

> `YukiHookAPI` 对 `SharedPreferences`、`XSharedPreferences` 的扩展存储桥实现。

在不同环境智能选择存取使用的对象。

特别注意

模块与宿主之前共享数据存储为实验性功能，仅在 LSPosed 环境测试通过，EdXposed 理论也可以使用但不再推荐。

使用 LSPosed 环境请在 `AndroidManifests.xml` 中将 `xposedminversion` 最低设置为 `93`。

详见 New XSharedPreferences
在新窗口中打开。

若你在按照规定配置后依然无法使用或出现文件权限错误问题，可以参考 isEnableHookSharedPreferences。

未使用 LSPosed 环境请将你的模块 `API` 降至 `26` 以下，`YukiHookAPI` 将会尝试使用 `makeWorldReadable` 但仍有可能不成功。

太极请参阅 文件权限/配置/XSharedPreference
在新窗口中打开。

对于在模块环境中使用 `PreferenceFragmentCompat`，`YukiHookAPI` 提供了 `ModulePreferenceFragment` 来实现同样的功能。

可选配置

若你不想将你的模块的 `xposedminversion` 最低设置为 `93`，你可以在 `AndroidManifest.xml` 中添加 `xposedsharedprefs` 来实现支持。

详见 New XSharedPreferences
在新窗口中打开。

> 示例如下

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

## isXSharePrefsReadable - field

变更记录

`v1.0.90` `新增`

`v1.1.5` `作废`

请转移到 `isPreferencesAvailable`

## isRunInNewXShareMode - field

变更记录

`v1.0.78` `新增`

`v1.1.5` `作废`

请转移到 `isPreferencesAvailable`

## # isPreferencesAvailable - field

    val isPreferencesAvailable: Boolean

变更记录

`v1.1.5` `新增`

功能描述

> 获取当前 `YukiHookPrefsBridge` 的可用状态。

在 (Xposed) 宿主环境中返回 `XSharedPreferences` 可用状态 (可读)。

在模块环境中返回当前是否处于 New XSharedPreferences 模式 (可读可写)。

## # name - method

    fun name(name: String): YukiHookPrefsBridge

变更记录

`v1.0` `添加`

功能描述

> 自定义 Sp 存储名称。

功能示例

在 `Activity` 中的使用方法。

> 示例如下

    prefs("custom_name").getString("custom_key")

在 (Xposed) 宿主环境 `PackageParam` 中的使用方法。

> 示例如下

    prefs("custom_name").getString("custom_key")

## # direct - method

    fun direct(): YukiHookPrefsBridge

变更记录

`v1.0.5` `新增`

功能描述

> 忽略缓存直接读取键值。

无论是否开启 `YukiHookAPI.Configs.isEnablePrefsBridgeCache`。

仅在 `XSharedPreferences` 下生效。

## # native - method

    fun native(): YukiHookPrefsBridge

变更记录

`v1.1.9` `新增`

功能描述

> 忽略当前环境直接使用 `Context.getSharedPreferences` 存取数据。

## # getString - method

    fun getString(key: String, value: String): String

变更记录

`v1.0` `添加`

功能描述

> 获取 `String` 键值。

## # getStringSet - method

    fun getStringSet(key: String, value: Set<String>): Set<String>

变更记录

`v1.0.77` `新增`

功能描述

> 获取 `Set<String>` 键值。

## # getBoolean - method

    fun getBoolean(key: String, value: Boolean): Boolean

变更记录

`v1.0` `添加`

功能描述

> 获取 `Boolean` 键值。

## # getInt - method

    fun getInt(key: String, value: Int): Int

变更记录

`v1.0` `添加`

功能描述

> 获取 `Int` 键值。

## # getLong - method

    fun getLong(key: String, value: Long): Long

变更记录

`v1.0` `添加`

功能描述

> 获取 `Long` 键值。

## # getFloat - method

    fun getFloat(key: String, value: Float): Float

变更记录

`v1.0` `添加`

功能描述

> 获取 `Float` 键值。

## # contains - method

    fun contains(key: String): Boolean

变更记录

`v1.1.9` `新增`

功能描述

> 判断当前是否包含 `key` 键值的数据。

智能识别对应环境读取键值数据。

## # all - method

    fun all(): HashMap<String, Any?>

变更记录

`v1.0.77` `新增`

功能描述

> 获取全部存储的键值数据。

智能识别对应环境读取键值数据。

特别注意

每次调用都会获取实时的数据，不受缓存控制，请勿在高并发场景中使用。

## remove - method

变更记录

`v1.0` `添加`

`v1.1.9` `作废`

请转移到 `edit` 方法

## clear - method

变更记录

`v1.0.77` `新增`

`v1.1.9` `作废`

请转移到 `edit` 方法

## putString - method

变更记录

`v1.0` `添加`

`v1.1.9` `作废`

请转移到 `edit` 方法

## putStringSet - method

变更记录

`v1.0.77` `新增`

`v1.1.9` `作废`

请转移到 `edit` 方法

## putBoolean - method

变更记录

`v1.0` `添加`

`v1.1.9` `作废`

请转移到 `edit` 方法

## putInt - method

变更记录

`v1.0` `添加`

`v1.1.9` `作废`

请转移到 `edit` 方法

## putLong - method

变更记录

`v1.0` `添加`

`v1.1.9` `作废`

请转移到 `edit` 方法

## putFloat - method

变更记录

`v1.0` `添加`

`v1.1.9` `作废`

请转移到 `edit` 方法

## # get - method

    inline fun <reified T> get(prefs: PrefsData<T>, value: T): T

变更记录

`v1.0.67` `新增`

功能描述

> 智能获取指定类型的键值。

## put - method

变更记录

`v1.0.67` `新增`

`v1.1.9` `作废`

请转移到 `edit` 方法

## # edit - method

    fun edit(): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 创建新的 `Editor`。

在模块环境中或启用了 `isUsingNativeStorage` 后使用。

注意

在 (Xposed) 宿主环境下只读，无法使用。

## # edit - method

    fun edit(initiate: Editor.() -> Unit)

变更记录

`v1.1.9` `新增`

功能描述

> 创建新的 `Editor`。

自动调用 `Editor.apply` 方法。

在模块环境中或启用了 `isUsingNativeStorage` 后使用。

注意

在 (Xposed) 宿主环境下只读，无法使用。

## # clearCache - method

    fun clearCache()

变更记录

`v1.0.5` `新增`

功能描述

> 清除 `YukiHookPrefsBridge` 中缓存的键值数据。

无论是否开启 `YukiHookAPI.Configs.isEnablePrefsBridgeCache`。

调用此方法将清除当前存储的全部键值缓存。

## # Editor - class

    inner class Editor internal constructor()

变更记录

`v1.1.9` `新增`

功能描述

> `YukiHookPrefsBridge` 的存储代理类。

请使用 `edit` 方法来获取 `Editor`。

在模块环境中或启用了 `isUsingNativeStorage` 后使用。

注意

在 (Xposed) 宿主环境下只读，无法使用。

### # remove - method

    fun remove(key: String): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 移除全部包含 `key` 的存储数据。

### # remove - method

    inline fun <reified T> remove(prefs: PrefsData<T>): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 移除 `PrefsData.key` 的存储数据。

### # clear - method

    fun clear(): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 移除全部存储数据。

### # putString - method

    fun putString(key: String, value: String): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 存储 `String` 键值。

### # putStringSet - method

    fun putStringSet(key: String, value: Set<String>): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 存储 `Set<String>` 键值。

### # putBoolean - method

    fun putBoolean(key: String, value: Boolean): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 存储 `Boolean` 键值。

### # putInt - method

    fun putInt(key: String, value: Int): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 存储 `Int` 键值。

### # putLong - method

    fun putLong(key: String, value: Long): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 存储 `Long` 键值。

### # putFloat - method

    fun putFloat(key: String, value: Float): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 存储 `Float` 键值。

### # put - method

    inline fun <reified T> put(prefs: PrefsData<T>, value: T): Editor

变更记录

`v1.1.9` `新增`

功能描述

> 智能存储指定类型的键值。

### # commit - method

    fun commit(): Boolean

变更记录

`v1.1.9` `新增`

功能描述

> 提交更改 (同步)。

### # apply - method

    fun apply()

变更记录

`v1.1.9` `新增`

功能描述

> 提交更改 (异步)。