mirror of
				https://github.com/HighCapable/YukiHookAPI.git
				synced 2025-10-26 05:19:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			479 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			479 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ## YukiHookAPI [object]
 | ||
| 
 | ||
| ```kotlin
 | ||
| object YukiHookAPI
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0` `添加`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 这是 `YukiHookAPI` 的 API 调用总类,Hook 相关功能的开始、Hook 相关功能的配置都在这里。
 | ||
| 
 | ||
| ### API_VERSION_NAME [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| const val API_VERSION_NAME: String
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.4` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 获取当前 `YukiHookAPI` 的版本。
 | ||
| 
 | ||
| ### API_VERSION_CODE [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| const val API_VERSION_CODE: Int
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.4` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 获取当前 `YukiHookAPI` 的版本号。
 | ||
| 
 | ||
| ### ~~executorName [field]~~ <!-- {docsify-ignore} -->
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.5` `新增`
 | ||
| 
 | ||
| `v1.0.91` `移除`
 | ||
| 
 | ||
| 请转移到 `Status.executorName`
 | ||
| 
 | ||
| ### ~~executorVersion [field]~~ <!-- {docsify-ignore} -->
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.5` `新增`
 | ||
| 
 | ||
| `v1.0.91` `移除`
 | ||
| 
 | ||
| 请转移到 `Status.executorVersion`
 | ||
| 
 | ||
| ### Status [object]
 | ||
| 
 | ||
| ```kotlin
 | ||
| object Status
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 当前 `YukiHookAPI` 的状态。
 | ||
| 
 | ||
| #### executorName [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| val executorName: String
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 获取当前 Hook 框架的名称。
 | ||
| 
 | ||
| 无法获取会返回 `unknown`,`XposedBridge` 不存在会返回 `invalid`。
 | ||
| 
 | ||
| !> 在模块环境中需要启用 `Configs.isEnableHookModuleStatus`。
 | ||
| 
 | ||
| #### executorVersion [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| val executorVersion: Int
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 获取当前 Hook 框架的版本。
 | ||
| 
 | ||
| 无法获取会返回 `-1`。
 | ||
| 
 | ||
| !> 在模块环境中需要启用 `Configs.isEnableHookModuleStatus`。
 | ||
| 
 | ||
| #### isModuleActive [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| val isModuleActive: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 判断模块是否在 Xposed 或太极、无极中激活。
 | ||
| 
 | ||
| !> 在模块环境中你需要将 `Application` 继承于 `ModuleApplication`。
 | ||
| 
 | ||
| !> 在模块环境中需要启用 `Configs.isEnableHookModuleStatus`。
 | ||
| 
 | ||
| !> 在 (Xposed) 宿主环境中仅返回非 `isTaiChiModuleActive` 的激活状态。
 | ||
| 
 | ||
| #### isXposedModuleActive [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| val isXposedModuleActive: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 仅判断模块是否在 Xposed 中激活。
 | ||
| 
 | ||
| !> 在模块环境中需要启用 `Configs.isEnableHookModuleStatus`。
 | ||
| 
 | ||
| !> 在 (Xposed) 宿主环境中始终返回 true。
 | ||
| 
 | ||
| #### isTaiChiModuleActive [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| val isTaiChiModuleActive: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 仅判断模块是否在太极、无极中激活。
 | ||
| 
 | ||
| !> 在模块环境中你需要将 `Application` 继承于 `ModuleApplication`。
 | ||
| 
 | ||
| !> 在 (Xposed) 宿主环境中始终返回 false。
 | ||
| 
 | ||
| #### isSupportResourcesHook [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| val isSupportResourcesHook: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.91` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 判断当前 Hook Framework 是否支持资源钩子(Resources Hook)。
 | ||
| 
 | ||
| !> 在模块环境中需要启用 `Configs.isEnableHookModuleStatus`。
 | ||
| 
 | ||
| !> 在 (Xposed) 宿主环境中可能会延迟等待事件回调后才会返回 true。
 | ||
| 
 | ||
| !> 请注意你需要确保 `InjectYukiHookWithXposed.isUsingResourcesHook` 已启用,否则始终返回 false。
 | ||
| 
 | ||
| ### Configs [object]
 | ||
| 
 | ||
| ```kotlin
 | ||
| object Configs
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0` `添加`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 对 API 相关功能的配置类。
 | ||
| 
 | ||
| #### debugTag [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var debugTag: String
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0` `添加`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 模块在调用 `logger` 时打印的日志 `TAG` 名称。
 | ||
| 
 | ||
| 你可以方便地进行自定义,并可以在 `Logcat` 和 `XposedBridge.log` 中找到它们。
 | ||
| 
 | ||
| #### isDebug [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isDebug: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0` `添加`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用 DEBUG 模式。
 | ||
| 
 | ||
| 默认为开启状态,开启后模块将会向 `Logcat` 和 `XposedBridge.log` 打印详细的 Hook 日志,关闭后仅会打印 `E` 级别的日志。
 | ||
| 
 | ||
| #### isAllowPrintingLogs [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isAllowPrintingLogs: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.4` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用调试日志的输出功能。
 | ||
| 
 | ||
| !> 关闭后将会停用 `YukiHookAPI` 对全部日志的输出,但是不影响当你手动调用日志方法输出日志。
 | ||
| 
 | ||
| #### isEnableModulePrefsCache [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isEnableModulePrefsCache: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.5` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用 `YukiHookModulePrefs` 的键值缓存功能。
 | ||
| 
 | ||
| 为防止内存复用过高问题,此功能默认启用。
 | ||
| 
 | ||
| 你可以手动在 `YukiHookModulePrefs` 中自由开启和关闭缓存功能以及清除缓存。
 | ||
| 
 | ||
| #### isEnableModuleAppResourcesCache [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isEnableModuleAppResourcesCache: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.87` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用当前 Xposed 模块自身 `Resources` 缓存功能。
 | ||
| 
 | ||
| 为防止内存复用过高问题,此功能默认启用。
 | ||
| 
 | ||
| 你可以手动调用 `PackageParam.refreshModuleAppResources` 来刷新缓存。
 | ||
| 
 | ||
| !> 关闭后每次使用 `PackageParam.moduleAppResources` 都会重新创建,可能会造成运行缓慢。
 | ||
| 
 | ||
| #### isEnableHookModuleStatus [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isEnableHookModuleStatus: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.88` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用 Hook Xposed 模块激活等状态功能.
 | ||
| 
 | ||
| 为原生支持 Xposed 模块激活状态检测,此功能默认启用。
 | ||
| 
 | ||
| !> 关闭后你将不能再在模块环境中使用 `YukiHookAPI.Status` 中的功能。
 | ||
| 
 | ||
| #### isEnableDataChannel [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isEnableDataChannel: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.88` `新增`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用当前 Xposed 模块与宿主交互的 `YukiHookDataChannel` 功能。
 | ||
| 
 | ||
| 请确保 Xposed 模块的 `Application` 继承于 `ModuleApplication` 才能有效。
 | ||
| 
 | ||
| 此功能默认启用,关闭后将不会在功能初始化的时候装载 `YukiHookDataChannel`。
 | ||
| 
 | ||
| #### isEnableMemberCache [field]
 | ||
| 
 | ||
| ```kotlin
 | ||
| var isEnableMemberCache: Boolean
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0.68` `新增`
 | ||
| 
 | ||
| `v1.0.80` `修改`
 | ||
| 
 | ||
| 将方法体进行 inline
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 是否启用 `Member` 缓存功能。
 | ||
| 
 | ||
| 为防止 `Member` 复用过高造成的系统 GC 问题,此功能默认启用。
 | ||
| 
 | ||
| 启用后会缓存已经找到的 `Class`、`Method`、`Constructor`、`Field`。
 | ||
| 
 | ||
| 缓存的 `Member` 都将处于 `MemberCacheStore` 的全局静态实例中。
 | ||
| 
 | ||
| 推荐使用 `MethodFinder`、`ConstructorFinder`、`FieldFinder` 来获取 `Member`。
 | ||
| 
 | ||
| 除非缓存的 `Member` 发生了混淆的问题,例如使用 R8 混淆后的 APP 的目标 `Member`,否则建议启用。
 | ||
| 
 | ||
| ### configs [method]
 | ||
| 
 | ||
| ```kotlin
 | ||
| inline fun configs(initiate: Configs.() -> Unit)
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0` `添加`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 对 `Configs` 类实现了一个 `lambda` 方法体。
 | ||
| 
 | ||
| 你可以轻松的调用它进行配置。
 | ||
| 
 | ||
| **功能示例**
 | ||
| 
 | ||
| 你可以在 `HookEntryClass` 的 `onInit` 方法中调用 `configs` 方法完成对 API 的功能配置,实时生效。
 | ||
| 
 | ||
| > 示例如下
 | ||
| 
 | ||
| ```kotlin
 | ||
| class HookEntryClass : IYukiHookXposedInit {
 | ||
| 
 | ||
|     override fun onInit() {
 | ||
|         YukiHookAPI.configs {
 | ||
|             debugTag = "YukiHookAPI"
 | ||
|             isDebug = BuildConfig.DEBUG
 | ||
|             isAllowPrintingLogs = true
 | ||
|             isEnableModulePrefsCache = true
 | ||
|             isEnableModuleAppResourcesCache = true
 | ||
|             isEnableHookModuleStatus = true
 | ||
|             isEnableDataChannel = true
 | ||
|             isEnableMemberCache = true
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     override fun onHook() {
 | ||
|         // Your code here.
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| 若觉得上面的写法不美观,你还可以写得更加简洁。
 | ||
| 
 | ||
| > 示例如下
 | ||
| 
 | ||
| ```kotlin
 | ||
| class HookEntryClass : IYukiHookXposedInit {
 | ||
| 
 | ||
|     override fun onInit() = configs {
 | ||
|         debugTag = "YukiHookAPI"
 | ||
|         isDebug = BuildConfig.DEBUG
 | ||
|         isAllowPrintingLogs = true
 | ||
|         isEnableModulePrefsCache = true
 | ||
|         isEnableModuleAppResourcesCache = true
 | ||
|         isEnableHookModuleStatus = true
 | ||
|         isEnableDataChannel = true
 | ||
|         isEnableMemberCache = true
 | ||
|     }
 | ||
| 
 | ||
|     override fun onHook() {
 | ||
|         // Your code here.
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| 你也可以不通过 `configs` 方法,直接进行配置。
 | ||
| 
 | ||
| > 示例如下
 | ||
| 
 | ||
| ```kotlin
 | ||
| class HookEntryClass : IYukiHookXposedInit {
 | ||
| 
 | ||
|     override fun onInit() {
 | ||
|         YukiHookAPI.Configs.debugTag = "YukiHookAPI"
 | ||
|         YukiHookAPI.Configs.isDebug = BuildConfig.DEBUG
 | ||
|         YukiHookAPI.Configs.isAllowPrintingLogs = true
 | ||
|         YukiHookAPI.Configs.isEnableModulePrefsCache = true
 | ||
|         YukiHookAPI.Configs.isEnableModuleAppResourcesCache = true
 | ||
|         YukiHookAPI.Configs.isEnableHookModuleStatus = true
 | ||
|         YukiHookAPI.Configs.isEnableDataChannel = true
 | ||
|         YukiHookAPI.Configs.isEnableMemberCache = true
 | ||
|     }
 | ||
| 
 | ||
|     override fun onHook() {
 | ||
|         // Your code here.
 | ||
|     }
 | ||
| }
 | ||
| ```
 | ||
| 
 | ||
| ### encase [method]
 | ||
| 
 | ||
| ```kotlin
 | ||
| fun encase(initiate: PackageParam.() -> Unit)
 | ||
| ```
 | ||
| 
 | ||
| ```kotlin
 | ||
| fun encase(vararg hooker: YukiBaseHooker)
 | ||
| ```
 | ||
| 
 | ||
| ```kotlin
 | ||
| fun encase(baseContext: Context?, initiate: PackageParam.() -> Unit)
 | ||
| ```
 | ||
| 
 | ||
| ```kotlin
 | ||
| fun encase(baseContext: Context?, vararg hooker: YukiBaseHooker)
 | ||
| ```
 | ||
| 
 | ||
| **变更记录**
 | ||
| 
 | ||
| `v1.0` `添加`
 | ||
| 
 | ||
| **功能描述**
 | ||
| 
 | ||
| > 装载 Hook 入口的核心方法。
 | ||
| 
 | ||
| **功能示例**
 | ||
| 
 | ||
| 详情请参考
 | ||
| 
 | ||
| - [通过 Lambda 创建](config/api-example?id=通过-lambda-创建)
 | ||
| 
 | ||
| - [通过自定义 Hooker 创建](config/api-example?id=通过自定义-hooker-创建)
 | ||
| 
 | ||
| - [作为 Hook API 使用需要注意的地方](config/api-example?id=作为-hook-api-使用需要注意的地方) |