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 { (hookClass.throwable ?: Throwable("Failed Hooked Class [${hookClass.name}]")).also {
onHookingFailureCallback?.invoke(it) onHookingFailureCallback?.invoke(it)
onAllFailureCallback?.invoke(it) onAllFailureCallback?.invoke(it)
if (onHookingFailureCallback == null && onAllFailureCallback == null) if (isNotIgnoredHookingFailure) onHookFailureMsg(it)
onHookFailureMsg(it)
} }
return return
} }
@@ -335,8 +334,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
} catch (e: Throwable) { } catch (e: Throwable) {
onConductFailureCallback?.invoke(param, e) onConductFailureCallback?.invoke(param, e)
onAllFailureCallback?.invoke(e) onAllFailureCallback?.invoke(e)
if (onConductFailureCallback == null && onAllFailureCallback == null) if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(e)
onHookFailureMsg(e)
null null
} }
} }
@@ -355,8 +353,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}.onFailure { }.onFailure {
onConductFailureCallback?.invoke(param, it) onConductFailureCallback?.invoke(param, it)
onAllFailureCallback?.invoke(it) onAllFailureCallback?.invoke(it)
if (onConductFailureCallback == null && onAllFailureCallback == null) if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(it)
onHookFailureMsg(it)
} }
} }
} }
@@ -371,8 +368,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}.onFailure { }.onFailure {
onConductFailureCallback?.invoke(param, it) onConductFailureCallback?.invoke(param, it)
onAllFailureCallback?.invoke(it) onAllFailureCallback?.invoke(it)
if (onConductFailureCallback == null && onAllFailureCallback == null) if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(it)
onHookFailureMsg(it)
} }
} }
} }
@@ -387,13 +383,13 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
}.onFailure { }.onFailure {
onHookingFailureCallback?.invoke(it) onHookingFailureCallback?.invoke(it)
onAllFailureCallback?.invoke(it) onAllFailureCallback?.invoke(it)
if (onHookingFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(it) if (isNotIgnoredHookingFailure) onHookFailureMsg(it)
} }
} }
else { else {
onHookingFailureCallback?.invoke(Throwable()) onHookingFailureCallback?.invoke(Throwable())
onAllFailureCallback?.invoke(Throwable()) onAllFailureCallback?.invoke(Throwable())
if (onHookingFailureCallback == null && onAllFailureCallback == null) if (isNotIgnoredHookingFailure)
loggerE( loggerE(
msg = if (isHookMemberSetup) msg = if (isHookMemberSetup)
"Hooked Member with a finding error in Class [$hookClass] [$tag]" "Hooked Member with a finding error in Class [$hookClass] [$tag]"
@@ -414,8 +410,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
} }
}.onFailure { }.onFailure {
onAllFailureCallback?.invoke(it) onAllFailureCallback?.invoke(it)
if (onHookingFailureCallback == null && onAllFailureCallback == null) if (isNotIgnoredHookingFailure) loggerE(msg = "Hooked All Members with an error in Class [$hookClass] [$tag]")
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) = private fun onHookFailureMsg(throwable: Throwable) =
loggerE(msg = "Try to hook ${hookClass.instance ?: hookClass.name}[$member] got an Exception [$tag]", e = 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" override fun toString() = "${hookClass.name}$member$tag#YukiHookAPI"
/** /**

View File

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

View File

@@ -29,6 +29,7 @@
package com.highcapable.yukihookapi.hook.core.finder package com.highcapable.yukihookapi.hook.core.finder
import android.os.SystemClock
import com.highcapable.yukihookapi.annotation.DoNotUseMethod import com.highcapable.yukihookapi.annotation.DoNotUseMethod
import com.highcapable.yukihookapi.hook.core.YukiHookCreater import com.highcapable.yukihookapi.hook.core.YukiHookCreater
import com.highcapable.yukihookapi.hook.log.loggerE import com.highcapable.yukihookapi.hook.log.loggerE
@@ -93,7 +94,11 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p
} }
Result() Result()
} catch (e: Throwable) { } 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) Result(isNoSuch = true, e)
} }
} }

View File

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