From b2cfb8bb4774729b0d67bba22e38adbd37410ac4 Mon Sep 17 00:00:00 2001 From: klxiaoniu Date: Thu, 27 Jul 2023 12:47:37 +0800 Subject: [PATCH] fix: PluginDelayableHook for TIM 3.5.2 and reduce logs --- .../ioctl/hook/misc/DisableQQCrashReportManager.kt | 2 ++ .../main/java/me/ketal/base/PluginDelayableHook.kt | 13 ++++++++----- .../main/java/xyz/nextalone/hook/HideTroopLevel.kt | 3 ++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/cc/ioctl/hook/misc/DisableQQCrashReportManager.kt b/app/src/main/java/cc/ioctl/hook/misc/DisableQQCrashReportManager.kt index 5a62c08619..c6e507433d 100644 --- a/app/src/main/java/cc/ioctl/hook/misc/DisableQQCrashReportManager.kt +++ b/app/src/main/java/cc/ioctl/hook/misc/DisableQQCrashReportManager.kt @@ -29,6 +29,7 @@ import io.github.qauxv.dsl.FunctionEntryRouter import io.github.qauxv.hook.CommonSwitchFunctionHook import io.github.qauxv.util.Initiator import io.github.qauxv.util.SyncUtils +import io.github.qauxv.util.isTim import xyz.nextalone.util.isPublic import xyz.nextalone.util.isStatic @@ -40,6 +41,7 @@ object DisableQQCrashReportManager : CommonSwitchFunctionHook(targetProc = SyncU override val description = "仅限调试,无实际用途" override val uiItemLocation = FunctionEntryRouter.Locations.DebugCategory.DEBUG_CATEGORY override val isApplicationRestartRequired = true + override val isAvailable = !isTim() override fun initOnce(): Boolean { val kQQCrashReportManager = Initiator.loadClass("com.tencent.qqperf.monitor.crash.QQCrashReportManager") diff --git a/app/src/main/java/me/ketal/base/PluginDelayableHook.kt b/app/src/main/java/me/ketal/base/PluginDelayableHook.kt index 3ee31c8159..592472b09f 100644 --- a/app/src/main/java/me/ketal/base/PluginDelayableHook.kt +++ b/app/src/main/java/me/ketal/base/PluginDelayableHook.kt @@ -30,15 +30,15 @@ import io.github.qauxv.base.ISwitchCellAgent import io.github.qauxv.base.IUiItemAgent import io.github.qauxv.config.ConfigManager import io.github.qauxv.hook.BaseFunctionHook +import io.github.qauxv.util.Initiator import io.github.qauxv.util.Log import io.github.qauxv.util.hostInfo import kotlinx.coroutines.flow.MutableStateFlow -import xyz.nextalone.util.clazz import xyz.nextalone.util.method import xyz.nextalone.util.throwOrTrue import java.lang.reflect.InvocationTargetException -abstract class PluginDelayableHook(keyName: String) : BaseFunctionHook(keyName) { +abstract class PluginDelayableHook(keyName: String) : BaseFunctionHook(hookKey = keyName) { abstract val pluginID: String abstract val preference: IUiItemAgent @@ -68,13 +68,16 @@ abstract class PluginDelayableHook(keyName: String) : BaseFunctionHook(keyName) "Lcom/tencent/mobileqq/pluginsdk/IPluginAdapterProxy;->setProxy(Lcom/tencent/mobileqq/pluginsdk/IPluginAdapter;)V".method.apply { isAccessible = true }.invoke( - null, listOf( + null, + listOf( "Lcooperation/plugin/c;", //8.9.70 "Lcooperation/plugin/PluginAdapterImpl;", //8.8.50 "Lbghq;", //8.2.11 Play - "Lbfdk;" //8.2.6 - ).firstNotNullOf { it.clazz }.newInstance() + "Lbfdk;", //8.2.6 + "Lavel;", //TIM 3.5.2 + ).firstNotNullOf { Initiator.load(it) }.newInstance() // implements Lcom/tencent/mobileqq/pluginsdk/IPluginAdapter; +// DexKit.requireClassFromCache(CPluginAdapterImpl).newInstance() ) Log.i("setProxy success") } diff --git a/app/src/main/java/xyz/nextalone/hook/HideTroopLevel.kt b/app/src/main/java/xyz/nextalone/hook/HideTroopLevel.kt index 1ba7a31273..0c13f134f6 100644 --- a/app/src/main/java/xyz/nextalone/hook/HideTroopLevel.kt +++ b/app/src/main/java/xyz/nextalone/hook/HideTroopLevel.kt @@ -32,6 +32,7 @@ import io.github.qauxv.bridge.ntapi.ChatTypeConstants import io.github.qauxv.dsl.FunctionEntryRouter import io.github.qauxv.hook.CommonSwitchFunctionHook import io.github.qauxv.util.Initiator._TroopMemberLevelView +import io.github.qauxv.util.isTim import me.ketal.dispacher.BaseBubbleBuilderHook import me.ketal.dispacher.OnBubbleBuilder import me.ketal.util.findViewByType @@ -49,7 +50,7 @@ object HideTroopLevel : CommonSwitchFunctionHook(), OnBubbleBuilder { private val levelClass get() = _TroopMemberLevelView() - override val isAvailable = levelClass != null + override val isAvailable = !isTim() && levelClass != null override fun initOnce(): Boolean { return isAvailable && BaseBubbleBuilderHook.initialize()