11 KiB
PackageParam [class]
open class PackageParam(internal var wrapper: PackageParamWrapper?)
变更记录
v1.0
添加
功能描述
装载 Hook 的目标 APP 入口对象实现类。
appClassLoader [field]
val appClassLoader:ClassLoader
变更记录
v1.0
添加
功能描述
获取当前 Hook APP 的
ClassLoader
。
appInfo [field]
val appInfo: ApplicationInfo
变更记录
v1.0
添加
功能描述
获取当前 Hook APP 的
ApplicationInfo
。
appContext [field]
val appContext: Application
变更记录
v1.0.72
新增
功能描述
获取当前 Hook APP 的
Application
。
!> 首次装载可能是空的,请延迟一段时间再获取。
appResources [field]
val appResources:Resources
变更记录
v1.0.80
新增
功能描述
获取当前 Hook APP 的 Resources。
!> 你只能在 HookResources.hook
方法体内或 appContext
装载完毕时进行调用。
processName [field]
val processName: String
变更记录
v1.0
添加
功能描述
获取当前 Hook APP 的进程名称。
packageName [field]
val packageName: String
变更记录
v1.0
添加
功能描述
获取当前 Hook APP 的包名。
isFirstApplication [field]
val isFirstApplication: Boolean
变更记录
v1.0
添加
功能描述
获取当前 Hook APP 是否为第一个
Application
。
mainProcessName [field]
val mainProcessName: String
变更记录
v1.0.70
新增
功能描述
获取当前 Hook APP 的主进程名称。
其对应的就是 packageName
。
moduleAppFilePath [field]
val moduleAppFilePath: String
变更记录
v1.0.80
新增
功能描述
获取当前 Xposed 模块自身 APK 文件路径。
!> 作为 Hook API 装载时无法使用,会获取到空字符串。
moduleAppResources [field]
val moduleAppResources: YukiModuleResources
变更记录
v1.0.80
新增
功能描述
获取当前 Xposed 模块自身
Resources
。
!> 作为 Hook API 或不支持的 Hook Framework 装载时无法使用,会抛出异常。
prefs [field]
val prefs: YukiHookModulePrefs
变更记录
v1.0
添加
功能描述
获得当前使用的存取数据对象缓存实例。
!> 作为 Hook API 装载时无法使用,会抛出异常。
prefs [method]
fun prefs(name: String): YukiHookModulePrefs
变更记录
v1.0
添加
v1.0.80
修改
将方法体进行 inline
功能描述
获得当前使用的存取数据对象缓存实例。
你可以通过 name
来自定义 Sp 存储的名称。
!> 作为 Hook API 装载时无法使用,会抛出异常。
resources [method]
fun resources(): HookResources
变更记录
v1.0.80
新增
功能描述
获得当前 Hook APP 的
YukiResources
对象。
请调用 HookResources.hook
方法开始 Hook。
refreshModuleAppResources [method]
fun refreshModuleAppResources()
变更记录
v1.0.87
新增
功能描述
刷新当前 Xposed 模块自身
Resources
。
loadApp [method]
inline fun loadApp(name: String, initiate: PackageParam.() -> Unit)
fun loadApp(name: String, hooker: YukiBaseHooker)
变更记录
v1.0
添加
v1.0.80
修改
将方法体进行 inline
功能描述
装载并 Hook 指定包名的 APP。
name
为 APP 的包名,后方的两个参数一个可作为 lambda
方法体使用,一个可以直接装载子 Hooker。
装载并 Hook 指定、全部包名的 APP。
若要装载 APP Zygote 事件,请使用 loadZygote
。
若要 Hook 系统框架,请使用 loadSystem
。
loadZygote [method]
inline fun loadZygote(initiate: PackageParam.() -> Unit)
fun loadZygote(hooker: YukiBaseHooker)
变更记录
v1.0.80
新增
功能描述
装载 APP Zygote 事件。
方法中的两个参数一个可作为 lambda
方法体使用,一个可以直接装载子 Hooker。
loadSystem [method]
inline fun loadSystem(initiate: PackageParam.() -> Unit)
fun loadSystem(hooker: YukiBaseHooker)
变更记录
v1.0.82
新增
功能描述
装载并 Hook 系统框架。
方法中的两个参数一个可作为 lambda
方法体使用,一个可以直接装载子 Hooker。
withProcess [method]
inline fun withProcess(name: String, initiate: PackageParam.() -> Unit)
fun withProcess(name: String, hooker: YukiBaseHooker)
变更记录
v1.0.70
新增
功能描述
装载并 Hook APP 的指定进程。
name
为 APP 的进程名称,后方的两个参数一个可作为 lambda
方法体使用,一个可以直接装载子 Hooker。
loadHooker [method]
fun loadHooker(hooker: YukiBaseHooker)
变更记录
v1.0
添加
功能描述
装载 Hook 子类。
你可以填入 hooker
在 Hooker 中继续装载 Hooker。
clazz [field]
val String.clazz: Class<*>
val VariousClass.clazz: Class<*>
变更记录
v1.0
添加
功能描述
字符串、
VariousClass
转换为实体类。
功能示例
你可以轻松地将 String
类型的 Class
包名转为 Class
实例。
示例如下
"com.example.demo.DemoClass".clazz
为了美观,你可以把字符串用 (
)
括起来。
示例如下
("com.example.demo.DemoClass").clazz
你还可以创建一个 VariousClass
,并转换为实体类。
VariousClass
会枚举所有设置的 Class
并最终获得完全匹配的那一个。
示例如下
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").clazz
hasClass [field]
val String.hasClass: Boolean
变更记录
v1.0
添加
功能描述
通过字符串使用当前
appClassLoader
查找类是否存在。
功能示例
你可以轻松的使用此方法判断字符串中的类是否存在。
示例如下
if("com.example.demo.DemoClass".hasClass) {
// Your code here.
}
findClass [method]
fun findClass(name: String): HookClass
fun findClass(vararg name: String): VariousClass
变更记录
v1.0
添加
v1.0.1
修改
移除了 方法findClass(various: VariousClass)
功能描述
通过完整包名+名称查找需要被 Hook 的
Class
。
功能示例
你可以使用三种方式查找你需要 Hook 的目标 Class
。
你可以直接将被查找的 Class
完整包名+名称填入 name
中。
示例如下
findClass(name = "com.example.demo.DemoClass")
若你不确定多个版本的 Class
以及不同名称,你可以将多个完整包名+名称填入 name
中。
示例如下
findClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2", "com.example.demo.DemoClass3")
你还可以创建一个 VariousClass
,将 Class
的完整包名+名称填入 VariousClass
的 name
中并填入 various
参数中。
示例如下
val variousClass = VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2", "com.example.demo.DemoClass3")
hook [method]
inline fun String.hook(isUseAppClassLoader: Boolean, initiate: YukiMemberHookCreater.() -> Unit): YukiMemberHookCreater.Result
inline fun Class<*>.hook(isUseAppClassLoader: Boolean, initiate: YukiMemberHookCreater.() -> Unit): YukiMemberHookCreater.Result
inline fun VariousClass.hook(isUseAppClassLoader: Boolean, initiate: YukiMemberHookCreater.() -> Unit): YukiMemberHookCreater.Result
inline fun HookClass.hook(isUseAppClassLoader: Boolean, initiate: YukiMemberHookCreater.() -> Unit): YukiMemberHookCreater.Result
变更记录
v1.0
添加
v1.0.1
修改
新增 VariousClass
的直接调用 hook
方法
v1.0.2
修改
新增 String
的直接调用 hook
方法
v1.0.3
修改
新增 YukiMemberHookCreater.Result
返回值
v1.0.70
修改
新增 isUseAppClassLoader
参数
v1.0.80
修改
将方法体进行 inline
功能描述
这是一切 Hook 的入口创建方法,Hook 方法、构造类。
功能示例
如你所见,Hook 方法体的创建可使用 4 种方式。
通过字符串类名得到 HookClass
实例进行创建。
示例如下
("com.example.demo.DemoClass").hook {
// Your code here.
}
通过 findClass
得到 HookClass
实例进行创建。
示例如下
findClass(name = "com.example.demo.DemoClass").hook {
// Your code here.
}
使用 stub
或直接拿到 Class
实例进行创建。
示例如下
Activity::class.java.hook {
// Your code here.
}
使用 VariousClass
实例进行创建。
示例如下
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").hook {
// Your code here.
}
或者直接使用可变字符串数组进行创建。
示例如下
findClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").hook {
// Your code here.
}
!> 以下是关于 Hook 目标 Class 的一个特殊情况说明。
若你 Hook 的 Class
实例的 ClassLoader
并不是当前的 appClassLoader
,那么你需要做一下小的调整。
在 hook
方法中加入 isUseAppClassLoader = false
,这样,你的 Class
就不会被重新绑定到 appClassLoader
了。
此方案适用于目标 Class
无法在当前 appClassLoader
中被得到但可以得到 Class
实例的情况。
示例如下
// 这里的做法标识了 hook 不会再将 YourClass 重新与当前 appClassLoader 绑定
YourClass.hook(isUseAppClassLoader = false) {
// Your code here.
}
hook [method]
inline fun HookResources.hook(initiate: YukiResourcesHookCreater.() -> Unit)
变更记录
v1.0.80
`新增
功能描述
Hook APP 的 Resources。
功能示例
Resources Hook 为固定用法,获取 resources
对象,然后调用 hook
方法开始 Hook。
示例如下
resources().hook {
// Your code here.
}
!> 这是固定用法,为了防止发生问题,你不可手动实现任何 HookResources
实例执行 hook
调用。
将 Resources 的 Hook 设置为这样是为了与 findClass(...).hook
做到统一,使得调用起来逻辑不会混乱。