Fix YukiHookDataChannel when "android" package is registered cannot callback in Android 13 or latest

This commit is contained in:
2022-10-04 03:50:58 +08:00
parent 0c05890b31
commit e259ad87f9
2 changed files with 16 additions and 2 deletions

View File

@@ -299,7 +299,9 @@ class YukiHookDataChannel private constructor() {
/** 发送广播 */
(context ?: YukiHookAppHelper.currentApplication())?.sendBroadcast(Intent().apply {
action = if (isXposedEnvironment) moduleActionName() else hostActionName(packageName)
setPackage(if (isXposedEnvironment) YukiHookBridge.modulePackageName else packageName)
/** 由于系统框架的包名可能不唯一 - 为防止发生问题不再对系统框架的广播设置接收者包名 */
if (packageName != YukiHookBridge.SYSTEM_FRAMEWORK_NAME)
setPackage(if (isXposedEnvironment) YukiHookBridge.modulePackageName else packageName)
data.takeIf { it.isNotEmpty() }?.forEach {
when (it.value) {
null -> Unit

View File

@@ -56,6 +56,7 @@ import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiMemberHook
import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiMemberReplacement
import com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus
import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel
import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper
import com.highcapable.yukihookapi.hook.xposed.parasitic.activity.config.ActivityProxyConfig
import com.highcapable.yukihookapi.hook.xposed.parasitic.activity.delegate.HandlerDelegate
import com.highcapable.yukihookapi.hook.xposed.parasitic.activity.delegate.IActivityManagerProxy
@@ -68,6 +69,9 @@ import com.highcapable.yukihookapi.hook.xposed.parasitic.activity.delegate.Instr
*/
internal object AppParasitics {
/** [YukiHookDataChannel] 是否已经注册 */
private var isDataChannelRegistered = false
/** [Activity] 代理是否已经注册 */
private var isActivityProxyRegistered = false
@@ -230,7 +234,15 @@ internal object AppParasitics {
}
}, IntentFilter().apply { e.first.forEach { e -> addAction(e) } })
}
runCatching { YukiHookDataChannel.instance().register(it, packageName) }
runCatching {
/** 过滤系统框架与一系列服务组件包名不唯一的情况 */
if (isDataChannelRegistered ||
(YukiHookAppHelper.currentPackageName() == YukiHookBridge.SYSTEM_FRAMEWORK_NAME &&
packageName != YukiHookBridge.SYSTEM_FRAMEWORK_NAME)
) return
YukiHookDataChannel.instance().register(it, packageName)
isDataChannelRegistered = true
}
}
}.onFailure { param.throwable = it }
}