Modify support TaiChi Xposed activation status and change activation status code in YukiHookModuleStatus

This commit is contained in:
2023-01-02 19:32:58 +08:00
parent 75bdc2d1cb
commit 0431a4378b
6 changed files with 34 additions and 23 deletions

View File

@@ -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" +

View File

@@ -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 = "--__"
@@ -63,8 +63,8 @@ object YukiHookModuleStatus_Impl {
* 返回值将在每次编译时自动生成
* @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]

View File

@@ -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
}
/**

View File

@@ -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"

View File

@@ -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
}

View File

@@ -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
})
}