mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 01:35:17 +08:00
refactor: move xposed module status function to auto generator
This commit is contained in:
@@ -148,7 +148,7 @@ object YukiHookAPI {
|
||||
*
|
||||
* - 在模块环境中你需要将 [Application] 继承于 [ModuleApplication]
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
*
|
||||
* - 在 (Xposed) 宿主环境中仅返回非 [isTaiChiModuleActive] 的激活状态
|
||||
* @return [Boolean] 是否激活
|
||||
@@ -158,7 +158,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 仅判断模块是否在 Xposed 中激活
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
*
|
||||
* - 在 (Xposed) 宿主环境中始终返回 true
|
||||
* @return [Boolean] 是否激活
|
||||
@@ -178,7 +178,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 判断当前 Hook Framework 是否支持资源钩子(Resources Hook)
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
*
|
||||
* - 在 (Xposed) 宿主环境中可能会延迟等待事件回调后才会返回 true
|
||||
*
|
||||
@@ -196,7 +196,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 获取当前 Hook Framework 名称
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
* @return [String] 无法获取会返回 unknown - 获取失败会返回 invalid
|
||||
*/
|
||||
val name
|
||||
@@ -209,7 +209,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 获取当前 Hook Framework 类型
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
* @return [ExecutorType]
|
||||
*/
|
||||
val type get() = HookApiProperty.type.takeIf { isXposedEnvironment } ?: HookApiProperty.type(YukiXposedModuleStatus.executorName)
|
||||
@@ -217,7 +217,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 获取当前 Hook Framework 的 API 版本
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
* @return [Int] 无法获取会返回 -1
|
||||
*/
|
||||
val apiLevel get() = HookApiProperty.apiLevel.takeIf { isXposedEnvironment } ?: YukiXposedModuleStatus.executorApiLevel
|
||||
@@ -225,7 +225,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 获取当前 Hook Framework 版本名称
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
* @return [String] 无法获取会返回 unknown - 不支持会返回 unsupported
|
||||
*/
|
||||
val versionName get() = HookApiProperty.versionName.takeIf { isXposedEnvironment } ?: YukiXposedModuleStatus.executorVersionName
|
||||
@@ -233,7 +233,7 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 获取当前 Hook Framework 版本号
|
||||
*
|
||||
* - 在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
* @return [Int] 无法获取会返回 -1 - 不支持会返回 0
|
||||
*/
|
||||
val versionCode get() = HookApiProperty.versionCode.takeIf { isXposedEnvironment } ?: YukiXposedModuleStatus.executorVersionCode
|
||||
@@ -322,10 +322,11 @@ object YukiHookAPI {
|
||||
/**
|
||||
* 是否启用 Hook Xposed 模块激活等状态功能
|
||||
*
|
||||
* - 为原生支持 Xposed 模块激活状态检测 - 此功能默认启用
|
||||
* - 此方法已弃用 - 在之后的版本中将直接被删除
|
||||
*
|
||||
* - 关闭后你将不能再在模块环境中使用 [YukiHookAPI.Status] 中的功能
|
||||
* - 请现在迁移到 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
|
||||
*/
|
||||
@Deprecated(message = "请手动迁移到新用法")
|
||||
var isEnableHookModuleStatus = true
|
||||
|
||||
/**
|
||||
|
@@ -56,6 +56,7 @@ import de.robv.android.xposed.IXposedHookInitPackageResources
|
||||
* @param sourcePath 你的项目 source 相对路径 - 默认为 ..src/main..
|
||||
* @param modulePackageName 模块包名 - 不填默认自动生成
|
||||
* @param entryClassName 定义 [YukiHookAPI] 自动生成 Xposed 模块入口类的名称 - 不填默认使用 "入口类名_YukiHookXposedInit" 进行生成
|
||||
* @param isUsingXposedModuleStatus 是否启用 Xposed 模块激活等状态功能 (自动 Hook 模块自身实现状态检测) - 默认是
|
||||
* @param isUsingResourcesHook 是否启用 Resources Hook (资源钩子) - 启用后将自动注入 [IXposedHookInitPackageResources] - 默认否
|
||||
*/
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@@ -63,5 +64,6 @@ annotation class InjectYukiHookWithXposed(
|
||||
val sourcePath: String = "src/main",
|
||||
val modulePackageName: String = "",
|
||||
val entryClassName: String = "",
|
||||
val isUsingXposedModuleStatus: Boolean = true,
|
||||
val isUsingResourcesHook: Boolean = false
|
||||
)
|
@@ -31,7 +31,7 @@ package com.highcapable.yukihookapi.hook.xposed.bridge.status
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.core.finder.members.MethodFinder
|
||||
import com.highcapable.yukihookapi.hook.factory.method
|
||||
import com.highcapable.yukihookapi.hook.factory.toClass
|
||||
import com.highcapable.yukihookapi.hook.factory.toClassOrNull
|
||||
import com.highcapable.yukihookapi.hook.log.YLog
|
||||
|
||||
/**
|
||||
@@ -70,7 +70,7 @@ internal object YukiXposedModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.isModuleActive]、[YukiHookAPI.Status.isXposedModuleActive]、[YukiHookAPI.Status.isTaiChiModuleActive] 判断模块激活状态
|
||||
* @return [Boolean]
|
||||
*/
|
||||
internal val isActive get() = classMethod(IS_ACTIVE_METHOD_NAME).boolean()
|
||||
internal val isActive get() = classMethod(IS_ACTIVE_METHOD_NAME)?.boolean() ?: false
|
||||
|
||||
/**
|
||||
* 获取当前 Hook Framework 是否支持资源钩子 (Resources Hook)
|
||||
@@ -78,7 +78,7 @@ internal object YukiXposedModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.isSupportResourcesHook] 判断支持状态
|
||||
* @return [Boolean]
|
||||
*/
|
||||
internal val isSupportResourcesHook get() = classMethod(IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME).boolean()
|
||||
internal val isSupportResourcesHook get() = classMethod(IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME)?.boolean() ?: false
|
||||
|
||||
/**
|
||||
* 获取当前 Hook Framework 名称
|
||||
@@ -86,7 +86,7 @@ internal object YukiXposedModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.Executor.name] 获取
|
||||
* @return [String] 模块未激活会返回 unknown
|
||||
*/
|
||||
internal val executorName get() = classMethod(GET_EXECUTOR_NAME_METHOD_NAME).string().ifBlank { "unknown" }
|
||||
internal val executorName get() = classMethod(GET_EXECUTOR_NAME_METHOD_NAME)?.string()?.ifBlank { "unknown" } ?: "unknown"
|
||||
|
||||
/**
|
||||
* 获取当前 Hook Framework 的 API 版本
|
||||
@@ -94,7 +94,7 @@ internal object YukiXposedModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.Executor.apiLevel] 获取
|
||||
* @return [Int] 模块未激活会返回 -1
|
||||
*/
|
||||
internal val executorApiLevel get() = classMethod(GET_EXECUTOR_API_LEVEL_METHOD_NAME).int().takeIf { it > 0 } ?: -1
|
||||
internal val executorApiLevel get() = classMethod(GET_EXECUTOR_API_LEVEL_METHOD_NAME)?.int()?.takeIf { it > 0 } ?: -1
|
||||
|
||||
/**
|
||||
* 获取当前 Hook Framework 版本名称
|
||||
@@ -102,7 +102,7 @@ internal object YukiXposedModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.Executor.versionName] 获取
|
||||
* @return [Int] 模块未激活会返回 unknown
|
||||
*/
|
||||
internal val executorVersionName get() = classMethod(GET_EXECUTOR_VERSION_NAME_METHOD_NAME).string().ifBlank { "unknown" }
|
||||
internal val executorVersionName get() = classMethod(GET_EXECUTOR_VERSION_NAME_METHOD_NAME)?.string()?.ifBlank { "unknown" } ?: "unknown"
|
||||
|
||||
/**
|
||||
* 获取当前 Hook Framework 版本号
|
||||
@@ -110,14 +110,14 @@ internal object YukiXposedModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.Executor.versionCode] 获取
|
||||
* @return [Int] 模块未激活会返回 -1
|
||||
*/
|
||||
internal val executorVersionCode get() = classMethod(GET_EXECUTOR_VERSION_CODE_METHOD_NAME).int().takeIf { it > 0 } ?: -1
|
||||
internal val executorVersionCode get() = classMethod(GET_EXECUTOR_VERSION_CODE_METHOD_NAME)?.int()?.takeIf { it > 0 } ?: -1
|
||||
|
||||
/**
|
||||
* 通过 [className] 获取方法实例
|
||||
* @param name 方法名称
|
||||
* @return [MethodFinder.Result.Instance]
|
||||
* @return [MethodFinder.Result.Instance] or null
|
||||
*/
|
||||
private fun classMethod(name: String) = className.toClass().method { this.name = name }.ignored().onNoSuchMethod {
|
||||
private fun classMethod(name: String) = className.toClassOrNull()?.method { this.name = name }?.ignored()?.onNoSuchMethod {
|
||||
YLog.innerW("Failed to initialize YukiXposedModuleStatus", it)
|
||||
}.get()
|
||||
}?.get()
|
||||
}
|
@@ -227,7 +227,6 @@ internal object AppParasitics {
|
||||
if ((param.args?.get(0) as? String?)?.endsWith("preferences.xml") == true) param.args?.set(1, 1)
|
||||
}
|
||||
})
|
||||
if (YukiHookAPI.Configs.isEnableHookModuleStatus.not()) return
|
||||
YukiXposedModuleStatus.className.toClassOrNull(loader)?.apply {
|
||||
if (type != HookEntryType.RESOURCES) {
|
||||
YukiHookHelper.hook(method { name = YukiXposedModuleStatus.IS_ACTIVE_METHOD_NAME },
|
||||
|
Reference in New Issue
Block a user