Fix ignored Error still output bug

This commit is contained in:
2022-02-15 11:32:46 +08:00
parent 558a7ba87c
commit d0c76bc724
4 changed files with 51 additions and 21 deletions

View File

@@ -318,8 +318,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
(hookClass.throwable ?: Throwable("Failed Hooked Class [${hookClass.name}]")).also {
onHookingFailureCallback?.invoke(it)
onAllFailureCallback?.invoke(it)
if (onHookingFailureCallback == null && onAllFailureCallback == null)
onHookFailureMsg(it)
if (isNotIgnoredHookingFailure) onHookFailureMsg(it)
}
return
}
@@ -335,8 +334,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
} catch (e: Throwable) {
onConductFailureCallback?.invoke(param, e)
onAllFailureCallback?.invoke(e)
if (onConductFailureCallback == null && onAllFailureCallback == null)
onHookFailureMsg(e)
if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(e)
null
}
}
@@ -355,8 +353,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}.onFailure {
onConductFailureCallback?.invoke(param, it)
onAllFailureCallback?.invoke(it)
if (onConductFailureCallback == null && onAllFailureCallback == null)
onHookFailureMsg(it)
if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(it)
}
}
}
@@ -371,8 +368,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}.onFailure {
onConductFailureCallback?.invoke(param, it)
onAllFailureCallback?.invoke(it)
if (onConductFailureCallback == null && onAllFailureCallback == null)
onHookFailureMsg(it)
if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(it)
}
}
}
@@ -387,13 +383,13 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}.onFailure {
onHookingFailureCallback?.invoke(it)
onAllFailureCallback?.invoke(it)
if (onHookingFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(it)
if (isNotIgnoredHookingFailure) onHookFailureMsg(it)
}
}
else {
onHookingFailureCallback?.invoke(Throwable())
onAllFailureCallback?.invoke(Throwable())
if (onHookingFailureCallback == null && onAllFailureCallback == null)
if (isNotIgnoredHookingFailure)
loggerE(
msg = if (isHookMemberSetup)
"Hooked Member with a finding error in Class [$hookClass] [$tag]"
@@ -414,8 +410,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}
}.onFailure {
onAllFailureCallback?.invoke(it)
if (onHookingFailureCallback == null && onAllFailureCallback == null)
loggerE(msg = "Hooked All Members with an error in Class [$hookClass] [$tag]")
if (isNotIgnoredHookingFailure) loggerE(msg = "Hooked All Members with an error in Class [$hookClass] [$tag]")
}
}
@@ -434,6 +429,12 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
private fun onHookFailureMsg(throwable: Throwable) =
loggerE(msg = "Try to hook ${hookClass.instance ?: hookClass.name}[$member] got an Exception [$tag]", e = throwable)
/**
* 判断是否没有设置 Hook 过程中的任何异常拦截
* @return [Boolean] 没有设置任何异常拦截
*/
internal val isNotIgnoredHookingFailure get() = onHookingFailureCallback == null && onAllFailureCallback == null
override fun toString() = "${hookClass.name}$member$tag#YukiHookAPI"
/**

View File

@@ -29,6 +29,7 @@
package com.highcapable.yukihookapi.hook.core.finder
import android.os.SystemClock
import com.highcapable.yukihookapi.annotation.DoNotUseMethod
import com.highcapable.yukihookapi.hook.core.YukiHookCreater
import com.highcapable.yukihookapi.hook.log.loggerE
@@ -49,6 +50,9 @@ class ConstructorFinder(private val hookInstance: YukiHookCreater.MemberHookCrea
/** [Constructor] 参数数组 */
private var params: Array<out Class<*>>? = null
/** 是否使用了 [RemedyPlan] */
private var isUsingRemedyPlan = false
/**
* [Constructor] 参数
*
@@ -105,9 +109,15 @@ class ConstructorFinder(private val hookInstance: YukiHookCreater.MemberHookCrea
* 发生错误时输出日志
* @param msg 消息日志
* @param throwable 错误
* @param isAlwaysPrint 忽略条件每次都打印错误
*/
private fun onFailureMsg(msg: String = "", throwable: Throwable? = null) =
loggerE(msg = "NoSuchConstructor happend in [$hookClass] $msg [${hookInstance.tag}]", e = throwable)
private fun onFailureMsg(msg: String = "", throwable: Throwable? = null, isAlwaysPrint: Boolean = false) {
Thread {
SystemClock.sleep(10)
if ((hookInstance.isNotIgnoredHookingFailure && !isUsingRemedyPlan) || isAlwaysPrint)
loggerE(msg = "NoSuchConstructor happend in [$hookClass] $msg [${hookInstance.tag}]", e = throwable)
}.start()
}
/**
* [Constructor] 重查找实现类
@@ -152,13 +162,14 @@ class ConstructorFinder(private val hookInstance: YukiHookCreater.MemberHookCrea
return@run
}.onFailure {
lastError = it
onFailureMsg(msg = "trying ${p + 1} times by RemedyPlan --> $it")
onFailureMsg(msg = "trying ${p + 1} times by RemedyPlan --> $it", isAlwaysPrint = true)
}
}
if (!isFindSuccess) {
onFailureMsg(
msg = "trying ${remedyPlans.size} times and all failure by RemedyPlan",
throwable = lastError
throwable = lastError,
isAlwaysPrint = true
)
remedyPlans.clear()
}
@@ -190,6 +201,7 @@ class ConstructorFinder(private val hookInstance: YukiHookCreater.MemberHookCrea
* @return [Result] 可继续向下监听
*/
fun remedys(initiate: RemedyPlan.() -> Unit): Result {
isUsingRemedyPlan = true
if (isNoSuch) RemedyPlan().apply(initiate).build()
return this
}

View File

@@ -29,6 +29,7 @@
package com.highcapable.yukihookapi.hook.core.finder
import android.os.SystemClock
import com.highcapable.yukihookapi.annotation.DoNotUseMethod
import com.highcapable.yukihookapi.hook.core.YukiHookCreater
import com.highcapable.yukihookapi.hook.log.loggerE
@@ -93,7 +94,11 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
}
Result()
} catch (e: Throwable) {
loggerE(msg = "NoSuchField happend in [$classSet] [${hookInstance.tag}]", e = e)
Thread {
SystemClock.sleep(10)
if (hookInstance.isNotIgnoredHookingFailure)
loggerE(msg = "NoSuchField happend in [$classSet] [${hookInstance.tag}]", e = e)
}.start()
Result(isNoSuch = true, e)
}
}

View File

@@ -29,6 +29,7 @@
package com.highcapable.yukihookapi.hook.core.finder
import android.os.SystemClock
import com.highcapable.yukihookapi.annotation.DoNotUseMethod
import com.highcapable.yukihookapi.hook.core.YukiHookCreater
import com.highcapable.yukihookapi.hook.log.loggerE
@@ -49,6 +50,9 @@ class MethodFinder(private val hookInstance: YukiHookCreater.MemberHookCreater,
/** [Method] 参数数组 */
private var params: Array<out Class<*>>? = null
/** 是否使用了 [RemedyPlan] */
private var isUsingRemedyPlan = false
/**
* [Method] 名称
*
@@ -123,9 +127,15 @@ class MethodFinder(private val hookInstance: YukiHookCreater.MemberHookCreater,
* 发生错误时输出日志
* @param msg 消息日志
* @param throwable 错误
* @param isAlwaysPrint 忽略条件每次都打印错误
*/
private fun onFailureMsg(msg: String = "", throwable: Throwable? = null) =
loggerE(msg = "NoSuchMethod happend in [$hookClass] $msg [${hookInstance.tag}]", e = throwable)
private fun onFailureMsg(msg: String = "", throwable: Throwable? = null, isAlwaysPrint: Boolean = false) {
Thread {
SystemClock.sleep(10)
if ((hookInstance.isNotIgnoredHookingFailure && !isUsingRemedyPlan) || isAlwaysPrint)
loggerE(msg = "NoSuchMethod happend in [$hookClass] $msg [${hookInstance.tag}]", e = throwable)
}.start()
}
/**
* [Method] 重查找实现类
@@ -170,13 +180,14 @@ class MethodFinder(private val hookInstance: YukiHookCreater.MemberHookCreater,
return@run
}.onFailure {
lastError = it
onFailureMsg(msg = "trying ${p + 1} times by RemedyPlan --> $it")
onFailureMsg(msg = "trying ${p + 1} times by RemedyPlan --> $it", isAlwaysPrint = true)
}
}
if (!isFindSuccess) {
onFailureMsg(
msg = "trying ${remedyPlans.size} times and all failure by RemedyPlan",
throwable = lastError
throwable = lastError,
isAlwaysPrint = true
)
remedyPlans.clear()
}
@@ -210,6 +221,7 @@ class MethodFinder(private val hookInstance: YukiHookCreater.MemberHookCreater,
* @return [Result] 可继续向下监听
*/
fun remedys(initiate: RemedyPlan.() -> Unit): Result {
isUsingRemedyPlan = true
if (isNoSuch) RemedyPlan().apply(initiate).build()
return this
}