mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 10:45:47 +08:00
add onHookClassNotFoundFailure
function and fix some bugs
This commit is contained in:
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.core
|
package com.highcapable.yukihookapi.hook.core
|
||||||
|
|
||||||
|
import android.os.SystemClock
|
||||||
import com.highcapable.yukihookapi.YukiHookAPI
|
import com.highcapable.yukihookapi.YukiHookAPI
|
||||||
import com.highcapable.yukihookapi.annotation.DoNotUseMethod
|
import com.highcapable.yukihookapi.annotation.DoNotUseMethod
|
||||||
import com.highcapable.yukihookapi.hook.bean.HookClass
|
import com.highcapable.yukihookapi.hook.bean.HookClass
|
||||||
@@ -63,6 +64,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
/** 设置要 Hook 的方法、构造类 */
|
/** 设置要 Hook 的方法、构造类 */
|
||||||
private var hookMembers = HashMap<String, MemberHookCreater>()
|
private var hookMembers = HashMap<String, MemberHookCreater>()
|
||||||
|
|
||||||
|
/** [hookClass] 找不到时出现的错误回调 */
|
||||||
|
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到当前被 Hook 的 [Class]
|
* 得到当前被 Hook 的 [Class]
|
||||||
*
|
*
|
||||||
@@ -89,12 +93,20 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
*
|
*
|
||||||
* - ❗此功能交由方法体自动完成 - 你不应该手动调用此方法
|
* - ❗此功能交由方法体自动完成 - 你不应该手动调用此方法
|
||||||
* @throws IllegalStateException 如果必要参数没有被设置
|
* @throws IllegalStateException 如果必要参数没有被设置
|
||||||
|
* @return [Result]
|
||||||
*/
|
*/
|
||||||
@DoNotUseMethod
|
@DoNotUseMethod
|
||||||
fun hook() {
|
fun hook(): Result {
|
||||||
if (!YukiHookAPI.hasXposedBridge) return
|
if (!YukiHookAPI.hasXposedBridge) return Result()
|
||||||
if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted")
|
if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted")
|
||||||
hookMembers.forEach { (_, member) -> member.hook() }
|
if (hookClass.instance != null) hookMembers.forEach { (_, member) -> member.hook() }
|
||||||
|
else Thread {
|
||||||
|
SystemClock.sleep(10)
|
||||||
|
if (onHookClassNotFoundFailureCallback == null)
|
||||||
|
loggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
||||||
|
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
|
||||||
|
}.start()
|
||||||
|
return Result()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -120,9 +132,6 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
/** Hook 开始时出现错误回调 */
|
/** Hook 开始时出现错误回调 */
|
||||||
private var onHookingFailureCallback: ((Throwable) -> Unit)? = null
|
private var onHookingFailureCallback: ((Throwable) -> Unit)? = null
|
||||||
|
|
||||||
/** [hookClass] 找不到时出现的错误回调 */
|
|
||||||
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
|
|
||||||
|
|
||||||
/** 全部错误回调 */
|
/** 全部错误回调 */
|
||||||
private var onAllFailureCallback: ((Throwable) -> Unit)? = null
|
private var onAllFailureCallback: ((Throwable) -> Unit)? = null
|
||||||
|
|
||||||
@@ -336,11 +345,10 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
fun hook() {
|
fun hook() {
|
||||||
if (!YukiHookAPI.hasXposedBridge) return
|
if (!YukiHookAPI.hasXposedBridge) return
|
||||||
if (hookClass.instance == null) {
|
if (hookClass.instance == null) {
|
||||||
(hookClass.throwable ?: Throwable("Failed Hooked Class [${hookClass.name}]")).also {
|
(hookClass.throwable ?: Throwable("HookClass [${hookClass.name}] not found")).also {
|
||||||
onHookClassNotFoundFailureCallback?.invoke(it)
|
|
||||||
onHookingFailureCallback?.invoke(it)
|
onHookingFailureCallback?.invoke(it)
|
||||||
onAllFailureCallback?.invoke(it)
|
onAllFailureCallback?.invoke(it)
|
||||||
if (isNotIgnoredHookingFailure && onHookClassNotFoundFailureCallback == null) onHookFailureMsg(it)
|
if (isNotIgnoredHookingFailure) onHookFailureMsg(it)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -507,22 +515,6 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
*/
|
*/
|
||||||
fun ignoredHookingFailure() = onHookingFailure {}
|
fun ignoredHookingFailure() = onHookingFailure {}
|
||||||
|
|
||||||
/**
|
|
||||||
* 监听 [hookClass] 找不到时发生错误的回调方法
|
|
||||||
* @param initiate 回调错误
|
|
||||||
* @return [Result] 可继续向下监听
|
|
||||||
*/
|
|
||||||
fun onHookClassNotFoundFailure(initiate: (Throwable) -> Unit): Result {
|
|
||||||
onHookClassNotFoundFailureCallback = initiate
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 忽略 [hookClass] 找不到时出现的错误
|
|
||||||
* @return [Result] 可继续向下监听
|
|
||||||
*/
|
|
||||||
fun ignoredHookClassNotFoundFailure() = onHookClassNotFoundFailure {}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听全部 Hook 过程发生错误的回调方法
|
* 监听全部 Hook 过程发生错误的回调方法
|
||||||
* @param initiate 回调错误
|
* @param initiate 回调错误
|
||||||
@@ -540,4 +532,35 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
fun ignoredAllFailure() = onAllFailure {}
|
fun ignoredAllFailure() = onAllFailure {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听全部 Hook 结果实现类
|
||||||
|
*
|
||||||
|
* 可在这里处理失败事件监听
|
||||||
|
*/
|
||||||
|
inner class Result {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建监听失败事件方法体
|
||||||
|
* @param initiate 方法体
|
||||||
|
* @return [Result] 可继续向下监听
|
||||||
|
*/
|
||||||
|
fun failures(initiate: Result.() -> Unit) = apply(initiate)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听 [hookClass] 找不到时发生错误的回调方法
|
||||||
|
* @param initiate 回调错误
|
||||||
|
* @return [Result] 可继续向下监听
|
||||||
|
*/
|
||||||
|
fun onHookClassNotFoundFailure(initiate: (Throwable) -> Unit): Result {
|
||||||
|
onHookClassNotFoundFailureCallback = initiate
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 忽略 [hookClass] 找不到时出现的错误
|
||||||
|
* @return [Result] 可继续向下监听
|
||||||
|
*/
|
||||||
|
fun ignoredHookClassNotFoundFailure() = onHookClassNotFoundFailure {}
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user