diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md
index 292fa505..f84c3ba6 100644
--- a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md
+++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md
@@ -158,4 +158,28 @@ fun checkingVersionEquals(result: (Boolean) -> Unit)
> 获取模块与宿主的版本是否匹配。
-通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。
\ No newline at end of file
+通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。
+
+### obtainLoggerInMemoryData - method
+
+```kotlin:no-line-numbers
+fun obtainLoggerInMemoryData(result: (ArrayList) -> Unit)
+```
+
+**Change Records**
+
+`v1.1.4` `added`
+
+**Function Illustrate**
+
+> 获取模块与宿主之间的 `ArrayList` 数据。
+
+由于模块与宿主处于不同的进程,我们可以使用数据通讯桥访问各自的调试日志数据。
+
+::: danger
+
+模块与宿主必须启用 [YukiHookLogger.Configs.isRecord](../../log/LoggerFactory#isrecord-field) 才能获取到调试日志数据。
+
+由于 Android 限制了数据传输大小的最大值,如果调试日志过多可能会造成 **TransactionTooLargeException** 异常。
+
+:::
\ No newline at end of file
diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md
index 0bba05fd..fc90977f 100644
--- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md
+++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.md
@@ -150,4 +150,28 @@ fun checkingVersionEquals(result: (Boolean) -> Unit)
> 获取模块与宿主的版本是否匹配。
-通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。
\ No newline at end of file
+通过此方法可原生判断 Xposed 模块更新后宿主并未重新装载造成两者不匹配的情况。
+
+### obtainLoggerInMemoryData - method
+
+```kotlin:no-line-numbers
+fun obtainLoggerInMemoryData(result: (ArrayList) -> Unit)
+```
+
+**变更记录**
+
+`v1.1.4` `新增`
+
+**功能描述**
+
+> 获取模块与宿主之间的 `ArrayList` 数据。
+
+由于模块与宿主处于不同的进程,我们可以使用数据通讯桥访问各自的调试日志数据。
+
+::: danger
+
+模块与宿主必须启用 [YukiHookLogger.Configs.isRecord](../../log/LoggerFactory#isrecord-field) 才能获取到调试日志数据。
+
+由于 Android 限制了数据传输大小的最大值,如果调试日志过多可能会造成 **TransactionTooLargeException** 异常。
+
+:::
\ No newline at end of file
diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt
index 4f3b67e0..81899f5d 100644
--- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt
+++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/channel/YukiHookDataChannel.kt
@@ -39,7 +39,10 @@ import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.Parcelable
+import android.os.TransactionTooLargeException
import com.highcapable.yukihookapi.YukiHookAPI
+import com.highcapable.yukihookapi.hook.log.YukiHookLogger
+import com.highcapable.yukihookapi.hook.log.YukiLoggerData
import com.highcapable.yukihookapi.hook.log.yLoggerE
import com.highcapable.yukihookapi.hook.log.yLoggerW
import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication
@@ -75,6 +78,12 @@ class YukiHookDataChannel private constructor() {
/** 模块构建版本号结果标签 */
private const val RESULT_MODULE_GENERATED_VERSION = "module_generated_version_result"
+ /** 调试日志数据获取标签 */
+ private const val GET_YUKI_LOGGER_INMEMORY_DATA = "yuki_logger_inmemory_data_get"
+
+ /** 调试日志数据结果标签 */
+ private val RESULT_YUKI_LOGGER_INMEMORY_DATA = ChannelData>("yuki_logger_inmemory_data_result")
+
/** 仅监听结果键值 */
private const val VALUE_WAIT_FOR_LISTENER = "wait_for_listener_value"
@@ -170,9 +179,15 @@ class YukiHookDataChannel private constructor() {
addAction(if (isXposedEnvironment) hostActionName(packageName) else moduleActionName(context))
}
)
- /** 注册监听模块与宿主的版本是否匹配 */
- nameSpace(context, packageName, isSecure = false).wait(GET_MODULE_GENERATED_VERSION) { fromPackageName ->
- nameSpace(context, fromPackageName, isSecure = false).put(RESULT_MODULE_GENERATED_VERSION, YukiHookBridge.moduleGeneratedVersion)
+ nameSpace(context, packageName, isSecure = false).with {
+ /** 注册监听模块与宿主的版本是否匹配 */
+ wait(GET_MODULE_GENERATED_VERSION) { fromPackageName ->
+ nameSpace(context, fromPackageName, isSecure = false).put(RESULT_MODULE_GENERATED_VERSION, YukiHookBridge.moduleGeneratedVersion)
+ }
+ /** 注册监听模块与宿主之间的调试日志数据 */
+ wait(GET_YUKI_LOGGER_INMEMORY_DATA) { fromPackageName ->
+ nameSpace(context, fromPackageName, isSecure = false).put(RESULT_YUKI_LOGGER_INMEMORY_DATA, YukiHookLogger.inMemoryData)
+ }
}
}
@@ -287,6 +302,21 @@ class YukiHookDataChannel private constructor() {
put(GET_MODULE_GENERATED_VERSION, packageName)
}
+ /**
+ * 获取模块与宿主之间的 [ArrayList]<[YukiLoggerData]> 数据
+ *
+ * 由于模块与宿主处于不同的进程 - 我们可以使用数据通讯桥访问各自的调试日志数据
+ *
+ * - ❗模块与宿主必须启用 [YukiHookLogger.Configs.isRecord] 才能获取到调试日志数据
+ *
+ * - ❗由于 Android 限制了数据传输大小的最大值 - 如果调试日志过多可能会造成 [TransactionTooLargeException] 异常
+ * @param result 回调 [ArrayList]<[YukiLoggerData]>
+ */
+ fun obtainLoggerInMemoryData(result: (ArrayList) -> Unit) {
+ wait(RESULT_YUKI_LOGGER_INMEMORY_DATA) { result(it) }
+ put(GET_YUKI_LOGGER_INMEMORY_DATA, packageName)
+ }
+
/**
* 发送广播
* @param data 键值数据