From d4c889548309f749f534a2d140edb355bd6cbece Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Sun, 20 Mar 2022 01:51:21 +0800 Subject: [PATCH] Change some code --- .../demo_module/ui/MainActivity.kt | 3 ++- .../yukihookapi/annotation/DoNotUseClass.kt | 2 ++ .../yukihookapi/annotation/DoNotUseField.kt | 2 ++ .../yukihookapi/annotation/DoNotUseMethod.kt | 2 ++ .../hook/core/finder/ConstructorFinder.kt | 9 +++---- .../hook/core/finder/FieldFinder.kt | 4 +--- .../hook/core/finder/MethodFinder.kt | 9 +++---- .../hook/core/finder/base/BaseFinder.kt | 2 +- .../hook/factory/YukiHookFactory.kt | 17 +++++++++++-- .../hook/xposed/YukiHookModuleStatus.kt | 24 ++++++++++++++----- 10 files changed, 53 insertions(+), 21 deletions(-) diff --git a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/ui/MainActivity.kt b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/ui/MainActivity.kt index d3f6d90f..6f8e173b 100644 --- a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/ui/MainActivity.kt +++ b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/ui/MainActivity.kt @@ -36,6 +36,7 @@ import android.widget.TextView import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.highcapable.yukihookapi.demo_module.R +import com.highcapable.yukihookapi.hook.factory.isModuleActive import com.highcapable.yukihookapi.hook.factory.modulePrefs import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus @@ -44,7 +45,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - findViewById(R.id.module_demo_text).text = "Module is Active -> ${YukiHookModuleStatus.isActive()}\n" + + findViewById(R.id.module_demo_text).text = "Module is Active -> $isModuleActive\n" + "Hook Framework -> ${YukiHookModuleStatus.executorName}\n" + "API Version -> ${YukiHookModuleStatus.executorVersion}" findViewById(R.id.module_demo_edit_text).also { diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseClass.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseClass.kt index 491db631..b37e9c42 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseClass.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseClass.kt @@ -38,7 +38,9 @@ package com.highcapable.yukihookapi.annotation @Retention(AnnotationRetention.BINARY) /** * - ❗警告方法外部调用声明 + * * 此方法除继承和接口外不应该在这里被调用 + * * 如果调用此方法可能会出现错误或 APP 发生异常 */ annotation class DoNotUseClass \ No newline at end of file diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseField.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseField.kt index 369c80a3..04c062f4 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseField.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseField.kt @@ -43,7 +43,9 @@ package com.highcapable.yukihookapi.annotation @Retention(AnnotationRetention.BINARY) /** * -️ ❗警告方法外部调用声明 + * * 此方法除继承和接口外不应该在这里被调用 + * * 如果调用此方法可能会出现错误或 APP 发生异常 */ annotation class DoNotUseField \ No newline at end of file diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseMethod.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseMethod.kt index db2aa3d9..8402c73e 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseMethod.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/annotation/DoNotUseMethod.kt @@ -38,7 +38,9 @@ package com.highcapable.yukihookapi.annotation @Retention(AnnotationRetention.BINARY) /** * - ❗警告方法外部调用声明 + * * 此方法除继承和接口外不应该在这里被调用 + * * 如果调用此方法可能会出现错误或 APP 发生异常 */ annotation class DoNotUseMethod \ No newline at end of file diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt index 334b8815..d2fe16b0 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/ConstructorFinder.kt @@ -25,7 +25,10 @@ * * This file is Created by fankes on 2022/2/4. */ -@file:Suppress("unused", "OPT_IN_USAGE", "EXPERIMENTAL_API_USAGE", "MemberVisibilityCanBePrivate", "UNCHECKED_CAST") +@file:Suppress( + "unused", "OPT_IN_USAGE", "EXPERIMENTAL_API_USAGE", + "MemberVisibilityCanBePrivate", "UNCHECKED_CAST", "KotlinConstantConditions" +) package com.highcapable.yukihookapi.hook.core.finder @@ -102,9 +105,7 @@ class ConstructorFinder( runBlocking { isBindToHooker = isBind setInstance(isBind, result) - }.result { - onHookLogMsg(msg = "Find Constructor [${memberInstance}] takes ${it}ms [${hookTag}]") - } + }.result { onHookLogMsg(msg = "Find Constructor [${memberInstance}] takes ${it}ms [${hookTag}]") } Result() } catch (e: Throwable) { onFailureMsg(throwable = e) diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt index dc8c0f63..8a54ba94 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt @@ -84,9 +84,7 @@ class FieldFinder( if (type != null) ReflectionUtils.findFieldIfExists(classSet, type?.name, name) else classSet?.getDeclaredField(name)?.apply { isAccessible = true } - }.result { - onHookLogMsg(msg = "Find Field [${memberInstance}] takes ${it}ms [${hookTag}]") - } + }.result { onHookLogMsg(msg = "Find Field [${memberInstance}] takes ${it}ms [${hookTag}]") } Result() } catch (e: Throwable) { Thread { diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt index e7be51f6..92ba8865 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/MethodFinder.kt @@ -25,7 +25,10 @@ * * This file is Created by fankes on 2022/2/4. */ -@file:Suppress("unused", "MemberVisibilityCanBePrivate", "OPT_IN_USAGE", "EXPERIMENTAL_API_USAGE", "UNCHECKED_CAST") +@file:Suppress( + "unused", "MemberVisibilityCanBePrivate", + "OPT_IN_USAGE", "EXPERIMENTAL_API_USAGE", "UNCHECKED_CAST", "KotlinConstantConditions" +) package com.highcapable.yukihookapi.hook.core.finder @@ -124,9 +127,7 @@ class MethodFinder( runBlocking { isBindToHooker = isBind setInstance(isBind, result) - }.result { - onHookLogMsg(msg = "Find Method [${memberInstance}] takes ${it}ms [${hookTag}]") - } + }.result { onHookLogMsg(msg = "Find Method [${memberInstance}] takes ${it}ms [${hookTag}]") } Result() } catch (e: Throwable) { onFailureMsg(throwable = e) diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.kt index 40fa77ab..c3df01d6 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/base/BaseFinder.kt @@ -88,7 +88,7 @@ abstract class BaseFinder( * @param msg 调试日志内容 */ internal fun onHookLogMsg(msg: String) { - if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = msg) + if (YukiHookAPI.Configs.isDebug && YukiHookAPI.hasXposedBridge) yLoggerI(msg = msg) } /** diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt index 63d4bc44..a0a497c8 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/YukiHookFactory.kt @@ -25,7 +25,7 @@ * * This file is Created by fankes on 2022/2/2. */ -@file:Suppress("unused") +@file:Suppress("unused", "OPT_IN_USAGE", "EXPERIMENTAL_API_USAGE") package com.highcapable.yukihookapi.hook.factory @@ -37,6 +37,7 @@ import android.os.Process import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.param.PackageParam +import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import java.io.BufferedReader @@ -92,7 +93,19 @@ val Context.processName } /** - * 判断模块是否在太极、无极中激活 + * 判断模块是否在 Xposed 或太极、无极中激活 + * @return [Boolean] 是否激活 + */ +val Context.isModuleActive get() = YukiHookModuleStatus.isActive() || isTaiChiModuleActive + +/** + * 仅判断模块是否在 Xposed 中激活 + * @return [Boolean] 是否激活 + */ +val Any?.isXposedModuleActive get() = YukiHookModuleStatus.isActive() + +/** + * 仅判断模块是否在太极、无极中激活 * @return [Boolean] 是否激活 */ val Context.isTaiChiModuleActive: Boolean diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/YukiHookModuleStatus.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/YukiHookModuleStatus.kt index b2a0f377..18e8d9d6 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/YukiHookModuleStatus.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/YukiHookModuleStatus.kt @@ -27,17 +27,27 @@ */ package com.highcapable.yukihookapi.hook.xposed +import android.app.Activity import androidx.annotation.Keep +import com.highcapable.yukihookapi.annotation.DoNotUseMethod +import com.highcapable.yukihookapi.hook.factory.isModuleActive +import com.highcapable.yukihookapi.hook.factory.isTaiChiModuleActive +import com.highcapable.yukihookapi.hook.factory.isXposedModuleActive import com.highcapable.yukihookapi.hook.log.yLoggerI import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.executorName import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.executorVersion -import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.isActive import de.robv.android.xposed.XposedBridge /** * 这是一个 Xposed 模块 Hook 状态类 * - * 我们需要监听自己的模块是否被激活 - 可直接调用这个类的 [isActive] 方法 + * 我们需要监听自己的模块是否被激活 - 可使用以下方法调用 + * + * 在 [Activity] 中调用 [isModuleActive] 或 [isTaiChiModuleActive] + * + * 在任意地方调用 [isXposedModuleActive] + * + * 你还可以使用以下方法获取当前 Hook 框架的详细信息 * * 调用 [executorName] 来获取当前 Hook 框架的名称 * @@ -67,10 +77,14 @@ object YukiHookModuleStatus { /** * 此方法经过 Hook 后返回 true 即模块已激活 + * + * 请使用 [isModuleActive]、[isXposedModuleActive]、[isTaiChiModuleActive] 判断模块激活状态 + * + * - ❗此方法为私有功能性 API - 你不应该手动调用此方法 * @return [Boolean] */ - @Keep - fun isActive(): Boolean { + @DoNotUseMethod + internal fun isActive(): Boolean { yLoggerI(msg = "This Module is not actived") return false } @@ -79,13 +93,11 @@ object YukiHookModuleStatus { * 此方法经过 Hook 后返回 [XposedBridge.getXposedVersion] * @return [Int] */ - @Keep private fun getXposedVersion() = -1 /** * 此方法经过 Hook 后返回 [XposedBridge] 的 TAG * @return [String] */ - @Keep private fun getXposedBridgeTag() = "unknown" } \ No newline at end of file