mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Modify support TaiChi Xposed activation status and change activation status code in YukiHookModuleStatus
This commit is contained in:
@@ -59,7 +59,7 @@ object ClassName {
|
||||
*/
|
||||
object YukiHookModuleStatusJvmName {
|
||||
const val IS_ACTIVE_METHOD_NAME = "__--"
|
||||
const val HAS_RESOURCES_HOOK_METHOD_NAME = "_--_"
|
||||
const val IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME = "_--_"
|
||||
const val GET_XPOSED_VERSION_METHOD_NAME = "--__"
|
||||
const val GET_XPOSED_TAG_METHOD_NAME = "_-_-"
|
||||
}
|
||||
@@ -129,8 +129,8 @@ fun GenerateData.sources() = mapOf(
|
||||
" return false\n" +
|
||||
" }\n" +
|
||||
"\n" +
|
||||
" @JvmName(\"${YukiHookModuleStatusJvmName.HAS_RESOURCES_HOOK_METHOD_NAME}\")\n" +
|
||||
" fun hasResourcesHook(): Boolean {\n" +
|
||||
" @JvmName(\"${YukiHookModuleStatusJvmName.IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME}\")\n" +
|
||||
" fun isSupportResourcesHook(): Boolean {\n" +
|
||||
" placeholderExecution()\n" +
|
||||
" return false\n" +
|
||||
" }\n" +
|
||||
|
@@ -40,7 +40,7 @@ object YukiHookModuleStatus_Impl {
|
||||
private const val IS_ACTIVE_METHOD_NAME = "__--"
|
||||
|
||||
/** 定义 Jvm 方法名 */
|
||||
private const val HAS_RESOURCES_HOOK_METHOD_NAME = "_--_"
|
||||
private const val IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME = "_--_"
|
||||
|
||||
/** 定义 Jvm 方法名 */
|
||||
private const val GET_XPOSED_VERSION_METHOD_NAME = "--__"
|
||||
@@ -58,13 +58,13 @@ object YukiHookModuleStatus_Impl {
|
||||
fun isActive(): Boolean = error("Stub!")
|
||||
|
||||
/**
|
||||
* 此方法经过 Hook 后返回 true 即当前 Hook Framework 支持资源钩子(Resources Hook)
|
||||
* 此方法经过 Hook 后返回 true 即当前 Hook Framework 支持资源钩子 (Resources Hook)
|
||||
*
|
||||
* 返回值将在每次编译时自动生成
|
||||
* @return [Boolean]
|
||||
*/
|
||||
@JvmName(HAS_RESOURCES_HOOK_METHOD_NAME)
|
||||
fun hasResourcesHook(): Boolean = error("Stub!")
|
||||
@JvmName(IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME)
|
||||
fun isSupportResourcesHook(): Boolean = error("Stub!")
|
||||
|
||||
/**
|
||||
* 此方法经过 Hook 后返回 [XposedBridge.getXposedVersion]
|
||||
|
@@ -108,7 +108,12 @@ object YukiHookAPI {
|
||||
* - ❗在模块环境中需要启用 [Configs.isEnableHookModuleStatus]
|
||||
* @return [String] 无法获取会返回 unknown - [YukiHookBridge.hasXposedBridge] 不存在会返回 invalid
|
||||
*/
|
||||
val executorName get() = YukiHookBridge.executorName.takeIf { isXposedEnvironment } ?: YukiHookModuleStatus.executorName
|
||||
val executorName
|
||||
get() = YukiHookBridge.executorName.takeIf { isXposedEnvironment } ?: when {
|
||||
isXposedModuleActive -> YukiHookModuleStatus.executorName
|
||||
isTaiChiModuleActive -> YukiHookModuleStatus.TAICHI_XPOSED_NAME
|
||||
else -> YukiHookModuleStatus.executorName
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前 Hook 框架的版本
|
||||
@@ -130,7 +135,7 @@ object YukiHookAPI {
|
||||
* - ❗在 (Xposed) 宿主环境中仅返回非 [isTaiChiModuleActive] 的激活状态
|
||||
* @return [Boolean] 是否激活
|
||||
*/
|
||||
val isModuleActive get() = isXposedEnvironment || YukiHookModuleStatus.isActive() || isTaiChiModuleActive
|
||||
val isModuleActive get() = isXposedEnvironment || YukiHookModuleStatus.isActive || isTaiChiModuleActive
|
||||
|
||||
/**
|
||||
* 仅判断模块是否在 Xposed 中激活
|
||||
@@ -140,7 +145,7 @@ object YukiHookAPI {
|
||||
* - ❗在 (Xposed) 宿主环境中始终返回 true
|
||||
* @return [Boolean] 是否激活
|
||||
*/
|
||||
val isXposedModuleActive get() = isXposedEnvironment || YukiHookModuleStatus.isActive()
|
||||
val isXposedModuleActive get() = isXposedEnvironment || YukiHookModuleStatus.isActive
|
||||
|
||||
/**
|
||||
* 仅判断模块是否在太极、无极中激活
|
||||
@@ -163,7 +168,7 @@ object YukiHookAPI {
|
||||
* @return [Boolean] 是否支持
|
||||
*/
|
||||
val isSupportResourcesHook
|
||||
get() = YukiHookBridge.isSupportResourcesHook.takeIf { isXposedEnvironment } ?: YukiHookModuleStatus.hasResourcesHook()
|
||||
get() = YukiHookBridge.isSupportResourcesHook.takeIf { isXposedEnvironment } ?: YukiHookModuleStatus.isSupportResourcesHook
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -40,6 +40,7 @@ import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||
import com.highcapable.yukihookapi.hook.param.type.HookEntryType
|
||||
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus
|
||||
import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper
|
||||
import com.highcapable.yukihookapi.hook.xposed.parasitic.AppParasitics
|
||||
import dalvik.system.PathClassLoader
|
||||
@@ -128,7 +129,9 @@ object YukiHookBridge {
|
||||
*/
|
||||
internal val executorName
|
||||
get() = runCatching {
|
||||
classOf<XposedBridge>().field { name = "TAG" }.ignored().get().string().takeIf { it.isNotBlank() }
|
||||
if (YukiHookModuleStatus.EXPOSED_BRIDGE_CLASS_NAME.hasClass(YukiHookAppHelper.currentApplication()?.classLoader))
|
||||
YukiHookModuleStatus.TAICHI_XPOSED_NAME
|
||||
else classOf<XposedBridge>().field { name = "TAG" }.ignored().get().string().takeIf { it.isNotBlank() }
|
||||
?.replace("Bridge", "")?.replace("-", "")?.trim() ?: "unknown"
|
||||
}.getOrNull() ?: "invalid"
|
||||
|
||||
|
@@ -55,7 +55,7 @@ internal object YukiHookModuleStatus {
|
||||
internal const val IS_ACTIVE_METHOD_NAME = "__--"
|
||||
|
||||
/** 定义 Jvm 方法名 */
|
||||
internal const val HAS_RESOURCES_HOOK_METHOD_NAME = "_--_"
|
||||
internal const val IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME = "_--_"
|
||||
|
||||
/** 定义 Jvm 方法名 */
|
||||
internal const val GET_XPOSED_VERSION_METHOD_NAME = "--__"
|
||||
@@ -63,6 +63,12 @@ internal object YukiHookModuleStatus {
|
||||
/** 定义 Jvm 方法名 */
|
||||
internal const val GET_XPOSED_TAG_METHOD_NAME = "_-_-"
|
||||
|
||||
/** TaiChi Xposed 框架名称 */
|
||||
internal const val TAICHI_XPOSED_NAME = "TaiChi"
|
||||
|
||||
/** TaiChi ExposedBridge 完整类名 */
|
||||
internal const val EXPOSED_BRIDGE_CLASS_NAME = "me.weishu.exposed.ExposedBridge"
|
||||
|
||||
/** [YukiHookModuleStatus_Impl] 完整类名 */
|
||||
internal const val IMPL_CLASS_NAME = "com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus_Impl"
|
||||
|
||||
@@ -74,10 +80,7 @@ internal object YukiHookModuleStatus {
|
||||
* 请使用 [YukiHookAPI.Status.executorName] 获取
|
||||
* @return [String] 模块未激活会返回 unknown
|
||||
*/
|
||||
internal val executorName
|
||||
get() = runCatching {
|
||||
YukiHookModuleStatus_Impl.getXposedBridgeTag().replace("Bridge", "").replace("-", "").trim()
|
||||
}.getOrNull() ?: "unknown"
|
||||
internal val executorName get() = runCatching { YukiHookModuleStatus_Impl.getXposedBridgeTag() }.getOrNull() ?: "unknown"
|
||||
|
||||
/**
|
||||
* 获取当前 Hook 框架的版本
|
||||
@@ -90,18 +93,18 @@ internal object YukiHookModuleStatus {
|
||||
internal val executorVersion get() = runCatching { YukiHookModuleStatus_Impl.getXposedVersion() }.getOrNull() ?: -1
|
||||
|
||||
/**
|
||||
* 此方法经过 Hook 后返回 true 即模块已激活
|
||||
* 获取当前模块的激活状态
|
||||
*
|
||||
* 请使用 [YukiHookAPI.Status.isModuleActive]、[YukiHookAPI.Status.isXposedModuleActive]、[YukiHookAPI.Status.isTaiChiModuleActive] 判断模块激活状态
|
||||
* @return [Boolean]
|
||||
*/
|
||||
internal fun isActive() = runCatching { YukiHookModuleStatus_Impl.isActive() }.getOrNull() ?: false
|
||||
internal val isActive get() = runCatching { YukiHookModuleStatus_Impl.isActive() }.getOrNull() ?: false
|
||||
|
||||
/**
|
||||
* 此方法经过 Hook 后返回 true 即当前 Hook Framework 支持资源钩子(Resources Hook)
|
||||
* 获取当前 Hook Framework 是否支持资源钩子 (Resources Hook)
|
||||
*
|
||||
* 请使用 [YukiHookAPI.Status.isSupportResourcesHook] 判断支持状态
|
||||
* @return [Boolean]
|
||||
*/
|
||||
internal fun hasResourcesHook() = runCatching { YukiHookModuleStatus_Impl.hasResourcesHook() }.getOrNull() ?: false
|
||||
internal val isSupportResourcesHook get() = runCatching { YukiHookModuleStatus_Impl.isSupportResourcesHook() }.getOrNull() ?: false
|
||||
}
|
@@ -159,8 +159,8 @@ internal object AppParasitics {
|
||||
YukiHookHelper.hook(method { name = YukiHookModuleStatus.GET_XPOSED_VERSION_METHOD_NAME }, object : YukiMemberReplacement() {
|
||||
override fun replaceHookedMember(param: Param) = YukiHookBridge.executorVersion
|
||||
})
|
||||
} else
|
||||
YukiHookHelper.hook(method { name = YukiHookModuleStatus.HAS_RESOURCES_HOOK_METHOD_NAME }, object : YukiMemberReplacement() {
|
||||
} else YukiHookHelper.hook(method { name = YukiHookModuleStatus.IS_SUPPORT_RESOURCES_HOOK_METHOD_NAME },
|
||||
object : YukiMemberReplacement() {
|
||||
override fun replaceHookedMember(param: Param) = true
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user