Merge YukiHookXposedInitProxy to IYukiHookXposedInit

This commit is contained in:
2022-04-22 01:15:59 +08:00
parent a1ed86e6d3
commit ed6cae2add
17 changed files with 148 additions and 67 deletions

View File

@@ -35,10 +35,10 @@ import com.highcapable.yukihookapi.hook.type.android.BundleClass
import com.highcapable.yukihookapi.hook.type.java.StringArrayClass import com.highcapable.yukihookapi.hook.type.java.StringArrayClass
import com.highcapable.yukihookapi.hook.type.java.StringType import com.highcapable.yukihookapi.hook.type.java.StringType
import com.highcapable.yukihookapi.hook.type.java.UnitType import com.highcapable.yukihookapi.hook.type.java.UnitType
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
@InjectYukiHookWithXposed @InjectYukiHookWithXposed
class HookEntry : YukiHookXposedInitProxy { class HookEntry : IYukiHookXposedInit {
override fun onInit() { override fun onInit() {
// 配置 YuKiHookAPI // 配置 YuKiHookAPI

View File

@@ -12,7 +12,7 @@
[filename](public/InjectYukiHookWithXposed.md ':include') [filename](public/InjectYukiHookWithXposed.md ':include')
[filename](public/YukiHookXposedInitProxy.md ':include') [filename](public/IYukiHookXposedInit.md ':include')
[filename](public/YukiHookModulePrefs.md ':include') [filename](public/YukiHookModulePrefs.md ':include')

View File

@@ -1,13 +1,19 @@
## YukiHookXposedInitProxy [interface] ## IYukiHookXposedInit [interface]
```kotlin ```kotlin
interface YukiHookXposedInitProxy interface IYukiHookXposedInit
``` ```
**变更记录** **变更记录**
`v1.0` `添加` `v1.0` `添加`
`v1.0.80` `修改` `作废`
作废了 ~~`YukiHookXposedInitProxy`~~ 名称但保留接口
转移到 `IYukiHookXposedInit` 新名称
**功能描述** **功能描述**
> YukiHookAPI 的 Xposed 装载 API 调用接口。 > YukiHookAPI 的 Xposed 装载 API 调用接口。

View File

@@ -199,7 +199,7 @@ fun configs(initiate: Configs.() -> Unit)
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntryClass : YukiHookXposedInitProxy { class HookEntryClass : IYukiHookXposedInit {
override fun onInit() { override fun onInit() {
YukiHookAPI.configs { YukiHookAPI.configs {
@@ -222,7 +222,7 @@ class HookEntryClass : YukiHookXposedInitProxy {
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntryClass : YukiHookXposedInitProxy { class HookEntryClass : IYukiHookXposedInit {
override fun onInit() = configs { override fun onInit() = configs {
debugTag = "YukiHookAPI" debugTag = "YukiHookAPI"
@@ -243,7 +243,7 @@ class HookEntryClass : YukiHookXposedInitProxy {
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntryClass : YukiHookXposedInitProxy { class HookEntryClass : IYukiHookXposedInit {
override fun onInit() { override fun onInit() {
YukiHookAPI.Configs.debugTag = "YukiHookAPI" YukiHookAPI.Configs.debugTag = "YukiHookAPI"

View File

@@ -11,7 +11,7 @@
### configs [method] ### configs [method]
```kotlin ```kotlin
fun YukiHookXposedInitProxy.configs(initiate: YukiHookAPI.Configs.() -> Unit) fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit)
``` ```
**变更记录** **变更记录**
@@ -20,16 +20,16 @@ fun YukiHookXposedInitProxy.configs(initiate: YukiHookAPI.Configs.() -> Unit)
**功能描述** **功能描述**
> 在 `YukiHookXposedInitProxy` 中配置 `Configs`。 > 在 `IYukiHookXposedInit` 中配置 `Configs`。
### encase [method] ### encase [method]
```kotlin ```kotlin
fun YukiHookXposedInitProxy.encase(initiate: PackageParam.() -> Unit) fun IYukiHookXposedInit.encase(initiate: PackageParam.() -> Unit)
``` ```
```kotlin ```kotlin
fun YukiHookXposedInitProxy.encase(vararg hooker: YukiBaseHooker) fun IYukiHookXposedInit.encase(vararg hooker: YukiBaseHooker)
``` ```
**变更记录** **变更记录**
@@ -38,7 +38,7 @@ fun YukiHookXposedInitProxy.encase(vararg hooker: YukiBaseHooker)
**功能描述** **功能描述**
> 在 `YukiHookXposedInitProxy` 中装载 `YukiHookAPI`。 > 在 `IYukiHookXposedInit` 中装载 `YukiHookAPI`。
### modulePrefs [field] ### modulePrefs [field]

View File

@@ -120,7 +120,7 @@ class CustomHooker : YukiBaseHooker() {
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntryClass : YukiHookXposedInitProxy { class HookEntryClass : IYukiHookXposedInit {
override fun onHook() = encase { override fun onHook() = encase {
loadApp(name = "com.example.demo", ChildCustomHooker()) loadApp(name = "com.example.demo", ChildCustomHooker())
@@ -159,7 +159,7 @@ class FirstHooker : YukiBaseHooker() {
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntryClass : YukiHookXposedInitProxy { class HookEntryClass : IYukiHookXposedInit {
override fun onHook() = override fun onHook() =
YukiHookAPI.encase(FirstHooker(), SecondHooker(), ThirdHooker() ...) YukiHookAPI.encase(FirstHooker(), SecondHooker(), ThirdHooker() ...)
@@ -171,7 +171,7 @@ class HookEntryClass : YukiHookXposedInitProxy {
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntryClass : YukiHookXposedInitProxy { class HookEntryClass : IYukiHookXposedInit {
override fun onHook() = encase(FirstHooker(), SecondHooker(), ThirdHooker() ...) override fun onHook() = encase(FirstHooker(), SecondHooker(), ThirdHooker() ...)
} }

View File

@@ -20,12 +20,12 @@
**异常原因** **异常原因**
你尝试在继承 `YukiHookXposedInitProxy` 的 Hook 入口类的 `onInit` 方法中装载了 `encase` 方法。 你尝试在继承 `IYukiHookXposedInit` 的 Hook 入口类的 `onInit` 方法中装载了 `encase` 方法。
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntry : YukiHookXposedInitProxy { class HookEntry : IYukiHookXposedInit {
override fun onInit() { override fun onInit() {
// ❗错误的使用方法 // ❗错误的使用方法
@@ -47,7 +47,7 @@ class HookEntry : YukiHookXposedInitProxy {
> 示例如下 > 示例如下
```kotlin ```kotlin
class HookEntry : YukiHookXposedInitProxy { class HookEntry : IYukiHookXposedInit {
override fun onInit() { override fun onInit() {
// 这里只能装载 configs 方法 // 这里只能装载 configs 方法

View File

@@ -20,7 +20,7 @@ annotation class InjectYukiHookWithXposed(val sourcePath: String, val modulePack
`@InjectYukiHookWithXposed` 注解是一个标记模块 Hook 入口的重要注解。 `@InjectYukiHookWithXposed` 注解是一个标记模块 Hook 入口的重要注解。
!> `@InjectYukiHookWithXposed` 注解的 `Class` 必须实现 `YukiHookXposedInitProxy` 接口。 !> `@InjectYukiHookWithXposed` 注解的 `Class` 必须实现 `IYukiHookXposedInit` 接口。
!> 在你当前项目中的所有 `Class` 标记中**只能存在一次**,若**存在多个声明自动处理程序<u>会在编译时抛出异常</u>**,你可以自定义其相关参数。 !> 在你当前项目中的所有 `Class` 标记中**只能存在一次**,若**存在多个声明自动处理程序<u>会在编译时抛出异常</u>**,你可以自定义其相关参数。
@@ -74,10 +74,10 @@ annotation class InjectYukiHookWithXposed(val sourcePath: String, val modulePack
You set the customize module package name to "com.example.demo", please check for yourself if it is correct You set the customize module package name to "com.example.demo", please check for yourself if it is correct
``` ```
### YukiHookXposedInitProxy 接口 ### IYukiHookXposedInit 接口
```kotlin ```kotlin
interface YukiHookXposedInitProxy { interface IYukiHookXposedInit {
fun onInit() fun onInit()
@@ -85,12 +85,12 @@ interface YukiHookXposedInitProxy {
} }
``` ```
`YukiHookXposedInitProxy` 接口为你的 `HookEntryClass` 必须实现的接口,这是你的模块开始 Hook 的起点。 `IYukiHookXposedInit` 接口为你的 `HookEntryClass` 必须实现的接口,这是你的模块开始 Hook 的起点。
若要了解更多可 [点击这里](api/document?id=yukihookxposedinitproxy-interface) 进行查看。 若要了解更多可 [点击这里](api/document?id=iyukihookxposedinit-interface) 进行查看。
当你的模块被 Xposed 装载后,`onHook` 方法将会被回调,你需要在此方法中开始使用 `YukiHookAPI` 当你的模块被 Xposed 装载后,`onHook` 方法将会被回调,你需要在此方法中开始使用 `YukiHookAPI`
> 基本的调用流程为 `_YukiHookXposedInit.handleLoadPackage` → `HookEntryClass.onInit` → `HookEntryClass.onHook` → `YukiHookAPI.onXposedLoaded` > 基本的调用流程为 `YukiHookInjectXposedInitClass.handleLoadPackage` → `HookEntryClass.onInit` → `HookEntryClass.onHook` → `YukiHookAPI.onXposedLoaded`
详情请参考 [API 基本配置](config/api-example)。 详情请参考 [API 基本配置](config/api-example)。

View File

@@ -70,7 +70,7 @@
```kotlin ```kotlin
@InjectYukiHookWithXposed @InjectYukiHookWithXposed
class MainHook : YukiHookXposedInitProxy { class MainHook : IYukiHookXposedInit {
override fun onHook() = encase { override fun onHook() = encase {
loadApp(name = "com.android.browser") { loadApp(name = "com.android.browser") {

View File

@@ -93,7 +93,7 @@ dependencies {
android:value="true"/> android:value="true"/>
``` ```
在你的项目中创建一个 Hook 入口类,继承于 `YukiHookXposedInitProxy` 并加入注解 `@InjectYukiHookWithXposed` 在你的项目中创建一个 Hook 入口类,继承于 `IYukiHookXposedInit` 并加入注解 `@InjectYukiHookWithXposed`
!> 在默认配置情况下,你的入口类需要建立在你的包名的 hook 子包名下,假设你的包名为 `com.example.demo`,入口类应为 `com.example.demo.hook.你的入口类名称` !> 在默认配置情况下,你的入口类需要建立在你的包名的 hook 子包名下,假设你的包名为 `com.example.demo`,入口类应为 `com.example.demo.hook.你的入口类名称`
@@ -101,7 +101,7 @@ dependencies {
```kotlin ```kotlin
@InjectYukiHookWithXposed @InjectYukiHookWithXposed
class MainHook : YukiHookXposedInitProxy { class MainHook : IYukiHookXposedInit {
override fun onHook() = YukiHookAPI.encase { override fun onHook() = YukiHookAPI.encase {
// Your code here. // Your code here.

View File

@@ -107,7 +107,7 @@ class YukiHookXposedProcessor : SymbolProcessorProvider {
* @param resolver [Resolver] * @param resolver [Resolver]
*/ */
private fun injectProcess(resolver: Resolver) = environment { private fun injectProcess(resolver: Resolver) = environment {
var injectOnce = true var isInjectOnce = true
resolver.getSymbolsWithAnnotation(annotationName).apply { resolver.getSymbolsWithAnnotation(annotationName).apply {
/** /**
* 检索需要注入的类 * 检索需要注入的类
@@ -116,8 +116,8 @@ class YukiHookXposedProcessor : SymbolProcessorProvider {
*/ */
fun fetchKSClassDeclaration(sourcePath: String, modulePackageName: String) { fun fetchKSClassDeclaration(sourcePath: String, modulePackageName: String) {
asSequence().filterIsInstance<KSClassDeclaration>().forEach { asSequence().filterIsInstance<KSClassDeclaration>().forEach {
if (injectOnce) if (isInjectOnce) when {
if (it.superTypes.any { type -> type.element.toString() == "YukiHookXposedInitProxy" }) { it.superTypes.any { type -> type.element.toString() == "IYukiHookXposedInit" } -> {
injectAssets( injectAssets(
codePath = (it.location as? FileLocation?)?.filePath ?: "", codePath = (it.location as? FileLocation?)?.filePath ?: "",
sourcePath = sourcePath, sourcePath = sourcePath,
@@ -125,10 +125,14 @@ class YukiHookXposedProcessor : SymbolProcessorProvider {
className = it.simpleName.asString(), className = it.simpleName.asString(),
) )
injectClass(it.packageName.asString(), it.simpleName.asString(), modulePackageName) injectClass(it.packageName.asString(), it.simpleName.asString(), modulePackageName)
} else error(msg = "HookEntryClass \"${it.simpleName.asString()}\" must be implements YukiHookXposedInitProxy") }
it.superTypes.any { type -> type.element.toString() == "YukiHookXposedInitProxy" } ->
error(msg = "\"YukiHookXposedInitProxy\" was deprecated, please replace to \"IYukiHookXposedInit\"")
else -> error(msg = "HookEntryClass \"${it.simpleName.asString()}\" must be implements \"IYukiHookXposedInit\"")
}
else error(msg = "\"@InjectYukiHookWithXposed\" only can be use in once times") else error(msg = "\"@InjectYukiHookWithXposed\" only can be use in once times")
/** 仅处理第一个标记的类 - 再次处理将拦截并报错 */ /** 仅处理第一个标记的类 - 再次处理将拦截并报错 */
injectOnce = false isInjectOnce = false
} }
} }
forEach { forEach {

View File

@@ -28,7 +28,7 @@
package com.highcapable.yukihookapi.annotation.xposed package com.highcapable.yukihookapi.annotation.xposed
import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
/** /**
* 标识 [YukiHookAPI] 注入 Xposed 入口的类注解 * 标识 [YukiHookAPI] 注入 Xposed 入口的类注解
@@ -53,7 +53,7 @@ import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
* *
* - ❗最后这一点很重要:请不要随意修改项目 ../[sourcePath]/assets/xposed_init 中的内容 - 否则可能会导致模块无法装载 * - ❗最后这一点很重要:请不要随意修改项目 ../[sourcePath]/assets/xposed_init 中的内容 - 否则可能会导致模块无法装载
* *
* - ❗你必须将被注解的类继承于 [YukiHookXposedInitProxy] 接口实现 [YukiHookXposedInitProxy.onHook] 方法 - 否则编译会报错 * - ❗你必须将被注解的类继承于 [IYukiHookXposedInit] 接口实现 [IYukiHookXposedInit.onHook] 方法 - 否则编译会报错
* *
* - ❗只能拥有一个 Hook 入口 - 若存在多个注解编译会报错 * - ❗只能拥有一个 Hook 入口 - 若存在多个注解编译会报错
* *

View File

@@ -30,7 +30,7 @@ package com.highcapable.yukihookapi.hook.entity
import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
import com.highcapable.yukihookapi.hook.param.PackageParam import com.highcapable.yukihookapi.hook.param.PackageParam
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
/** /**
* [YukiHookAPI] 的子类 Hooker 实现 * [YukiHookAPI] 的子类 Hooker 实现
@@ -39,7 +39,7 @@ import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
* *
* 你可以继续继承此类进行自定义 Hooker 相关参数 * 你可以继续继承此类进行自定义 Hooker 相关参数
* *
* 你可以在 [YukiHookXposedInitProxy] 的 [YukiHookXposedInitProxy.onHook] 中实现如下用法: * 你可以在 [IYukiHookXposedInit] 的 [IYukiHookXposedInit.onHook] 中实现如下用法:
* *
* 1.调用 [YukiHookAPI.encase] encase(MainHooker(), SecondHooker(), ThirdHooker() ...) * 1.调用 [YukiHookAPI.encase] encase(MainHooker(), SecondHooker(), ThirdHooker() ...)
* *

View File

@@ -25,7 +25,7 @@
* *
* This file is Created by fankes on 2022/2/2. * This file is Created by fankes on 2022/2/2.
*/ */
@file:Suppress("unused") @file:Suppress("unused", "DEPRECATION", "DeprecatedCallableAddReplaceWith")
package com.highcapable.yukihookapi.hook.factory package com.highcapable.yukihookapi.hook.factory
@@ -39,28 +39,38 @@ import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.param.PackageParam import com.highcapable.yukihookapi.hook.param.PackageParam
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
import java.io.BufferedReader import java.io.BufferedReader
import java.io.File import java.io.File
import java.io.FileReader import java.io.FileReader
/** /**
* 在 [YukiHookXposedInitProxy] 中装载 [YukiHookAPI.Configs] * 在 [IYukiHookXposedInit] 中装载 [YukiHookAPI.Configs]
* @param initiate Hook 方法体 * @param initiate Hook 方法体
*/ */
fun YukiHookXposedInitProxy.configs(initiate: YukiHookAPI.Configs.() -> Unit) = YukiHookAPI.configs(initiate) fun IYukiHookXposedInit.configs(initiate: YukiHookAPI.Configs.() -> Unit) = YukiHookAPI.configs(initiate)
/** /**
* 在 [YukiHookXposedInitProxy] 中装载 [YukiHookAPI] * 在 [IYukiHookXposedInit] 中装载 [YukiHookAPI]
* @param initiate Hook 方法体 * @param initiate Hook 方法体
*/ */
fun YukiHookXposedInitProxy.encase(initiate: PackageParam.() -> Unit) = YukiHookAPI.encase(initiate) fun IYukiHookXposedInit.encase(initiate: PackageParam.() -> Unit) = YukiHookAPI.encase(initiate)
/** /**
* 在 [YukiHookXposedInitProxy] 中装载 [YukiHookAPI] * 在 [IYukiHookXposedInit] 中装载 [YukiHookAPI]
* @param hooker Hook 子类数组 - 必填不能为空 * @param hooker Hook 子类数组 - 必填不能为空
* @throws IllegalStateException 如果 [hooker] 是空的 * @throws IllegalStateException 如果 [hooker] 是空的
*/ */
fun IYukiHookXposedInit.encase(vararg hooker: YukiBaseHooker) = YukiHookAPI.encase(hooker = hooker)
@Deprecated("请将接口转移到 IYukiHookXposedInit")
fun YukiHookXposedInitProxy.configs(initiate: YukiHookAPI.Configs.() -> Unit) = YukiHookAPI.configs(initiate)
@Deprecated("请将接口转移到 IYukiHookXposedInit")
fun YukiHookXposedInitProxy.encase(initiate: PackageParam.() -> Unit) = YukiHookAPI.encase(initiate)
@Deprecated("请将接口转移到 IYukiHookXposedInit")
fun YukiHookXposedInitProxy.encase(vararg hooker: YukiBaseHooker) = YukiHookAPI.encase(hooker = hooker) fun YukiHookXposedInitProxy.encase(vararg hooker: YukiBaseHooker) = YukiHookAPI.encase(hooker = hooker)
/** /**

View File

@@ -32,7 +32,7 @@ import android.content.Context
import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication.Companion.appContext import com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication.Companion.appContext
import com.highcapable.yukihookapi.hook.xposed.application.inject.ModuleApplication_Injector import com.highcapable.yukihookapi.hook.xposed.application.inject.ModuleApplication_Injector
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.xposed.proxy.IYukiHookXposedInit
import me.weishu.reflection.Reflection import me.weishu.reflection.Reflection
/** /**
@@ -78,6 +78,6 @@ open class ModuleApplication : Application() {
callApiInit() callApiInit()
} }
/** 调用入口类的 [YukiHookXposedInitProxy.onInit] 方法 */ /** 调用入口类的 [IYukiHookXposedInit.onInit] 方法 */
private fun callApiInit() = runCatching { ModuleApplication_Injector.callApiInit() } private fun callApiInit() = runCatching { ModuleApplication_Injector.callApiInit() }
} }

View File

@@ -0,0 +1,72 @@
/*
* YukiHookAPI - An efficient Kotlin version of the Xposed Hook API.
* Copyright (C) 2019-2022 HighCapable
* https://github.com/fankes/YukiHookAPI
*
* MIT License
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* This file is Created by fankes on 2022/2/2.
* This file is Modified by fankes on 2022/4/22.
*/
@file:Suppress("unused")
package com.highcapable.yukihookapi.hook.xposed.proxy
import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed
import com.highcapable.yukihookapi.hook.factory.configs
import com.highcapable.yukihookapi.hook.factory.encase
/**
* [YukiHookAPI] 的 Xposed 装载 API 调用接口
*
* - ❗请在此类上添加注解 [InjectYukiHookWithXposed] 标记模块 Hook 入口
*
* [YukiHookAPI] 初始化时将自动调用 [onInit] 方法
*
* Hook 开始时将自动调用 [onHook] 方法
*
* 请在 [onInit] 中调用 [YukiHookAPI.configs] 或直接调用 [configs]
*
* 请在 [onHook] 中调用 [YukiHookAPI.encase] 或直接调用 [encase]
*
* 详情请参考 [IYukiHookXposedInit 接口](https://fankes.github.io/YukiHookAPI/#/config/xposed-using?id=iyukihookxposedinit-%e6%8e%a5%e5%8f%a3)
*/
interface IYukiHookXposedInit {
/**
* 配置 [YukiHookAPI.Configs] 的初始化方法
*
* - ❗在这里只能进行初始化配置 - 不能进行 Hook 操作
*
* 此方法可选 - 你也可以选择不对 [YukiHookAPI.Configs] 进行配置
*/
fun onInit() {}
/**
* 模块装载调用入口方法
*
* Xposed API
*
* 调用 [YukiHookAPI.encase] 或直接调用 [encase] 开始 Hook
*/
fun onHook()
}

View File

@@ -25,47 +25,36 @@
* *
* This file is Created by fankes on 2022/2/2. * This file is Created by fankes on 2022/2/2.
*/ */
@file:Suppress("unused") @file:Suppress("unused", "DeprecatedCallableAddReplaceWith")
package com.highcapable.yukihookapi.hook.xposed.proxy package com.highcapable.yukihookapi.hook.xposed.proxy
import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.annotation.xposed.InjectYukiHookWithXposed import com.highcapable.yukihookapi.hook.log.yLoggerW
import com.highcapable.yukihookapi.hook.factory.configs
import com.highcapable.yukihookapi.hook.factory.encase
/** /**
* [YukiHookAPI] 的 Xposed 装载 API 调用接口 * [YukiHookAPI] 的 Xposed 装载 API 调用接口
* *
* - ❗请在此类上添加注解 [InjectYukiHookWithXposed] 标记模块 Hook 入口 * - ❗此接口名称已弃用 - 在不久的版本中将直接被删除
* *
* [YukiHookAPI] 初始化时将自动调用 [onInit] 方法 * - ❗请现在转移到 [IYukiHookXposedInit] 否则此接口的声明将在自动处理程序中被拦截
*
* Hook 开始时将自动调用 [onHook] 方法
*
* 请在 [onInit] 中调用 [YukiHookAPI.configs] 或直接调用 [configs]
*
* 请在 [onHook] 中调用 [YukiHookAPI.encase] 或直接调用 [encase]
*
* 详情请参考 [YukiHookXposedInitProxy 接口](https://fankes.github.io/YukiHookAPI/#/config/xposed-using?id=yukihookxposedinitproxy-%e6%8e%a5%e5%8f%a3)
*/ */
@Deprecated(message = "此接口的命名已被弃用", ReplaceWith(expression = "IYukiHookXposedInit"))
interface YukiHookXposedInitProxy { interface YukiHookXposedInitProxy {
/** /**
* 配置 [YukiHookAPI.Configs] 的初始化方法 * 配置 [YukiHookAPI.Configs] 的初始化方法
* *
* - ❗在这里只能进行初始化配置 - 不能进行 Hook 操作 * - ❗请将接口转移到 [IYukiHookXposedInit]
*
* 此方法可选 - 你也可以选择不对 [YukiHookAPI.Configs] 进行配置
*/ */
fun onInit() {} @Deprecated(message = "请将接口转移到 IYukiHookXposedInit")
fun onInit() = yLoggerW(msg = "YukiHookXposedInitProxy was deprecated")
/** /**
* 模块装载调用入口方法 * 模块装载调用入口方法
* *
* Xposed API * - ❗请将接口转移到 [IYukiHookXposedInit]
*
* 调用 [YukiHookAPI.encase] 或直接调用 [encase] 开始 Hook
*/ */
@Deprecated(message = "请将接口转移到 IYukiHookXposedInit")
fun onHook() fun onHook()
} }