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 e82748e0..cdbf63df 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 @@ -364,6 +364,18 @@ inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) fun loadApp(name: String, vararg hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +inline fun loadApp(isExcludeSelf: Boolean, initiate: PackageParam.() -> Unit) +``` + +```kotlin:no-line-numbers +fun loadApp(isExcludeSelf: Boolean, hooker: YukiBaseHooker) +``` + +```kotlin:no-line-numbers +fun loadApp(isExcludeSelf: Boolean, vararg hooker: YukiBaseHooker) +``` + **Change Records** `v1.0` `first` @@ -376,9 +388,13 @@ fun loadApp(name: String, vararg hooker: YukiBaseHooker) 新增两个方法,可以同时装载多个 APP 与子 Hooker +`v1.1.5` `modified` + +新增三个方法,可以使用参数 `isExcludeSelf` 排除模块自身 + **Function Illustrate** -> 装载并 Hook 指定包名的 APP。 +> 装载并 Hook 指定、全部包名的 APP。 `name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。 @@ -416,6 +432,19 @@ loadApp { loadApp(hooker = CustomHooker) ``` +若要在全部可被 Hook 的 APP 中过滤掉模块自身,你只需加入 `isExcludeSelf = true`。 + +> 示例如下 + +```kotlin +// 使用 lambda +loadApp(isExcludeSelf = true) { + // Your code here. +} +// 使用 Hooker +loadApp(isExcludeSelf = true, hooker = CustomHooker) +``` + 若想要同时装载多个需要 Hook 的 APP,可以直接使用如下方式。 > The following example 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 1492230e..a96529a0 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 @@ -356,6 +356,18 @@ inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) fun loadApp(name: String, vararg hooker: YukiBaseHooker) ``` +```kotlin:no-line-numbers +inline fun loadApp(isExcludeSelf: Boolean, initiate: PackageParam.() -> Unit) +``` + +```kotlin:no-line-numbers +fun loadApp(isExcludeSelf: Boolean, hooker: YukiBaseHooker) +``` + +```kotlin:no-line-numbers +fun loadApp(isExcludeSelf: Boolean, vararg hooker: YukiBaseHooker) +``` + **变更记录** `v1.0` `添加` @@ -368,9 +380,13 @@ fun loadApp(name: String, vararg hooker: YukiBaseHooker) 新增两个方法,可以同时装载多个 APP 与子 Hooker +`v1.1.5` `修改` + +新增三个方法,可以使用参数 `isExcludeSelf` 排除模块自身 + **功能描述** -> 装载并 Hook 指定包名的 APP。 +> 装载并 Hook 指定、全部包名的 APP。 `name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。 @@ -408,6 +424,19 @@ loadApp { loadApp(hooker = CustomHooker) ``` +若要在全部可被 Hook 的 APP 中过滤掉模块自身,你只需加入 `isExcludeSelf = true`。 + +> 示例如下 + +```kotlin +// 使用 lambda +loadApp(isExcludeSelf = true) { + // Your code here. +} +// 使用 Hooker +loadApp(isExcludeSelf = true, hooker = CustomHooker) +``` + 若想要同时装载多个需要 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 c66bb642..3422ffc1 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 @@ -215,25 +215,25 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit) = AppLifecycle().apply(initiate).build() /** - * 装载并 Hook 指定、全部包名的 APP + * 装载并 Hook 指定包名的 APP * * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * * 若要 Hook 系统框架 - 请使用 [loadSystem] - * @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP + * @param name 包名 * @param initiate 方法体 */ - inline fun loadApp(name: String = "", initiate: PackageParam.() -> Unit) { + inline fun loadApp(name: String, initiate: PackageParam.() -> Unit) { if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) initiate(this) } /** - * 装载并 Hook 指定、全部包名的 APP + * 装载并 Hook 指定包名的 APP * * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * * 若要 Hook 系统框架 - 请使用 [loadSystem] - * @param name 包名数组 - 不填将过滤除了 [loadZygote] 事件外的全部 APP + * @param name 包名数组 * @param initiate 方法体 */ inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) { @@ -242,20 +242,20 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: } /** - * 装载并 Hook 指定、全部包名的 APP + * 装载并 Hook 指定包名的 APP * * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * * 若要 Hook 系统框架 - 请使用 [loadSystem] - * @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP + * @param name 包名 * @param hooker Hook 子类 */ - fun loadApp(name: String = "", hooker: YukiBaseHooker) { + fun loadApp(name: String, hooker: YukiBaseHooker) { if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) loadHooker(hooker) } /** - * 装载并 Hook 指定、全部包名的 APP + * 装载并 Hook 指定包名的 APP * * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * @@ -263,11 +263,57 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: * @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP * @param hooker Hook 子类数组 */ - fun loadApp(name: String = "", vararg hooker: YukiBaseHooker) { + 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 全部 APP + * + * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] + * + * 若要 Hook 系统框架 - 请使用 [loadSystem] + * @param isExcludeSelf 是否排除模块自身 - 默认否 - 启用后被 Hook 的 APP 将不包含当前模块自身 + * @param initiate 方法体 + */ + inline fun loadApp(isExcludeSelf: Boolean = false, initiate: PackageParam.() -> Unit) { + if (wrapper?.type != HookEntryType.ZYGOTE && + (isExcludeSelf.not() || isExcludeSelf && packageName != YukiHookBridge.modulePackageName) + ) initiate(this) + } + + /** + * 装载并 Hook 全部 APP + * + * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] + * + * 若要 Hook 系统框架 - 请使用 [loadSystem] + * @param isExcludeSelf 是否排除模块自身 - 默认否 - 启用后被 Hook 的 APP 将不包含当前模块自身 + * @param hooker Hook 子类 + */ + fun loadApp(isExcludeSelf: Boolean = false, hooker: YukiBaseHooker) { + if (wrapper?.type != HookEntryType.ZYGOTE && + (isExcludeSelf.not() || isExcludeSelf && packageName != YukiHookBridge.modulePackageName) + ) loadHooker(hooker) + } + + /** + * 装载并 Hook 全部 APP + * + * 若要装载 APP Zygote 事件 - 请使用 [loadZygote] + * + * 若要 Hook 系统框架 - 请使用 [loadSystem] + * @param isExcludeSelf 是否排除模块自身 - 默认否 - 启用后被 Hook 的 APP 将不包含当前模块自身 + * @param hooker Hook 子类数组 + */ + fun loadApp(isExcludeSelf: Boolean = false, vararg hooker: YukiBaseHooker) { + if (hooker.isEmpty()) error("loadApp method need a \"hooker\" param") + if (wrapper?.type != HookEntryType.ZYGOTE && + (isExcludeSelf.not() || isExcludeSelf && packageName != YukiHookBridge.modulePackageName) + ) hooker.forEach { loadHooker(it) } + } + /** * 装载并 Hook 系统框架 * @param initiate 方法体