mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
...
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
- 这是一个使用 Kotlin 重新构建的高效 Xposed Hook API
|
||||
- 名称取自 <a href='https://www.bilibili.com/bangumi/play/ss5016/?from=search&seid=313229405371562533&spm_id_from=333.337.0.0'>
|
||||
《ももくり》女主 栗原 雪(Yuki)</a>
|
||||
- 前身为 [TMore](https://github.com/fankes/TMore) 开发学习项目中使用的 Innocent Xposed API,现在重新命名并开源。
|
||||
|
||||
# Get Startted
|
||||
|
||||
|
@@ -38,11 +38,11 @@ import com.highcapable.yukihookapi.demo.InjectTest
|
||||
import com.highcapable.yukihookapi.demo.MainActivity
|
||||
import com.highcapable.yukihookapi.hook.factory.encase
|
||||
import com.highcapable.yukihookapi.hook.factory.findMethod
|
||||
import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy
|
||||
import com.highcapable.yukihookapi.hook.type.ActivityClass
|
||||
import com.highcapable.yukihookapi.hook.type.BundleClass
|
||||
import com.highcapable.yukihookapi.hook.type.StringType
|
||||
import com.highcapable.yukihookapi.hook.type.UnitType
|
||||
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
|
||||
|
||||
// for test
|
||||
@InjectYukiHookWithXposed
|
||||
|
@@ -31,7 +31,7 @@ package com.highcapable.yukihookapi.annotation.xposed
|
||||
|
||||
import androidx.annotation.Keep
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy
|
||||
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
|
||||
|
||||
/**
|
||||
* 标识 YukiHook 注入 Xposed 入口的类注释
|
||||
|
@@ -380,6 +380,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略 Hook 进行过程中发生错误
|
||||
* @return [Result] 可继续向下监听
|
||||
*/
|
||||
fun ignoredConductFailure() = onConductFailure { _, _ -> }
|
||||
|
||||
/**
|
||||
* 监听 Hook 开始时发生错误的回调方法
|
||||
* @param initiate 回调错误 - ([Throwable] 异常)
|
||||
@@ -390,6 +396,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略 Hook 开始时发生的错误
|
||||
* @return [Result] 可继续向下监听
|
||||
*/
|
||||
fun ignoredHookingFailure() = onHookingFailure {}
|
||||
|
||||
/**
|
||||
* 监听 Hook 过程发生找不到方法、变量错误的回调方法
|
||||
* @param initiate 回调错误 - ([Throwable] 异常)
|
||||
@@ -400,6 +412,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略 Hook 过程发生找不到方法、变量的错误
|
||||
* @return [Result] 可继续向下监听
|
||||
*/
|
||||
fun ignoredNoSuchMemberFailure() = onNoSuchMemberFailure {}
|
||||
|
||||
/**
|
||||
* 监听全部 Hook 过程发生错误的回调方法
|
||||
* @param initiate 回调错误 - ([Throwable] 异常)
|
||||
@@ -409,6 +427,12 @@ class YukiHookCreater(private val packageParam: PackageParam, val hookClass: Cla
|
||||
onAllFailureCallback = initiate
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* 忽略全部 Hook 过程发生的错误
|
||||
* @return [Result] 可继续向下监听
|
||||
*/
|
||||
fun ignoredAllFailure() = onAllFailure {}
|
||||
}
|
||||
}
|
||||
}
|
@@ -29,8 +29,9 @@ package com.highcapable.yukihookapi.hook.entity
|
||||
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.annotation.DoNotUseMethod
|
||||
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
|
||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||
import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy
|
||||
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
|
||||
|
||||
/**
|
||||
* YukiHook 的子类实现
|
||||
@@ -41,10 +42,14 @@ import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy
|
||||
*
|
||||
* 你可以在 [YukiHookXposedInitProxy] 的 [YukiHookXposedInitProxy.onHook] 中实现如下用法
|
||||
*
|
||||
* 调用 [YukiHookAPI.encase] encase(moduleName = "模块包名", MainHooker(), SecondHooker(), ThirdHooker() ...)
|
||||
* 第一种方式:调用 [YukiHookAPI.encase] encase(MainHooker(), SecondHooker(), ThirdHooker() ...)
|
||||
*
|
||||
* 第二种方式:调用 [YukiHookAPI.encase] encase(moduleName = "模块包名", MainHooker(), SecondHooker(), ThirdHooker() ...)
|
||||
*
|
||||
* 调用 [PackageParam.loadHooker] loadHooker(hooker = CustomHooker())
|
||||
*
|
||||
* 更多请参考 [InjectYukiHookWithXposed] 中的注释内容
|
||||
*
|
||||
* ....
|
||||
*
|
||||
* 继承类参考示例:
|
||||
|
@@ -36,7 +36,7 @@ import android.os.Bundle
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||
import com.highcapable.yukihookapi.hook.proxy.YukiHookXposedInitProxy
|
||||
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
|
||||
|
||||
/**
|
||||
* 在 [YukiHookXposedInitProxy] 中装载 [YukiHookAPI]
|
||||
|
@@ -27,15 +27,18 @@
|
||||
*/
|
||||
@file:Suppress("unused")
|
||||
|
||||
package com.highcapable.yukihookapi.hook.proxy
|
||||
package com.highcapable.yukihookapi.hook.xposed.proxy
|
||||
|
||||
import androidx.annotation.Keep
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
|
||||
import com.highcapable.yukihookapi.hook.factory.encase
|
||||
|
||||
/**
|
||||
* YukiHook 的 Xposed 装载 API 调用接口
|
||||
*
|
||||
* - 请在此类上添加注释 [InjectYukiHookWithXposed] 标记模块 Hook 入口
|
||||
*
|
||||
* Hook 开始时将自动调用 [onHook] 方法
|
||||
*
|
||||
* 请在 [onHook] 中调用 [YukiHookAPI.encase] 或直接调用 [encase]
|
||||
@@ -44,7 +47,7 @@ import com.highcapable.yukihookapi.hook.factory.encase
|
||||
*
|
||||
* ....
|
||||
*
|
||||
* override fun onHook() = YukiHookAPI.encase(moduleName = "模块包名") {
|
||||
* override fun onHook() = YukiHookAPI.encase(moduleName = "模块包名/可选") {
|
||||
*
|
||||
* ....// Your code here.
|
||||
*
|
||||
@@ -56,7 +59,7 @@ import com.highcapable.yukihookapi.hook.factory.encase
|
||||
*
|
||||
* ....
|
||||
*
|
||||
* override fun onHook() = encase(moduleName = "模块包名") {
|
||||
* override fun onHook() = encase(moduleName = "模块包名/可选") {
|
||||
*
|
||||
* ....// Your code here.
|
||||
*
|
Reference in New Issue
Block a user