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 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<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" +
"API Version -> ${YukiHookModuleStatus.executorVersion}"
findViewById<EditText>(R.id.module_demo_edit_text).also {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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