Change some code

This commit is contained in:
2022-03-20 01:51:21 +08:00
parent ba499034a2
commit d4c8895483
10 changed files with 53 additions and 21 deletions

View File

@@ -36,6 +36,7 @@ import android.widget.TextView
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.highcapable.yukihookapi.demo_module.R 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.factory.modulePrefs
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus
@@ -44,7 +45,7 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
findViewById<TextView>(R.id.module_demo_text).text = "Module is Active -> ${YukiHookModuleStatus.isActive()}\n" + findViewById<TextView>(R.id.module_demo_text).text = "Module is Active -> $isModuleActive\n" +
"Hook Framework -> ${YukiHookModuleStatus.executorName}\n" + "Hook Framework -> ${YukiHookModuleStatus.executorName}\n" +
"API Version -> ${YukiHookModuleStatus.executorVersion}" "API Version -> ${YukiHookModuleStatus.executorVersion}"
findViewById<EditText>(R.id.module_demo_edit_text).also { findViewById<EditText>(R.id.module_demo_edit_text).also {

View File

@@ -38,7 +38,9 @@ package com.highcapable.yukihookapi.annotation
@Retention(AnnotationRetention.BINARY) @Retention(AnnotationRetention.BINARY)
/** /**
* - ❗警告方法外部调用声明 * - ❗警告方法外部调用声明
*
* 此方法除继承和接口外不应该在这里被调用 * 此方法除继承和接口外不应该在这里被调用
*
* 如果调用此方法可能会出现错误或 APP 发生异常 * 如果调用此方法可能会出现错误或 APP 发生异常
*/ */
annotation class DoNotUseClass annotation class DoNotUseClass

View File

@@ -43,7 +43,9 @@ package com.highcapable.yukihookapi.annotation
@Retention(AnnotationRetention.BINARY) @Retention(AnnotationRetention.BINARY)
/** /**
* - ❗警告方法外部调用声明 * - ❗警告方法外部调用声明
*
* 此方法除继承和接口外不应该在这里被调用 * 此方法除继承和接口外不应该在这里被调用
*
* 如果调用此方法可能会出现错误或 APP 发生异常 * 如果调用此方法可能会出现错误或 APP 发生异常
*/ */
annotation class DoNotUseField annotation class DoNotUseField

View File

@@ -38,7 +38,9 @@ package com.highcapable.yukihookapi.annotation
@Retention(AnnotationRetention.BINARY) @Retention(AnnotationRetention.BINARY)
/** /**
* - ❗警告方法外部调用声明 * - ❗警告方法外部调用声明
*
* 此方法除继承和接口外不应该在这里被调用 * 此方法除继承和接口外不应该在这里被调用
*
* 如果调用此方法可能会出现错误或 APP 发生异常 * 如果调用此方法可能会出现错误或 APP 发生异常
*/ */
annotation class DoNotUseMethod annotation class DoNotUseMethod

View File

@@ -25,7 +25,10 @@
* *
* This file is Created by fankes on 2022/2/4. * 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 package com.highcapable.yukihookapi.hook.core.finder
@@ -102,9 +105,7 @@ class ConstructorFinder(
runBlocking { runBlocking {
isBindToHooker = isBind isBindToHooker = isBind
setInstance(isBind, result) setInstance(isBind, result)
}.result { }.result { onHookLogMsg(msg = "Find Constructor [${memberInstance}] takes ${it}ms [${hookTag}]") }
onHookLogMsg(msg = "Find Constructor [${memberInstance}] takes ${it}ms [${hookTag}]")
}
Result() Result()
} catch (e: Throwable) { } catch (e: Throwable) {
onFailureMsg(throwable = e) onFailureMsg(throwable = e)

View File

@@ -84,9 +84,7 @@ class FieldFinder(
if (type != null) if (type != null)
ReflectionUtils.findFieldIfExists(classSet, type?.name, name) ReflectionUtils.findFieldIfExists(classSet, type?.name, name)
else classSet?.getDeclaredField(name)?.apply { isAccessible = true } else classSet?.getDeclaredField(name)?.apply { isAccessible = true }
}.result { }.result { onHookLogMsg(msg = "Find Field [${memberInstance}] takes ${it}ms [${hookTag}]") }
onHookLogMsg(msg = "Find Field [${memberInstance}] takes ${it}ms [${hookTag}]")
}
Result() Result()
} catch (e: Throwable) { } catch (e: Throwable) {
Thread { Thread {

View File

@@ -25,7 +25,10 @@
* *
* This file is Created by fankes on 2022/2/4. * 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 package com.highcapable.yukihookapi.hook.core.finder
@@ -124,9 +127,7 @@ class MethodFinder(
runBlocking { runBlocking {
isBindToHooker = isBind isBindToHooker = isBind
setInstance(isBind, result) setInstance(isBind, result)
}.result { }.result { onHookLogMsg(msg = "Find Method [${memberInstance}] takes ${it}ms [${hookTag}]") }
onHookLogMsg(msg = "Find Method [${memberInstance}] takes ${it}ms [${hookTag}]")
}
Result() Result()
} catch (e: Throwable) { } catch (e: Throwable) {
onFailureMsg(throwable = e) onFailureMsg(throwable = e)

View File

@@ -88,7 +88,7 @@ abstract class BaseFinder(
* @param msg 调试日志内容 * @param msg 调试日志内容
*/ */
internal fun onHookLogMsg(msg: String) { internal fun onHookLogMsg(msg: String) {
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = msg) if (YukiHookAPI.Configs.isDebug && YukiHookAPI.hasXposedBridge) yLoggerI(msg = msg)
} }
/** /**

View File

@@ -25,7 +25,7 @@
* *
* This file is Created by fankes on 2022/2/2. * 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 package com.highcapable.yukihookapi.hook.factory
@@ -37,6 +37,7 @@ import android.os.Process
import com.highcapable.yukihookapi.YukiHookAPI import com.highcapable.yukihookapi.YukiHookAPI
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
import com.highcapable.yukihookapi.hook.param.PackageParam 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.prefs.YukiHookModulePrefs
import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy import com.highcapable.yukihookapi.hook.xposed.proxy.YukiHookXposedInitProxy
import java.io.BufferedReader 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] 是否激活 * @return [Boolean] 是否激活
*/ */
val Context.isTaiChiModuleActive: Boolean val Context.isTaiChiModuleActive: Boolean

View File

@@ -27,17 +27,27 @@
*/ */
package com.highcapable.yukihookapi.hook.xposed package com.highcapable.yukihookapi.hook.xposed
import android.app.Activity
import androidx.annotation.Keep 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.log.yLoggerI
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.executorName import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.executorName
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.executorVersion import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.executorVersion
import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus.isActive
import de.robv.android.xposed.XposedBridge import de.robv.android.xposed.XposedBridge
/** /**
* 这是一个 Xposed 模块 Hook 状态类 * 这是一个 Xposed 模块 Hook 状态类
* *
* 我们需要监听自己的模块是否被激活 - 可直接调用这个类的 [isActive] 方法 * 我们需要监听自己的模块是否被激活 - 可使用以下方法调用
*
* 在 [Activity] 中调用 [isModuleActive] 或 [isTaiChiModuleActive]
*
* 在任意地方调用 [isXposedModuleActive]
*
* 你还可以使用以下方法获取当前 Hook 框架的详细信息
* *
* 调用 [executorName] 来获取当前 Hook 框架的名称 * 调用 [executorName] 来获取当前 Hook 框架的名称
* *
@@ -67,10 +77,14 @@ object YukiHookModuleStatus {
/** /**
* 此方法经过 Hook 后返回 true 即模块已激活 * 此方法经过 Hook 后返回 true 即模块已激活
*
* 请使用 [isModuleActive]、[isXposedModuleActive]、[isTaiChiModuleActive] 判断模块激活状态
*
* - ❗此方法为私有功能性 API - 你不应该手动调用此方法
* @return [Boolean] * @return [Boolean]
*/ */
@Keep @DoNotUseMethod
fun isActive(): Boolean { internal fun isActive(): Boolean {
yLoggerI(msg = "This Module is not actived") yLoggerI(msg = "This Module is not actived")
return false return false
} }
@@ -79,13 +93,11 @@ object YukiHookModuleStatus {
* 此方法经过 Hook 后返回 [XposedBridge.getXposedVersion] * 此方法经过 Hook 后返回 [XposedBridge.getXposedVersion]
* @return [Int] * @return [Int]
*/ */
@Keep
private fun getXposedVersion() = -1 private fun getXposedVersion() = -1
/** /**
* 此方法经过 Hook 后返回 [XposedBridge] 的 TAG * 此方法经过 Hook 后返回 [XposedBridge] 的 TAG
* @return [String] * @return [String]
*/ */
@Keep
private fun getXposedBridgeTag() = "unknown" private fun getXposedBridgeTag() = "unknown"
} }