diff --git a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md index 7da870d0..e82748e0 100644 --- a/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md +++ b/docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md @@ -356,6 +356,14 @@ inline fun loadApp(name: String, initiate: PackageParam.() -> Unit) fun loadApp(name: String, hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) +``` + +```kotlin:no-line-numbers +fun loadApp(name: String, vararg hooker: YukiBaseHooker) +``` + **Change Records** `v1.0` `first` @@ -364,6 +372,10 @@ fun loadApp(name: String, hooker: YukiBaseHooker) 将方法体进行 inline +`v1.1.4` `modified` + +新增两个方法,可以同时装载多个 APP 与子 Hooker + **Function Illustrate** > 装载并 Hook 指定包名的 APP。 @@ -404,6 +416,26 @@ loadApp { loadApp(hooker = CustomHooker) ``` +若想要同时装载多个需要 Hook 的 APP,可以直接使用如下方式。 + +> The following example + +```kotlin +// 同时装载多个需要 Hook 的 APP +loadApp("com.example.test", "com.example.next") { + // Your code here. +} +``` + +若想要同时装载多个子 Hooker,可以直接使用如下方式,但此时只能指定一个需要 Hook 的 APP。 + +> The following example + +```kotlin +// 同时装载多个子 Hooker +loadApp("com.example.test", CustomHooker1, CustomHooker2) +``` + ## loadZygote - method ```kotlin:no-line-numbers @@ -414,10 +446,18 @@ inline fun loadZygote(initiate: PackageParam.() -> Unit) fun loadZygote(hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +fun loadZygote(vararg hooker: YukiBaseHooker) +``` + **Change Records** `v1.0.80` `added` +`v1.1.4` `modified` + +新增一个方法,可以同时装载多个子 Hooker + **Function Illustrate** > 装载 APP Zygote 事件。 @@ -434,10 +474,18 @@ inline fun loadSystem(initiate: PackageParam.() -> Unit) fun loadSystem(hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +fun loadSystem(vararg hooker: YukiBaseHooker) +``` + **Change Records** `v1.0.82` `added` +`v1.1.4` `modified` + +新增一个方法,可以同时装载多个子 Hooker + **Function Illustrate** > 装载并 Hook 系统框架。 @@ -454,10 +502,22 @@ inline fun withProcess(name: String, initiate: PackageParam.() -> Unit) fun withProcess(name: String, hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +fun withProcess(vararg name: String, hooker: YukiBaseHooker) +``` + +```kotlin:no-line-numbers +fun withProcess(name: String, vararg hooker: YukiBaseHooker) +``` + **Change Records** `v1.0.70` `added` +`v1.1.4` `modified` + +新增两个方法,可以同时装载多个进程与子 Hooker + **Function Illustrate** > 装载并 Hook APP 的指定进程。 diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md index 8249b17b..1492230e 100644 --- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md +++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md @@ -348,6 +348,14 @@ inline fun loadApp(name: String, initiate: PackageParam.() -> Unit) fun loadApp(name: String, hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) +``` + +```kotlin:no-line-numbers +fun loadApp(name: String, vararg hooker: YukiBaseHooker) +``` + **变更记录** `v1.0` `添加` @@ -356,6 +364,10 @@ fun loadApp(name: String, hooker: YukiBaseHooker) 将方法体进行 inline +`v1.1.4` `修改` + +新增两个方法,可以同时装载多个 APP 与子 Hooker + **功能描述** > 装载并 Hook 指定包名的 APP。 @@ -396,6 +408,26 @@ loadApp { loadApp(hooker = CustomHooker) ``` +若想要同时装载多个需要 Hook 的 APP,可以直接使用如下方式。 + +> 示例如下 + +```kotlin +// 同时装载多个需要 Hook 的 APP +loadApp("com.example.test", "com.example.next") { + // Your code here. +} +``` + +若想要同时装载多个子 Hooker,可以直接使用如下方式,但此时只能指定一个需要 Hook 的 APP。 + +> 示例如下 + +```kotlin +// 同时装载多个子 Hooker +loadApp("com.example.test", CustomHooker1, CustomHooker2) +``` + ## loadZygote - method ```kotlin:no-line-numbers @@ -406,10 +438,18 @@ inline fun loadZygote(initiate: PackageParam.() -> Unit) fun loadZygote(hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +fun loadZygote(vararg hooker: YukiBaseHooker) +``` + **变更记录** `v1.0.80` `新增` +`v1.1.4` `修改` + +新增一个方法,可以同时装载多个子 Hooker + **功能描述** > 装载 APP Zygote 事件。 @@ -426,10 +466,18 @@ inline fun loadSystem(initiate: PackageParam.() -> Unit) fun loadSystem(hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +fun loadSystem(vararg hooker: YukiBaseHooker) +``` + **变更记录** `v1.0.82` `新增` +`v1.1.4` `修改` + +新增一个方法,可以同时装载多个子 Hooker + **功能描述** > 装载并 Hook 系统框架。 @@ -446,10 +494,22 @@ inline fun withProcess(name: String, initiate: PackageParam.() -> Unit) fun withProcess(name: String, hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +fun withProcess(vararg name: String, hooker: YukiBaseHooker) +``` + +```kotlin:no-line-numbers +fun withProcess(name: String, vararg hooker: YukiBaseHooker) +``` + **变更记录** `v1.0.70` `新增` +`v1.1.4` `修改` + +新增两个方法,可以同时装载多个进程与子 Hooker + **功能描述** > 装载并 Hook APP 的指定进程。 diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt index c53d9d8b..c66bb642 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt @@ -227,6 +227,20 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) initiate(this) } + /** + * 装载并 Hook 指定、全部包名的 APP + * + * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] + * + * 若要 Hook 系统框架 - 请使用 [loadSystem] + * @param name 包名数组 - 不填将过滤除了 [loadZygote] 事件外的全部 APP + * @param initiate 方法体 + */ + inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) { + if (name.isEmpty()) return loadApp(initiate = initiate) + if (wrapper?.type != HookEntryType.ZYGOTE && name.any { it == packageName }) initiate(this) + } + /** * 装载并 Hook 指定、全部包名的 APP * @@ -240,6 +254,20 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) loadHooker(hooker) } + /** + * 装载并 Hook 指定、全部包名的 APP + * + * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] + * + * 若要 Hook 系统框架 - 请使用 [loadSystem] + * @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP + * @param hooker Hook 子类数组 + */ + fun loadApp(name: String = "", vararg hooker: YukiBaseHooker) { + if (hooker.isEmpty()) error("loadApp method need a \"hooker\" param") + if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) hooker.forEach { loadHooker(it) } + } + /** * 装载并 Hook 系统框架 * @param initiate 方法体 @@ -252,6 +280,15 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: */ fun loadSystem(hooker: YukiBaseHooker) = loadApp(YukiHookBridge.SYSTEM_FRAMEWORK_NAME, hooker) + /** + * 装载并 Hook 系统框架 + * @param hooker Hook 子类数组 + */ + fun loadSystem(vararg hooker: YukiBaseHooker) { + if (hooker.isEmpty()) error("loadSystem method need a \"hooker\" param") + loadApp(YukiHookBridge.SYSTEM_FRAMEWORK_NAME, *hooker) + } + /** * 装载 APP Zygote 事件 * @param initiate 方法体 @@ -268,6 +305,15 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: if (wrapper?.type == HookEntryType.ZYGOTE) loadHooker(hooker) } + /** + * 装载 APP Zygote 事件 + * @param hooker Hook 子类数组 + */ + fun loadZygote(vararg hooker: YukiBaseHooker) { + if (hooker.isEmpty()) error("loadZygote method need a \"hooker\" param") + if (wrapper?.type == HookEntryType.ZYGOTE) hooker.forEach { loadHooker(it) } + } + /** * 装载并 Hook APP 的指定进程 * @param name 进程名 - 若要指定主进程可填写 [mainProcessName] - 效果与 [isFirstApplication] 一致 @@ -277,6 +323,16 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: if (processName == name) initiate(this) } + /** + * 装载并 Hook APP 的指定进程 + * @param name 进程名数组 - 若要指定主进程可填写 [mainProcessName] - 效果与 [isFirstApplication] 一致 + * @param initiate 方法体 + */ + inline fun withProcess(vararg name: String, initiate: PackageParam.() -> Unit) { + if (name.isEmpty()) error("withProcess method need a \"name\" param") + if (name.any { it == processName }) initiate(this) + } + /** * 装载并 Hook APP 的指定进程 * @param name 进程名 - 若要指定主进程可填写 [mainProcessName] - 效果与 [isFirstApplication] 一致 @@ -286,6 +342,16 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: if (processName == name) loadHooker(hooker) } + /** + * 装载并 Hook APP 的指定进程 + * @param name 进程名 - 若要指定主进程可填写 [mainProcessName] - 效果与 [isFirstApplication] 一致 + * @param hooker Hook 子类数组 + */ + fun withProcess(name: String, vararg hooker: YukiBaseHooker) { + if (name.isEmpty()) error("withProcess method need a \"hooker\" param") + if (processName == name) hooker.forEach { loadHooker(it) } + } + /** * 装载 Hook 子类 *