# YukiHookDataChannel - class | Yuki Hook API
An efficient Hook API and Xposed Module solution built in Kotlin

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

# # YukiHookDataChannel - class

    class YukiHookDataChannel private constructor()

Change Records

`v1.0.88` `added`

Function Illustrate

> 实现 Xposed 模块的数据通讯桥。

通过模块与宿主相互注册 `BroadcastReceiver` 来实现数据的交互。

模块需要将 `Application` 继承于 `ModuleApplication` 来实现此功能。

Pay Attention

模块与宿主需要保持存活状态，否则无法建立通讯。

## # NameSpace - class

    inner class NameSpace internal constructor(private val context: Context?, private val packageName: String)

Change Records

`v1.0.88` `added`

`v1.0.90` `modified`

新增 `isSecure` 参数

`v1.1.9` `modified`

移除 `isSecure` 参数

Function Illustrate

> `YukiHookDataChannel` 命名空间。

### # with - method

    inline fun with(initiate: NameSpace.() -> Unit): NameSpace

Change Records

`v1.0.88` `added`

Function Illustrate

> 创建一个调用空间。

### # dataMaxByteSize - field

    var dataMaxByteSize: Int

Change Records

`v1.1.9` `added`

Function Illustrate

> `YukiHookDataChannel` 允许发送的最大数据字节大小。

默认为 `500 KB (500 * 1024)`，详情请参考 `receiverDataMaxByteSize` 的注释。

最小不能低于 `100 KB (100 * 1024)`，否则会被重新设置为 `100 KB (100 * 1024)`。

设置后将在全局生效，直到当前进程结束。

超出最大数据字节大小后的数据将被自动分段发送。

Pay Attention

请谨慎调整此参数，如果超出了系统能够允许的大小会引发 TransactionTooLargeException 异常。

### # dataMaxByteCompressionFactor - field

    var dataMaxByteCompressionFactor: Int

Change Records

`v1.1.9` `added`

Function Illustrate

> `YukiHookDataChannel` 允许发送的最大数据字节大小倍数 (分段数据)。

默认为 `3`，详情请参考 `receiverDataMaxByteCompressionFactor` 的注释。

最小不能低于 `2`，否则会被重新设置为 `2`。

设置后将在全局生效，直到当前进程结束。

超出最大数据字节大小后的数据将按照此倍数自动划分 `receiverDataMaxByteSize` 的大小。

Pay Attention

请谨慎调整此参数，如果超出了系统能够允许的大小会引发 TransactionTooLargeException 异常。

### # allowSendTooLargeData - method

    fun allowSendTooLargeData(): NameSpace

Change Records

`v1.1.5` `added`

Function Illustrate

> 解除发送数据的大小限制并禁止开启分段发送功能。

仅会在每次调用时生效，下一次没有调用此方法则此功能将被自动关闭。

你还需要在整个调用域中声明注解 `CauseProblemsApi` 以消除警告。

Pay Attention

若你不知道允许此功能会带来何种后果，请勿使用。

### # put - method

    fun <T> put(key: String, value: T)

    fun <T> put(data: ChannelData<T>, value: T?)

    fun put(vararg data: ChannelData<*>)

Change Records

`v1.0.88` `added`

Function Illustrate

> 发送键值数据。

### # put - method

    fun put(key: String)

Change Records

`v1.0.88` `added`

Function Illustrate

> 仅发送键值监听，使用默认值 `VALUE_WAIT_FOR_LISTENER` 发送键值数据。

### # wait - method

    fun <T> wait(key: String, priority: ChannelPriority?, result: (value: T) -> Unit)

    fun <T> wait(data: ChannelData<T>, priority: ChannelPriority?, result: (value: T) -> Unit)

Change Records

`v1.0.88` `added`

`v1.0.90` `modified`

移除默认值 `value`

`v1.1.5` `modified`

新增 `priority` 参数

Function Illustrate

> 获取键值数据。

### # wait - method

    fun wait(key: String, priority: ChannelPriority?, callback: () -> Unit)

Change Records

`v1.0.88` `added`

`v1.1.5` `modified`

新增 `priority` 参数

Function Illustrate

> 仅获取监听结果，不获取键值数据。

Pay Attention

仅限使用 VALUE_WAIT_FOR_LISTENER 发送的监听才能被接收。

### # checkingVersionEquals - method

    fun checkingVersionEquals(priority: ChannelPriority?, result: (Boolean) -> Unit)

Change Records

`v1.0.88` `added`

`v1.1.5` `modified`

新增 `priority` 参数

Function Illustrate

> 获取模块与宿主的版本是否匹配。

通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。

### # obtainLoggerInMemoryData - method

    fun obtainLoggerInMemoryData(priority: ChannelPriority?, result: (ArrayList<YukiLoggerData>) -> Unit)

Change Records

`v1.1.4` `added`

`v1.1.5` `modified`

新增 `priority` 参数

Function Illustrate

> 获取模块与宿主之间的 `ArrayList<YukiLoggerData>` 数据。

由于模块与宿主处于不同的进程，我们可以使用数据通讯桥访问各自的调试日志数据。

Pay Attention

模块与宿主必须启用 YukiHookLogger.Configs.isRecord 才能获取到调试日志数据。

由于 Android 限制了数据传输大小的最大值，如果调试日志过多将会自动进行分段发送，数据越大速度越慢。