From bbe3febe691ace1ea4e398f711f971c0504861d6 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Sat, 5 Feb 2022 19:43:35 +0800 Subject: [PATCH] ... --- README.md | 1 + .../demo/hook/inject/MainInjecter.kt | 2 +- .../xposed/InjectYukiHookWithXposed.kt | 2 +- .../yukihookapi/hook/core/YukiHookCreater.kt | 24 +++++++++++++++++++ .../yukihookapi/hook/entity/YukiBaseHooker.kt | 9 +++++-- .../hook/factory/YukiHookFactory.kt | 2 +- .../proxy/YukiHookXposedInitProxy.kt | 9 ++++--- 7 files changed, 41 insertions(+), 8 deletions(-) rename yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/{ => xposed}/proxy/YukiHookXposedInitProxy.kt (87%) diff --git a/README.md b/README.md index c4dbe68e..2c5f86af 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - 这是一个使用 Kotlin 重新构建的高效 Xposed Hook API - 名称取自 《ももくり》女主 栗原 雪(Yuki) +- 前身为 [TMore](https://github.com/fankes/TMore) 开发学习项目中使用的 Innocent Xposed API,现在重新命名并开源。 # Get Startted diff --git a/app/src/main/java/com/highcapable/yukihookapi/demo/hook/inject/MainInjecter.kt b/app/src/main/java/com/highcapable/yukihookapi/demo/hook/inject/MainInjecter.kt index b61e3a8d..8c01a4a9 100644 --- a/app/src/main/java/com/highcapable/yukihookapi/demo/hook/inject/MainInjecter.kt +++ b/app/src/main/java/com/highcapable/yukihookapi/demo/hook/inject/MainInjecter.kt @@ -38,11 +38,11 @@ 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.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.type.ActivityClass import com.highcapable.yukihookapi.hook.type.BundleClass import com.highcapable.yukihookapi.hook.type.StringType import com.highcapable.yukihookapi.hook.type.UnitType +import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy // for test @InjectYukiHookWithXposed diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.kt index 90f200f1..1f9632f0 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/xposed/InjectYukiHookWithXposed.kt @@ -31,7 +31,7 @@ package com.highcapable.yukihookapi.annotation.xposed import androidx.annotation.Keep import com.highcapable.yukihookapi.YukiHookAPI -import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy +import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy /** * 标识 YukiHook 注入 Xposed 入口的类注释 diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt index f45ca35a..89697599 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt @@ -380,6 +380,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla return this } + /** + * 忽略 Hook 进行过程中发生错误 + * @return [Result] 可继续向下监听 + */ + fun ignoredConductFailure() = onConductFailure { _, _ -> } + /** * 监听 Hook 开始时发生错误的回调方法 * @param initiate 回调错误 - ([Throwable] 异常) @@ -390,6 +396,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla return this } + /** + * 忽略 Hook 开始时发生的错误 + * @return [Result] 可继续向下监听 + */ + fun ignoredHookingFailure() = onHookingFailure {} + /** * 监听 Hook 过程发生找不到方法、变量错误的回调方法 * @param initiate 回调错误 - ([Throwable] 异常) @@ -400,6 +412,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla return this } + /** + * 忽略 Hook 过程发生找不到方法、变量的错误 + * @return [Result] 可继续向下监听 + */ + fun ignoredNoSuchMemberFailure() = onNoSuchMemberFailure {} + /** * 监听全部 Hook 过程发生错误的回调方法 * @param initiate 回调错误 - ([Throwable] 异常) @@ -409,6 +427,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla onAllFailureCallback = initiate return this } + + /** + * 忽略全部 Hook 过程发生的错误 + * @return [Result] 可继续向下监听 + */ + fun ignoredAllFailure() = onAllFailure {} } } } \ No newline at end of file diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.kt index 419fef8d..f498ebbf 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/entity/YukiBaseHooker.kt @@ -29,8 +29,9 @@ package com.highcapable.yukihookapi.hook.entity import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.annotation.DoNotUseMethod +import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.hook.param.PackageParam -import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy +import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy /** * YukiHook 的子类实现 @@ -41,10 +42,14 @@ import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy * * 你可以在 [YukiHookXposedInitProxy] 的 [YukiHookXposedInitProxy.onHook] 中实现如下用法 * - * 调用 [YukiHookAPI.encase] encase(moduleName = "模块包名", MainHooker(), SecondHooker(), ThirdHooker() ...) + * 第一种方式:调用 [YukiHookAPI.encase] encase(MainHooker(), SecondHooker(), ThirdHooker() ...) + * + * 第二种方式:调用 [YukiHookAPI.encase] encase(moduleName = "模块包名", MainHooker(), SecondHooker(), ThirdHooker() ...) * * 调用 [PackageParam.loadHooker] loadHooker(hooker = CustomHooker()) * + * 更多请参考 [InjectYukiHookWithXposed] 中的注释内容 + * * .... * * 继承类参考示例: diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt index 07c0590a..9371c059 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt @@ -36,7 +36,7 @@ import android.os.Bundle import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.param.PackageParam -import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy +import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy /** * 在 [YukiHookXposedInitProxy] 中装载 [YukiHookAPI] diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/proxy/YukiHookXposedInitProxy.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/proxy/YukiHookXposedInitProxy.kt similarity index 87% rename from yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/proxy/YukiHookXposedInitProxy.kt rename to yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/proxy/YukiHookXposedInitProxy.kt index 250f9fec..0f43de60 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/proxy/YukiHookXposedInitProxy.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/proxy/YukiHookXposedInitProxy.kt @@ -27,15 +27,18 @@ */ @file:Suppress("unused") -package com.highcapable.yukihookapi.hook.proxy +package com.highcapable.yukihookapi.hook.xposed.proxy import androidx.annotation.Keep import com.highcapable.yukihookapi.YukiHookAPI +import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.hook.factory.encase /** * YukiHook 的 Xposed 装载 API 调用接口 * + * - 请在此类上添加注释 [InjectYukiHookWithXposed] 标记模块 Hook 入口 + * * Hook 开始时将自动调用 [onHook] 方法 * * 请在 [onHook] 中调用 [YukiHookAPI.encase] 或直接调用 [encase] @@ -44,7 +47,7 @@ import com.highcapable.yukihookapi.hook.factory.encase * * .... * - * override fun onHook() = YukiHookAPI.encase(moduleName = "模块包名") { + * override fun onHook() = YukiHookAPI.encase(moduleName = "模块包名/可选") { * * ....// Your code here. * @@ -56,7 +59,7 @@ import com.highcapable.yukihookapi.hook.factory.encase * * .... * - * override fun onHook() = encase(moduleName = "模块包名") { + * override fun onHook() = encase(moduleName = "模块包名/可选") { * * ....// Your code here. *