mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-10-22 11:29:33 +08:00
Fix an hardcore bug
This commit is contained in:
@@ -78,7 +78,7 @@ class HookEntry : IYukiHookXposedInit {
|
|||||||
// 开始你的 Hook
|
// 开始你的 Hook
|
||||||
// 可简写为 encase {}
|
// 可简写为 encase {}
|
||||||
YukiHookAPI.encase {
|
YukiHookAPI.encase {
|
||||||
// 装载到系统框架
|
// 装载 APP Zygote 事件
|
||||||
loadZygote {
|
loadZygote {
|
||||||
// 得到需要 Hook 的 Class
|
// 得到需要 Hook 的 Class
|
||||||
ActivityClass.hook {
|
ActivityClass.hook {
|
||||||
|
@@ -240,7 +240,11 @@ fun loadApp(name: String, hooker: YukiBaseHooker)
|
|||||||
|
|
||||||
`name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
`name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
||||||
|
|
||||||
装载并 Hook 指定、全部包名的 APP,若要 Hook 系统框架,请使用 `loadZygote`。
|
装载并 Hook 指定、全部包名的 APP。
|
||||||
|
|
||||||
|
若要装载 APP Zygote 事件,请使用 `loadZygote`。
|
||||||
|
|
||||||
|
若要 Hook 系统框架,请使用 `loadSystem`。
|
||||||
|
|
||||||
### loadZygote [method]
|
### loadZygote [method]
|
||||||
|
|
||||||
@@ -258,6 +262,26 @@ fun loadZygote(hooker: YukiBaseHooker)
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
|
> 装载 APP Zygote 事件。
|
||||||
|
|
||||||
|
方法中的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
||||||
|
|
||||||
|
### loadSystem [method]
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
inline fun loadSystem(initiate: PackageParam.() -> Unit)
|
||||||
|
```
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
fun loadSystem(hooker: YukiBaseHooker)
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.0.82` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
> 装载并 Hook 系统框架。
|
> 装载并 Hook 系统框架。
|
||||||
|
|
||||||
方法中的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
方法中的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
|
||||||
|
@@ -201,7 +201,7 @@ encase {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
你还可以同时使用 `loadZygote` 方法来装载系统框架。
|
你还可以同时使用 `loadZygote` 方法来装载新的进程被 fork 后的第一个事件 `initZygote`。
|
||||||
|
|
||||||
> 示例如下
|
> 示例如下
|
||||||
|
|
||||||
|
@@ -192,11 +192,11 @@ TestClass.hook {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Hook 系统框架
|
### Hook Zygote
|
||||||
|
|
||||||
在 `YukiHookAPI` 中,Hook 系统框架的实现非常简单。
|
在 APP 启动时,新的进程被 fork 后的第一个事件 `initZygote`。
|
||||||
|
|
||||||
假设我们要全局 Hook 一个 `Activity` 的 `onCreate` 事件
|
假设我们要全局 Hook 一个 APP `Activity` 的 `onCreate` 事件
|
||||||
|
|
||||||
在 `encase` 方法体中添加代码。
|
在 `encase` 方法体中添加代码。
|
||||||
|
|
||||||
@@ -221,7 +221,34 @@ loadZygote {
|
|||||||
|
|
||||||
这样就实现了上述的 Hook 功能。
|
这样就实现了上述的 Hook 功能。
|
||||||
|
|
||||||
!> `loadZygote` 与 `loadApp(name = "android")` 有直接性区别,`loadZygote` 会在 `initZygote` 中装载,若要 Hook 系统框架,建议使用 `loadZygote`。
|
### Hook 系统框架
|
||||||
|
|
||||||
|
在 `YukiHookAPI` 中,Hook 系统框架的实现非常简单。
|
||||||
|
|
||||||
|
假设我们要全局 Hook 一个系统 `Activity` 的 `onCreate` 事件
|
||||||
|
|
||||||
|
在 `encase` 方法体中添加代码。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
loadSystem {
|
||||||
|
ActivityClass.hook {
|
||||||
|
injectMember {
|
||||||
|
method {
|
||||||
|
name = "onCreate"
|
||||||
|
param(BundleClass)
|
||||||
|
returnType = UnitType
|
||||||
|
}
|
||||||
|
afterHook {
|
||||||
|
// Your code here.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
!> `loadZygote` 与 `loadSystem` 有直接性区别,`loadZygote` 会在 `initZygote` 中装载,系统框架被视为一个单独的 APP 而存在,若要 Hook 系统框架,请使用 `loadSystem`。
|
||||||
|
|
||||||
### Hook Resources
|
### Hook Resources
|
||||||
|
|
||||||
|
@@ -169,8 +169,10 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
|||||||
/**
|
/**
|
||||||
* 装载并 Hook 指定、全部包名的 APP
|
* 装载并 Hook 指定、全部包名的 APP
|
||||||
*
|
*
|
||||||
* 若要 Hook 系统框架 - 请使用 [loadZygote]
|
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
|
||||||
* @param name 包名 - 不填将过滤除了系统框架的全部 APP
|
*
|
||||||
|
* 若要 Hook 系统框架 - 请使用 [loadSystem]
|
||||||
|
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP
|
||||||
* @param initiate 方法体
|
* @param initiate 方法体
|
||||||
*/
|
*/
|
||||||
inline fun loadApp(name: String = "", initiate: PackageParam.() -> Unit) {
|
inline fun loadApp(name: String = "", initiate: PackageParam.() -> Unit) {
|
||||||
@@ -180,8 +182,10 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
|||||||
/**
|
/**
|
||||||
* 装载并 Hook 指定、全部包名的 APP
|
* 装载并 Hook 指定、全部包名的 APP
|
||||||
*
|
*
|
||||||
* 若要 Hook 系统框架 - 请使用 [loadZygote]
|
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
|
||||||
* @param name 包名 - 不填将过滤除了系统框架的全部 APP
|
*
|
||||||
|
* 若要 Hook 系统框架 - 请使用 [loadSystem]
|
||||||
|
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP
|
||||||
* @param hooker Hook 子类
|
* @param hooker Hook 子类
|
||||||
*/
|
*/
|
||||||
fun loadApp(name: String = "", hooker: YukiBaseHooker) {
|
fun loadApp(name: String = "", hooker: YukiBaseHooker) {
|
||||||
@@ -192,12 +196,24 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
|||||||
* 装载并 Hook 系统框架
|
* 装载并 Hook 系统框架
|
||||||
* @param initiate 方法体
|
* @param initiate 方法体
|
||||||
*/
|
*/
|
||||||
|
inline fun loadSystem(initiate: PackageParam.() -> Unit) = loadApp(YukiHookBridge.SYSTEM_FRAMEWORK_NAME, initiate)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装载并 Hook 系统框架
|
||||||
|
* @param hooker Hook 子类
|
||||||
|
*/
|
||||||
|
fun loadSystem(hooker: YukiBaseHooker) = loadApp(YukiHookBridge.SYSTEM_FRAMEWORK_NAME, hooker)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 装载 APP Zygote 事件
|
||||||
|
* @param initiate 方法体
|
||||||
|
*/
|
||||||
inline fun loadZygote(initiate: PackageParam.() -> Unit) {
|
inline fun loadZygote(initiate: PackageParam.() -> Unit) {
|
||||||
if (wrapper?.type == HookEntryType.ZYGOTE) initiate(this)
|
if (wrapper?.type == HookEntryType.ZYGOTE) initiate(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 装载并 Hook 系统框架
|
* 装载 APP Zygote 事件
|
||||||
* @param hooker Hook 子类
|
* @param hooker Hook 子类
|
||||||
*/
|
*/
|
||||||
fun loadZygote(hooker: YukiBaseHooker) {
|
fun loadZygote(hooker: YukiBaseHooker) {
|
||||||
|
@@ -56,7 +56,8 @@ import java.lang.reflect.Member
|
|||||||
object YukiHookBridge {
|
object YukiHookBridge {
|
||||||
|
|
||||||
/** Android 系统框架名称 */
|
/** Android 系统框架名称 */
|
||||||
private const val SYSTEM_FRAMEWORK_NAME = "android"
|
@PublishedApi
|
||||||
|
internal const val SYSTEM_FRAMEWORK_NAME = "android"
|
||||||
|
|
||||||
/** Xposed 是否装载完成 */
|
/** Xposed 是否装载完成 */
|
||||||
private var isXposedInitialized = false
|
private var isXposedInitialized = false
|
||||||
|
Reference in New Issue
Block a user