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 6b1a5d10..ce3416c2 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
@@ -66,6 +66,30 @@ inline fun with(initiate: NameSpace.() -> Unit): NameSpace
> 创建一个调用空间。
+### allowSendTooLargeData - method
+
+```kotlin:no-line-numbers
+fun allowSendTooLargeData(): NameSpace
+```
+
+**变更记录**
+
+`v1.1.5` `added`
+
+**功能描述**
+
+> 解除发送数据的大小限制并禁止开启分段发送功能。
+
+仅会在每次调用时生效,下一次没有调用此方法则此功能将被自动关闭。
+
+你还需要在整个调用域中声明注解 `CauseProblemsApi` 以消除警告。
+
+::: danger
+
+若你不知道允许此功能会带来何种后果,请勿使用。
+
+:::
+
### put - method
```kotlin:no-line-numbers
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 036dd5af..75bae7a9 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
@@ -58,6 +58,30 @@ inline fun with(initiate: NameSpace.() -> Unit): NameSpace
> 创建一个调用空间。
+### allowSendTooLargeData - method
+
+```kotlin:no-line-numbers
+fun allowSendTooLargeData(): NameSpace
+```
+
+**变更记录**
+
+`v1.1.5` `新增`
+
+**功能描述**
+
+> 解除发送数据的大小限制并禁止开启分段发送功能。
+
+仅会在每次调用时生效,下一次没有调用此方法则此功能将被自动关闭。
+
+你还需要在整个调用域中声明注解 `CauseProblemsApi` 以消除警告。
+
+::: danger
+
+若你不知道允许此功能会带来何种后果,请勿使用。
+
+:::
+
### put - method
```kotlin:no-line-numbers
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 503e3ecf..b50b3b7c 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
@@ -25,7 +25,7 @@
*
* This file is Created by fankes on 2022/5/16.
*/
-@file:Suppress("StaticFieldLeak", "UNCHECKED_CAST", "unused", "MemberVisibilityCanBePrivate", "DEPRECATION")
+@file:Suppress("StaticFieldLeak", "UNCHECKED_CAST", "unused", "MemberVisibilityCanBePrivate", "DEPRECATION", "KotlinConstantConditions")
package com.highcapable.yukihookapi.hook.xposed.channel
@@ -38,9 +38,11 @@ import android.content.Context.ACTIVITY_SERVICE
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
+import android.os.Parcel
import android.os.Parcelable
import android.os.TransactionTooLargeException
import com.highcapable.yukihookapi.YukiHookAPI
+import com.highcapable.yukihookapi.annotation.CauseProblemsApi
import com.highcapable.yukihookapi.hook.log.YukiHookLogger
import com.highcapable.yukihookapi.hook.log.YukiLoggerData
import com.highcapable.yukihookapi.hook.log.yLoggerE
@@ -48,10 +50,12 @@ import com.highcapable.yukihookapi.hook.log.yLoggerW
import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication
import com.highcapable.yukihookapi.hook.xposed.bridge.YukiHookBridge
import com.highcapable.yukihookapi.hook.xposed.channel.data.ChannelData
+import com.highcapable.yukihookapi.hook.xposed.channel.data.wrapper.ChannelDataWrapper
import com.highcapable.yukihookapi.hook.xposed.channel.priority.ChannelPriority
import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper
import java.io.Serializable
import java.util.concurrent.ConcurrentHashMap
+import kotlin.math.round
/**
* 实现 Xposed 模块的数据通讯桥
@@ -73,6 +77,17 @@ class YukiHookDataChannel private constructor() {
/** 是否为 (Xposed) 宿主环境 */
private val isXposedEnvironment = YukiHookBridge.hasXposedBridge
+ /**
+ * 系统广播允许发送的最大数据字节大小
+ *
+ * 标准为 1 MB - 实测不同系统目前已知能得到的数据分别有 1、2、3 MB
+ *
+ * 经过测试分段发送 900 KB 数据在 1 台 Android 13 系统的设备上依然会发生异常
+ *
+ * 综上所述 - 为了防止系统不同限制不同 - 最终决定设置为 500 KB - 超出后以此大小分段发送数据
+ */
+ private const val RECEIVER_DATA_MAX_BYTE_SIZE = 500 * 1024
+
/** 模块构建版本号获取标签 */
private const val GET_MODULE_GENERATED_VERSION = "module_generated_version_get"
@@ -109,6 +124,9 @@ class YukiHookDataChannel private constructor() {
/** 当前注册广播的 [Context] */
private var receiverContext: Context? = null
+ /** 是否允许发送超出 [RECEIVER_DATA_MAX_BYTE_SIZE] 大小的数据 */
+ private var isAllowSendTooLargeData = false
+
/** 广播接收器 */
private val handlerReceiver by lazy {
object : BroadcastReceiver() {
@@ -138,6 +156,7 @@ class YukiHookDataChannel private constructor() {
if (YukiHookAPI.isLoadedFromBaseContext) error("YukiHookDataChannel not allowed in Custom Hook API")
if (YukiHookBridge.hasXposedBridge && YukiHookBridge.modulePackageName.isBlank())
error("Xposed modulePackageName load failed, please reset and rebuild it")
+ isAllowSendTooLargeData = false
}
/**
@@ -206,6 +225,20 @@ class YukiHookDataChannel private constructor() {
return NameSpace(context = context ?: receiverContext, packageName, isSecure)
}
+ /**
+ * 分段数据临时集合实例
+ * @param listData [List] 数据数组
+ * @param mapData [Map] 数据数组
+ * @param setData [Set] 数据数组
+ * @param stringData [String] 数据数组
+ */
+ internal inner class SegmentsTempData(
+ var listData: ArrayList> = arrayListOf(),
+ var mapData: ArrayList