From 7028a8d75f7e4f3ea6843ca66249ac338eaebb43 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Wed, 30 Mar 2022 14:02:43 +0800 Subject: [PATCH] Update version to 1.0.69 --- .idea/misc.xml | 2 +- README.md | 8 +++-- build.gradle | 2 +- .../highcapable/yukihookapi/YukiHookAPI.kt | 4 +-- .../yukihookapi/hook/core/YukiHookCreater.kt | 34 +++++++++---------- 5 files changed, 26 insertions(+), 24 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a0b3c159..109bb81d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -12,7 +12,7 @@ - + diff --git a/README.md b/README.md index f1c7fbf6..bd74c251 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Eclipse Marketplace](https://img.shields.io/badge/build-passing-brightgreen) ![Eclipse Marketplace](https://img.shields.io/badge/license-MIT-blue) -![Eclipse Marketplace](https://img.shields.io/badge/version-v1.0.68-green) +![Eclipse Marketplace](https://img.shields.io/badge/version-v1.0.69-green) [![Telegram](https://img.shields.io/static/v1?label=Telegram&message=交流讨论&color=0088cc)](https://t.me/XiaofangInternet)

@@ -188,7 +188,11 @@ class MainHook : YukiHookXposedInitProxy { 移除和修改 `MethodFinder`、`FieldFinder` 以及 `HookParam` 相关方法的调用;
增加更多 `Finder` 中的 `cast` 类型并支持 `cast` 为数组;
整体的性能和稳定性提升;
- 修复上一个版本可能存在的 BUG。 + 修复上一个版本可能存在的 BUG。

+- 1.0.69
+ 添加并改进一些方法功能的注释;
+ 增加 Demo 中的更多示例 Hook 内容;
+ 修复在一个 Hook 实例中,`allMethods` 多次使用时只有最后一个生效的问题,感谢 [WankkoRee](https://github.com/WankkoRee) 的反馈。 # Features diff --git a/build.gradle b/build.gradle index 8f787faf..6098fbd8 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ ext { devUser = "fankesyooni" userEmail = "qzmmcn@163.com" groupId = "com.highcapable.yukihookapi" - apiVersion = "1.0.68" + apiVersion = "1.0.69" repoName = "YukiHookAPI" repoDescription = "An efficient Kotlin version of the Xposed Hook API." licenceName = "MIT License" diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/YukiHookAPI.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/YukiHookAPI.kt index 7ca3eb26..f9645139 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/YukiHookAPI.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/YukiHookAPI.kt @@ -73,10 +73,10 @@ object YukiHookAPI { private var isXposedInitialized = false /** 获取当前 [YukiHookAPI] 的版本 */ - const val API_VERSION_NAME = "1.0.68" + const val API_VERSION_NAME = "1.0.69" /** 获取当前 [YukiHookAPI] 的版本号 */ - const val API_VERSION_CODE = 13 + const val API_VERSION_CODE = 14 /** * 模块是否装载了 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 2a3d140a..bdb6ffdc 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 @@ -57,15 +57,15 @@ import java.lang.reflect.Member class YukiHookCreater(private val packageParam: PackageParam, private val hookClass: HookClass) { /** - * Hook 全部方法的标识 + * Hook 模式定义 */ - enum class HookAllMembers { HOOK_ALL_METHODS, HOOK_ALL_CONSTRUCTORS, HOOK_NONE } + enum class HookMemberMode { HOOK_ALL_METHODS, HOOK_ALL_CONSTRUCTORS, HOOK_CONVENTIONAL } /** 是否对当前 [YukiHookCreater] 禁止执行 Hook 操作 */ private var isDisableCreaterRunHook = false /** 设置要 Hook 的方法、构造类 */ - private var hookMembers = HashMap() + private var hookMembers = HashSet() /** [hookClass] 找不到时出现的错误回调 */ private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null @@ -87,9 +87,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl * @return [MemberHookCreater.Result] */ fun injectMember(tag: String = "Default", initiate: MemberHookCreater.() -> Unit) = - MemberHookCreater(tag).apply(initiate).apply { - hookMembers[toString()] = this - }.build() + MemberHookCreater(tag).apply(initiate).apply { hookMembers.add(this) }.build() /** * Hook 执行入口 @@ -104,7 +102,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted") else Thread { SystemClock.sleep(10) - if (isDisableCreaterRunHook.not() && hookClass.instance != null) hookMembers.forEach { (_, member) -> member.hook() } + if (isDisableCreaterRunHook.not() && hookClass.instance != null) hookMembers.forEach { it.hook() } if (isDisableCreaterRunHook.not() && hookClass.instance == null) if (onHookClassNotFoundFailureCallback == null) yLoggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable) @@ -154,8 +152,8 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl /** 是否对当前 [MemberHookCreater] 禁止执行 Hook 操作 */ private var isDisableMemberRunHook = false - /** 是否 Hook 全部方法以及类型 */ - private var hookAllMembers = HookAllMembers.HOOK_NONE + /** Hook 当前模式类型 */ + private var hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL /** 全部方法的名称 */ private var allMethodsName = "" @@ -181,7 +179,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl */ fun allMethods(name: String) { allMethodsName = name - hookAllMembers = HookAllMembers.HOOK_ALL_METHODS + hookMemberMode = HookMemberMode.HOOK_ALL_METHODS isHookMemberSetup = true } @@ -198,7 +196,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl */ fun allConstructors() { allMethodsName = "" - hookAllMembers = HookAllMembers.HOOK_ALL_CONSTRUCTORS + hookMemberMode = HookMemberMode.HOOK_ALL_CONSTRUCTORS isHookMemberSetup = true } @@ -212,7 +210,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl * @return [MethodFinder.Result] */ fun method(initiate: MethodFinder.() -> Unit) = try { - hookAllMembers = HookAllMembers.HOOK_NONE + hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL isHookMemberSetup = true MethodFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true) } catch (e: Throwable) { @@ -230,7 +228,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl * @return [ConstructorFinder.Result] */ fun constructor(initiate: ConstructorFinder.() -> Unit = {}) = try { - hookAllMembers = HookAllMembers.HOOK_NONE + hookMemberMode = HookMemberMode.HOOK_CONVENTIONAL isHookMemberSetup = true ConstructorFinder(hookInstance = this, hookClass.instance).apply(initiate).build(isBind = true) } catch (e: Throwable) { @@ -432,7 +430,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } } } - if (hookAllMembers == HookAllMembers.HOOK_NONE) + if (hookMemberMode == HookMemberMode.HOOK_CONVENTIONAL) if (member != null) member.also { member -> runCatching { @@ -458,12 +456,12 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl ) } else runCatching { - when (hookAllMembers) { - HookAllMembers.HOOK_ALL_METHODS -> + when (hookMemberMode) { + HookMemberMode.HOOK_ALL_METHODS -> if (isReplaceHookMode) XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, replaceMent) else XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, beforeAfterHook) - HookAllMembers.HOOK_ALL_CONSTRUCTORS -> + HookMemberMode.HOOK_ALL_CONSTRUCTORS -> if (isReplaceHookMode) XposedBridge.hookAllConstructors(hookClass.instance, replaceMent) else XposedBridge.hookAllConstructors(hookClass.instance, beforeAfterHook) @@ -505,7 +503,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl */ internal val isNotIgnoredNoSuchMemberFailure get() = onNoSuchMemberFailureCallback == null && isNotIgnoredHookingFailure - override fun toString() = "${hookClass.name}$allMethodsName$member$hookAllMembers$tag#YukiHookAPI" + override fun toString() = "[tag] $tag [class] $hookClass [member] $member $allMethodsName [mode] $hookMemberMode" /** * 监听 Hook 结果实现类