From fa5ef89e20b57a652b6fb0ab0beb6108c0ceafc1 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Thu, 3 Feb 2022 03:45:11 +0800 Subject: [PATCH] ... --- .../com/highcapable/yukihookapi/demo/hook/HookMain.kt | 7 +++++++ .../yukihookapi/hook/core/YukiHookCreater.kt | 11 +++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/highcapable/yukihookapi/demo/hook/HookMain.kt b/app/src/main/java/com/highcapable/yukihookapi/demo/hook/HookMain.kt index dcb1ebd7..f5636d83 100644 --- a/app/src/main/java/com/highcapable/yukihookapi/demo/hook/HookMain.kt +++ b/app/src/main/java/com/highcapable/yukihookapi/demo/hook/HookMain.kt @@ -35,6 +35,7 @@ import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.demo.InjectTest import com.highcapable.yukihookapi.demo.MainActivity import com.highcapable.yukihookapi.hook.factory.encase +import com.highcapable.yukihookapi.hook.factory.findMethod import com.highcapable.yukihookapi.hook.proxy.YukiHookInitializeProxy import com.highcapable.yukihookapi.hook.type.ActivityClass import com.highcapable.yukihookapi.hook.type.BundleClass @@ -88,6 +89,12 @@ class HookMain : YukiHookInitializeProxy { }.show() } } + injectMethod { + specify = hookClass.findMethod(name = "onStart") + afterHook { + Toast.makeText(instance(), "手动 Hook", Toast.LENGTH_SHORT).show() + } + } } } } diff --git a/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt b/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt index 46b43be5..f9ff22d4 100644 --- a/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt +++ b/yukihookapi/src/main/java/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt @@ -112,6 +112,13 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla /** 方法返回值 */ var returnType: Class<*>? = null + /** + * 手动指定方法 + * + * 你可以调用 [hookClass] 来手动查询要 Hook 的方法 + */ + var specify: Member? = null + /** * 方法参数 * @param param 参数数组 @@ -217,7 +224,7 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla * @throws NoSuchMethodError 如果找不到方法 */ private val hookMember: Member by lazy { - when { + specify ?: when { name.isBlank() && !isConstructor -> error("Method name cannot be empty") isConstructor -> if (params != null) @@ -295,7 +302,7 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla Log.e(YukiHookAPI.TAG, "Try to hook $hookClass[$hookMember] got an Exception", throwable) } - override fun toString() = "$name$returnType$params$isConstructor$hookMember$hookClass#YukiHook" + override fun toString() = "$name$returnType$params$isConstructor$hookMember$hookClass$specify#YukiHook" /** * 监听 Hook 结果实现类