- class
HookParamclass HookParam private constructor(
private val creatorInstance: YukiMemberHookCreator,
private var paramId: String,
private var param: YukiHookCallback.Param?
)
变更记录
v1.0
添加
v1.1.0
修改
移动 HookParamWrapper
到 YukiHookCallback.Param
修正拼写错误的 creater 命名到 creator
v1.1.5
修改
新增 paramId
参数
v1.2.0
修改
不再开放构造方法
功能描述
Hook 方法、构造方法的目标对象实现类。
- field
argsval args: Array<Any?>
变更记录
在 v1.0
添加
功能描述
获取当前 Hook 对象
member
或constructor
的参数对象数组。
这里的数组每项类型默认为 Any
,你可以使用 args
方法来实现 ArgsModifyer.cast
功能。
firstArgs - field
变更记录
v1.0
添加
v1.0.75
移除
请使用 args(index = 0)
或 args().first()
lastArgs - field
变更记录
v1.0
添加
v1.0.75
移除
请使用 args().last()
- field
instanceval instance: Any
变更记录
v1.0
添加
功能描述
获取当前 Hook 实例的对象。
特别注意
如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
如果你不确定当前实例的对象是否为 null
,你可以使用 instanceOrNull
。
- field
instanceOrNullval instanceOrNull: Any?
变更记录
v1.1.8
新增
功能描述
获取当前 Hook 实例的对象。
特别注意
如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
- field
instanceClassval instanceClass: Class<*>?
变更记录
v1.0
添加
v1.2.0
修改
加入可空类型 (空安全)
功能描述
获取当前 Hook 实例的类对象。
特别注意
如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
- field
memberval member: Member
变更记录
v1.1.0
新增
功能描述
获取当前 Hook 对象的
Member
。
在不确定 Member
类型为 Method
或 Constructor
时可以使用此方法。
- field
methodval method: Method
变更记录
v1.0
添加
功能描述
获取当前 Hook 对象的方法。
- field
constructorval constructor: Constructor
变更记录
v1.0
添加
功能描述
获取当前 Hook 对象的构造方法。
- field
resultvar result: Any?
变更记录
v1.0
添加
功能描述
获取、设置当前 Hook 对象的
method
或constructor
的返回值。
- field
dataExtraval dataExtra: Bundle
变更记录
v1.1.5
新增
功能描述
获取当前回调方法体范围内的数据存储实例。
- field
hasThrowableval hasThrowable: Boolean
变更记录
v1.1.0
新增
功能描述
判断是否存在设置过的方法调用抛出异常。
- field
throwableval throwable: Throwable?
变更记录
v1.1.0
新增
功能描述
获取设置的方法调用抛出异常。
- i-ext-method
Throwable.throwToAppfun Throwable.throwToApp()
变更记录
v1.1.0
新增
功能描述
向 Hook APP 抛出异常。
使用 hasThrowable
判断当前是否存在被抛出的异常。
使用 throwable
获取当前设置的方法调用抛出异常。
仅会在回调方法的 MemberHookCreator.before
或 MemberHookCreator.after
中生效。
特别注意
设置后会同时执行 resultNull 方法并将异常抛出给当前 Hook APP。
功能示例
Hook 过程中的异常仅会作用于 (Xposed) 宿主环境,目标 Hook APP 不会受到影响。
若想将异常抛给 Hook APP,可以直接使用如下方法。
示例如下
hook {
before {
RuntimeException("Test Exception").throwToApp()
}
}
特别注意
向 Hook APP 抛出异常会对其暴露被 Hook 的事实,是不安全的,容易被检测,请按实际场景合理使用。
- method
resultinline fun <reified T> result(): T?
变更记录
v1.0.75
新增
功能描述
获取当前 Hook 对象的
method
或constructor
的返回值T
。
firstArg - method
变更记录
v1.0.66
新增
v1.0.75
移除
lastArgs - method
变更记录
v1.0.66
新增
v1.0.75
移除
- method
instanceinline fun <reified T> instance(): T
变更记录
v1.0
添加
功能描述
获取当前 Hook 实例的对象
T
。
功能示例
你可以通过 instance
方法轻松使用泛型 cast
为目标对象的类型。
示例如下
instance<Activity>().finish()
- method
instanceOrNullinline fun <reified T> instanceOrNull(): T?
变更记录
v1.1.8
新增
功能描述
获取当前 Hook 实例的对象
T
。
功能示例
用法请参考 instance 方法。
- method
argsfun args(): ArgsIndexCondition
变更记录
v1.0.75
新增
功能描述
获取当前 Hook 对象的
method
或constructor
的参数数组下标实例化类。
- method
argsfun args(index: Int): ArgsModifyer
变更记录
v1.0
添加
v1.0.75
修改
默认值 index = 0
移动到新的使用方法 args().first()
功能描述
获取当前 Hook 对象的
method
或constructor
的参数实例化对象类。
功能示例
你可以通过 args
方法修改当前 Hook 实例的方法、构造方法的参数内容。
你可以直接使用 set
方法设置 param
为你的目标实例,接受 Any
类型。
特别注意
请确保 param 类型为你的目标实例类型。
示例如下
args(index = 0).set("modify the value")
你可以这样直接设置第一位 param
的值。
示例如下
args().first().set("modify the value")
你还可以直接设置最后一位 param
的值。
示例如下
args().last().set("modify the value")
你还可以使用 setNull
方法设置 param
为空。
示例如下
args(index = 1).setNull()
你还可以使用 setTrue
方法设置 param
为 true
。
特别注意
请确保 param 类型为 Boolean。
示例如下
args(index = 1).setTrue()
你还可以使用 setFalse
方法设置 param
为 false
。
特别注意
请确保 param 类型为 Boolean。
示例如下
args(index = 1).setFalse()
- method
callOriginalfun callOriginal(): Any?
fun <T> callOriginal(): T?
变更记录
v1.1.0
新增
功能描述
执行原始
Member
。
调用自身未进行 Hook 的原始 Member
并调用原始参数执行。
功能实例
此方法可以 invoke
原始未经 Hook 的 Member
对象,取决于原始 Member
的参数。
调用自身原始的方法不会再经过当前 before
、after
以及 replaceUnit
、replaceAny
。
比如我们 Hook 的这个方法被这样调用 test("test value")
,使用此方法会调用其中的 "test value"
作为参数。
示例如下
method {
name = "test"
param(StringClass)
returnType = StringClass
}.hook {
after {
// <方案1> 不使用泛型,不获取方法执行结果,调用将使用原方法传入的 args 自动传参
callOriginal()
// <方案2> 使用泛型,已知方法执行结果参数类型进行 cast
// 假设返回值为 String,失败会返回 null,调用将使用原方法传入的 args 自动传参
val value = callOriginal<String>()
}
}
- method
invokeOriginalfun invokeOriginal(vararg args: Any?): Any?
fun <T> invokeOriginal(vararg args: Any?): T?
变更记录
v1.0
添加
v1.1.0
修改
不再需要使用 member.invokeOriginal
进行调用
功能描述
执行原始
Member
。
调用自身未进行 Hook 的原始 Member
并自定义 args
执行。
功能实例
此方法可以 invoke
原始未经 Hook 的 Member
对象,可自定义需要调用的参数内容。
调用自身原始的方法不会再经过当前 before
、after
以及 replaceUnit
、replaceAny
。
比如我们 Hook 的这个方法被这样调用 test("test value")
,使用此方法可自定义其中的 args
作为参数。
示例如下
method {
name = "test"
param(StringClass)
returnType = StringClass
}.hook {
after {
// <方案1> 不使用泛型,不获取方法执行结果
invokeOriginal("test value")
// <方案2> 使用泛型,已知方法执行结果参数类型进行 cast,假设返回值为 String,失败会返回 null
val value = invokeOriginal<String>("test value")
}
}
- method
resultTruefun resultTrue()
变更记录
v1.0
添加
功能描述
设置当前 Hook 对象方法的
result
返回值为true
。
特别注意
请确保 result 类型为 Boolean。
- method
resultFalsefun resultFalse()
变更记录
v1.0
添加
功能描述
设置当前 Hook 对象方法的
result
返回值为false
。
特别注意
请确保 result 类型为 Boolean。
- method
resultNullfun resultNull()
变更记录
v1.0
添加
功能描述
注意
此方法将强制设置 Hook 对象方法的 result 为 null。
- class
ArgsIndexConditioninner class ArgsIndexCondition internal constructor()
变更记录
v1.0.75
新增
功能描述
对方法参数的数组下标进行实例化类。
- method
firstfun first(): ArgsModifyer
变更记录
v1.0.75
新增
功能描述
获取当前 Hook 对象的
method
或constructor
的参数数组第一位。
- method
lastfun last(): ArgsModifyer
变更记录
v1.0.75
新增
功能描述
获取当前 Hook 对象的
method
或constructor
的参数数组最后一位。
- class
ArgsModifyerinner class ArgsModifyer internal constructor(private val index: Int)
变更记录
v1.0
添加
功能描述
对方法参数的修改进行实例化类。
- method
castfun <T> cast(): T?
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 of
cast
功能描述
得到方法参数的实例对象
T
。
- method
bytefun byte(): Byte?
变更记录
v1.0.68
新增
功能描述
得到方法参数的实例对象 Byte。
- method
intfun int(): Int
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofInt
int
功能描述
得到方法参数的实例对象 Int。
- method
longfun long(): Long
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofLong
long
功能描述
得到方法参数的实例对象 Long。
- method
shortfun short(): Short
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofShort
short
功能描述
得到方法参数的实例对象 Short。
- method
doublefun double(): Double
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofDouble
double
功能描述
得到方法参数的实例对象 Double。
- method
floatfun float(): Float
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofFloat
float
功能描述
得到方法参数的实例对象 Float。
- method
stringfun string(): String
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofString
string
功能描述
得到方法参数的实例对象 String。
- method
charfun char(): Char
变更记录
v1.0.68
新增
功能描述
得到方法参数的实例对象 Char。
- method
booleanfun boolean(): Boolean
变更记录
v1.0.66
新增
v1.0.68
修改
修改 为 ofBoolean
boolean
功能描述
得到方法参数的实例对象 Boolean。
- method
anyfun any(): Any?
变更记录
v1.0.77
新增
功能描述
得到方法参数的实例对象 Any。
- method
arrayinline fun <reified T> array(): Array<T>
变更记录
v1.0.68
新增
功能描述
得到方法参数的实例对象 Array。
- method
listinline fun <reified T> list(): List<T>
变更记录
v1.0.68
新增
功能描述
得到方法参数的实例对象 List。
- method
setfun <T> set(any: T?)
变更记录
v1.0
添加
功能描述
设置方法参数的实例对象。
- method
setNullfun setNull()
变更记录
v1.0
添加
功能描述
设置方法参数的实例对象为
null
。
- method
setTruefun setTrue()
变更记录
v1.0
添加
功能描述
设置方法参数的实例对象为
true
。
特别注意
请确保目标对象的类型是 Boolean。
- method
setFalsefun setFalse()
变更记录
v1.0
添加
功能描述
设置方法参数的实例对象为
false
。
特别注意
请确保目标对象的类型是 Boolean。