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 子类
*