注意
由于维护成本,YukiHookAPI 从 1.3.0 版本开始将不再会对此文档进行更新且在 2.0.0 版本切换为 Dokka 插件自动生成的 API 文档。
HookParam - class
class 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 方法、构造方法的目标对象实现类。
args - field
val 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()
instance - field
val instance: Any
变更记录
v1.0 添加
功能描述
获取当前 Hook 实例的对象。
特别注意
如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
如果你不确定当前实例的对象是否为 null,你可以使用 instanceOrNull。
instanceOrNull - field
val instanceOrNull: Any?
变更记录
v1.1.8 新增
功能描述
获取当前 Hook 实例的对象。
特别注意
如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
instanceClass - field
val instanceClass: Class<*>?
变更记录
v1.0 添加
v1.2.0 修改
加入可空类型 (空安全)
功能描述
获取当前 Hook 实例的类对象。
特别注意
如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
member - field
val member: Member
变更记录
v1.1.0 新增
功能描述
获取当前 Hook 对象的
Member。
在不确定 Member 类型为 Method 或 Constructor 时可以使用此方法。
method - field
val method: Method
变更记录
v1.0 添加
功能描述
获取当前 Hook 对象的方法。
constructor - field
val constructor: Constructor
变更记录
v1.0 添加
功能描述
获取当前 Hook 对象的构造方法。
result - field
var result: Any?
变更记录
v1.0 添加
功能描述
获取、设置当前 Hook 对象的
method或constructor的返回值。
dataExtra - field
val dataExtra: Bundle
变更记录
v1.1.5 新增
功能描述
获取当前回调方法体范围内的数据存储实例。
hasThrowable - field
val hasThrowable: Boolean
变更记录
v1.1.0 新增
功能描述
判断是否存在设置过的方法调用抛出异常。
throwable - field
val throwable: Throwable?
变更记录
v1.1.0 新增
功能描述
获取设置的方法调用抛出异常。
Throwable.throwToApp - i-ext-method
fun 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 的事实,是不安全的,容易被检测,请按实际场景合理使用。
result - method
inline 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 移除
instance - method
inline fun <reified T> instance(): T
变更记录
v1.0 添加
功能描述
获取当前 Hook 实例的对象
T。
功能示例
你可以通过 instance 方法轻松使用泛型 cast 为目标对象的类型。
示例如下
instance<Activity>().finish()
instanceOrNull - method
inline fun <reified T> instanceOrNull(): T?
变更记录
v1.1.8 新增
功能描述
获取当前 Hook 实例的对象
T。
功能示例
用法请参考 instance 方法。
args - method
fun args(): ArgsIndexCondition
变更记录
v1.0.75 新增
功能描述
获取当前 Hook 对象的
method或constructor的参数数组下标实例化类。
args - method
fun 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()
callOriginal - method
fun 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>()
}
}
invokeOriginal - method
fun 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")
}
}
resultTrue - method
fun resultTrue()
变更记录
v1.0 添加
功能描述
设置当前 Hook 对象方法的
result返回值为true。
特别注意
请确保 result 类型为 Boolean。
resultFalse - method
fun resultFalse()
变更记录
v1.0 添加
功能描述
设置当前 Hook 对象方法的
result返回值为false。
特别注意
请确保 result 类型为 Boolean。
resultNull - method
fun resultNull()
变更记录
v1.0 添加
功能描述
注意
此方法将强制设置 Hook 对象方法的 result 为 null。
ArgsIndexCondition - class
inner class ArgsIndexCondition internal constructor()
变更记录
v1.0.75 新增
功能描述
对方法参数的数组下标进行实例化类。
first - method
fun first(): ArgsModifyer
变更记录
v1.0.75 新增
功能描述
获取当前 Hook 对象的
method或constructor的参数数组第一位。
last - method
fun last(): ArgsModifyer
变更记录
v1.0.75 新增
功能描述
获取当前 Hook 对象的
method或constructor的参数数组最后一位。
ArgsModifyer - class
inner class ArgsModifyer internal constructor(private val index: Int)
变更记录
v1.0 添加
功能描述
对方法参数的修改进行实例化类。
cast - method
fun <T> cast(): T?
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofcast
功能描述
得到方法参数的实例对象
T。
byte - method
fun byte(): Byte?
变更记录
v1.0.68 新增
功能描述
得到方法参数的实例对象 Byte。
int - method
fun int(): Int
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofIntint
功能描述
得到方法参数的实例对象 Int。
long - method
fun long(): Long
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofLonglong
功能描述
得到方法参数的实例对象 Long。
short - method
fun short(): Short
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofShortshort
功能描述
得到方法参数的实例对象 Short。
double - method
fun double(): Double
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofDoubledouble
功能描述
得到方法参数的实例对象 Double。
float - method
fun float(): Float
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofFloatfloat
功能描述
得到方法参数的实例对象 Float。
string - method
fun string(): String
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofStringstring
功能描述
得到方法参数的实例对象 String。
char - method
fun char(): Char
变更记录
v1.0.68 新增
功能描述
得到方法参数的实例对象 Char。
boolean - method
fun boolean(): Boolean
变更记录
v1.0.66 新增
v1.0.68 修改
修改 为 ofBooleanboolean
功能描述
得到方法参数的实例对象 Boolean。
any - method
fun any(): Any?
变更记录
v1.0.77 新增
功能描述
得到方法参数的实例对象 Any。
array - method
inline fun <reified T> array(): Array<T>
变更记录
v1.0.68 新增
功能描述
得到方法参数的实例对象 Array。
list - method
inline fun <reified T> list(): List<T>
变更记录
v1.0.68 新增
功能描述
得到方法参数的实例对象 List。
set - method
fun <T> set(any: T?)
变更记录
v1.0 添加
功能描述
设置方法参数的实例对象。
setNull - method
fun setNull()
变更记录
v1.0 添加
功能描述
设置方法参数的实例对象为
null。
setTrue - method
fun setTrue()
变更记录
v1.0 添加
功能描述
设置方法参数的实例对象为
true。
特别注意
请确保目标对象的类型是 Boolean。
setFalse - method
fun setFalse()
变更记录
v1.0 添加
功能描述
设置方法参数的实例对象为
false。
特别注意
请确保目标对象的类型是 Boolean。
