Added "isExcludeSelf" param function of loadApp in PackageParam

This commit is contained in:
2022-11-29 00:11:06 +08:00
parent 8deed6a12e
commit 53e8240293
3 changed files with 116 additions and 12 deletions

View File

@@ -364,6 +364,18 @@ inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit)
fun loadApp(name: String, vararg hooker: YukiBaseHooker) 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** **Change Records**
`v1.0` `first` `v1.0` `first`
@@ -376,9 +388,13 @@ fun loadApp(name: String, vararg hooker: YukiBaseHooker)
新增两个方法,可以同时装载多个 APP 与子 Hooker 新增两个方法,可以同时装载多个 APP 与子 Hooker
`v1.1.5` `modified`
新增三个方法,可以使用参数 `isExcludeSelf` 排除模块自身
**Function Illustrate** **Function Illustrate**
> 装载并 Hook 指定包名的 APP。 > 装载并 Hook 指定、全部包名的 APP。
`name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。 `name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
@@ -416,6 +432,19 @@ loadApp {
loadApp(hooker = CustomHooker) loadApp(hooker = CustomHooker)
``` ```
若要在全部可被 Hook 的 APP 中过滤掉模块自身,你只需加入 `isExcludeSelf = true`。
> 示例如下
```kotlin
// 使用 lambda
loadApp(isExcludeSelf = true) {
// Your code here.
}
// 使用 Hooker
loadApp(isExcludeSelf = true, hooker = CustomHooker)
```
若想要同时装载多个需要 Hook 的 APP可以直接使用如下方式。 若想要同时装载多个需要 Hook 的 APP可以直接使用如下方式。
> The following example > The following example

View File

@@ -356,6 +356,18 @@ inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit)
fun loadApp(name: String, vararg hooker: YukiBaseHooker) 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` `添加` `v1.0` `添加`
@@ -368,9 +380,13 @@ fun loadApp(name: String, vararg hooker: YukiBaseHooker)
新增两个方法,可以同时装载多个 APP 与子 Hooker 新增两个方法,可以同时装载多个 APP 与子 Hooker
`v1.1.5` `修改`
新增三个方法,可以使用参数 `isExcludeSelf` 排除模块自身
**功能描述** **功能描述**
> 装载并 Hook 指定包名的 APP。 > 装载并 Hook 指定、全部包名的 APP。
`name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。 `name` 为 APP 的包名,后方的两个参数一个可作为 `lambda` 方法体使用,一个可以直接装载子 Hooker。
@@ -408,6 +424,19 @@ loadApp {
loadApp(hooker = CustomHooker) loadApp(hooker = CustomHooker)
``` ```
若要在全部可被 Hook 的 APP 中过滤掉模块自身,你只需加入 `isExcludeSelf = true`。
> 示例如下
```kotlin
// 使用 lambda
loadApp(isExcludeSelf = true) {
// Your code here.
}
// 使用 Hooker
loadApp(isExcludeSelf = true, hooker = CustomHooker)
```
若想要同时装载多个需要 Hook 的 APP可以直接使用如下方式。 若想要同时装载多个需要 Hook 的 APP可以直接使用如下方式。
> 示例如下 > 示例如下

View File

@@ -215,25 +215,25 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper:
inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit) = AppLifecycle().apply(initiate).build() inline fun onAppLifecycle(initiate: AppLifecycle.() -> Unit) = AppLifecycle().apply(initiate).build()
/** /**
* 装载并 Hook 指定、全部包名的 APP * 装载并 Hook 指定包名的 APP
* *
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
* *
* 若要 Hook 系统框架 - 请使用 [loadSystem] * 若要 Hook 系统框架 - 请使用 [loadSystem]
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP * @param name 包名
* @param initiate 方法体 * @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) if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) initiate(this)
} }
/** /**
* 装载并 Hook 指定、全部包名的 APP * 装载并 Hook 指定包名的 APP
* *
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
* *
* 若要 Hook 系统框架 - 请使用 [loadSystem] * 若要 Hook 系统框架 - 请使用 [loadSystem]
* @param name 包名数组 - 不填将过滤除了 [loadZygote] 事件外的全部 APP * @param name 包名数组
* @param initiate 方法体 * @param initiate 方法体
*/ */
inline fun loadApp(vararg name: String, initiate: PackageParam.() -> Unit) { 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] * 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
* *
* 若要 Hook 系统框架 - 请使用 [loadSystem] * 若要 Hook 系统框架 - 请使用 [loadSystem]
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP * @param name 包名
* @param hooker Hook 子类 * @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) if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) loadHooker(hooker)
} }
/** /**
* 装载并 Hook 指定、全部包名的 APP * 装载并 Hook 指定包名的 APP
* *
* 若要装载 APP Zygote 事件 - 请使用 [loadZygote] * 若要装载 APP Zygote 事件 - 请使用 [loadZygote]
* *
@@ -263,11 +263,57 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper:
* @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP * @param name 包名 - 不填将过滤除了 [loadZygote] 事件外的全部 APP
* @param hooker Hook 子类数组 * @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 (hooker.isEmpty()) error("loadApp method need a \"hooker\" param")
if (wrapper?.type != HookEntryType.ZYGOTE && (packageName == name || name.isBlank())) hooker.forEach { loadHooker(it) } 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 系统框架 * 装载并 Hook 系统框架
* @param initiate 方法体 * @param initiate 方法体