mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-07 03:05:36 +08:00
Modify move package name to global host process name and set to current logger in LoggerFactory
This commit is contained in:
@@ -133,7 +133,7 @@ injectMember(priority = PRIORITY_HIGHEST) {
|
|||||||
### MemberHookCreater [class]
|
### MemberHookCreater [class]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
inner class MemberHookCreater internal constructor(private val priority: Int, internal val tag: String, internal val packageName: String)
|
inner class MemberHookCreater internal constructor(private val priority: Int, internal val tag: String)
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -148,6 +148,10 @@ inner class MemberHookCreater internal constructor(private val priority: Int, in
|
|||||||
|
|
||||||
增加 `packageName` 当前 Hook 的 APP 包名
|
增加 `packageName` 当前 Hook 的 APP 包名
|
||||||
|
|
||||||
|
`v1.0.93` `修改`
|
||||||
|
|
||||||
|
移除 `packageName`
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> Hook 核心功能实现类,查找和处理需要 Hook 的方法、构造方法。
|
> Hook 核心功能实现类,查找和处理需要 Hook 的方法、构造方法。
|
||||||
|
@@ -51,13 +51,17 @@ injectResource(tag = "KuriharaYuki") {
|
|||||||
### ResourcesHookCreater [class]
|
### ResourcesHookCreater [class]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
inner class ResourcesHookCreater internal constructor(private val tag: String, private val packageName: String)
|
inner class ResourcesHookCreater internal constructor(private val tag: String)
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
|
|
||||||
`v1.0.80` `新增`
|
`v1.0.80` `新增`
|
||||||
|
|
||||||
|
`v1.0.93` `修改`
|
||||||
|
|
||||||
|
移除 `packageName`
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> Hook 核心功能实现类。
|
> Hook 核心功能实现类。
|
||||||
|
@@ -297,7 +297,7 @@ object YukiHookAPI {
|
|||||||
YukiHookBridge.packageParamCallback = {
|
YukiHookBridge.packageParamCallback = {
|
||||||
if (hooker.isNotEmpty())
|
if (hooker.isNotEmpty())
|
||||||
hooker.forEach { it.assignInstance(packageParam = this) }
|
hooker.forEach { it.assignInstance(packageParam = this) }
|
||||||
else yLoggerE(msg = "Failed to passing \"encase\" method because your hooker param is empty")
|
else yLoggerE(msg = "Failed to passing \"encase\" method because your hooker param is empty", isShowProcessName = false)
|
||||||
}
|
}
|
||||||
else printNoXposedEnvLog()
|
else printNoXposedEnvLog()
|
||||||
}
|
}
|
||||||
@@ -344,7 +344,7 @@ object YukiHookAPI {
|
|||||||
if (hooker.isNotEmpty()) {
|
if (hooker.isNotEmpty()) {
|
||||||
printSplashLog()
|
printSplashLog()
|
||||||
hooker.forEach { it.assignInstance(packageParam = baseContext.packageParam) }
|
hooker.forEach { it.assignInstance(packageParam = baseContext.packageParam) }
|
||||||
} else yLoggerE(msg = "Failed to passing \"encase\" method because your hooker param is empty"))
|
} else yLoggerE(msg = "Failed to passing \"encase\" method because your hooker param is empty", isShowProcessName = false))
|
||||||
else printNoXposedEnvLog()
|
else printNoXposedEnvLog()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -352,11 +352,14 @@ object YukiHookAPI {
|
|||||||
private fun printSplashLog() {
|
private fun printSplashLog() {
|
||||||
if (Configs.isDebug.not() || isShowSplashLogOnceTime.not()) return
|
if (Configs.isDebug.not() || isShowSplashLogOnceTime.not()) return
|
||||||
isShowSplashLogOnceTime = false
|
isShowSplashLogOnceTime = false
|
||||||
yLoggerI(msg = "Welcome to YukiHookAPI $API_VERSION_NAME($API_VERSION_CODE)! Using ${Status.executorName} API ${Status.executorVersion}")
|
yLoggerI(
|
||||||
|
msg = "Welcome to YukiHookAPI $API_VERSION_NAME($API_VERSION_CODE)! Using ${Status.executorName} API ${Status.executorVersion}",
|
||||||
|
isShowProcessName = false
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 输出找不到 [XposedBridge] 的错误日志 */
|
/** 输出找不到 [XposedBridge] 的错误日志 */
|
||||||
private fun printNoXposedEnvLog() = yLoggerE(msg = "Could not found XposedBridge in current space! Aborted")
|
private fun printNoXposedEnvLog() = yLoggerE(msg = "Could not found XposedBridge in current space! Aborted", isShowProcessName = false)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 baseContext 创建 Hook 入口类
|
* 通过 baseContext 创建 Hook 入口类
|
||||||
|
@@ -102,7 +102,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
* @return [MemberHookCreater.Result]
|
* @return [MemberHookCreater.Result]
|
||||||
*/
|
*/
|
||||||
inline fun injectMember(priority: Int = PRIORITY_DEFAULT, tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
inline fun injectMember(priority: Int = PRIORITY_DEFAULT, tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
||||||
MemberHookCreater(priority, tag, packageParam.exhibitName).apply(initiate).apply { preHookMembers[toString()] = this }.build()
|
MemberHookCreater(priority, tag).apply(initiate).apply { preHookMembers[toString()] = this }.build()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook 执行入口
|
* Hook 执行入口
|
||||||
@@ -127,7 +127,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
}
|
}
|
||||||
isDisableCreaterRunHook.not() && hookClass.instance == null ->
|
isDisableCreaterRunHook.not() && hookClass.instance == null ->
|
||||||
if (onHookClassNotFoundFailureCallback == null)
|
if (onHookClassNotFoundFailureCallback == null)
|
||||||
yLoggerE(msg = "[${packageParam.exhibitName}] HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
yLoggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
||||||
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
|
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
|
||||||
}
|
}
|
||||||
}.start()
|
}.start()
|
||||||
@@ -159,11 +159,8 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
* 查找和处理需要 Hook 的方法、构造方法
|
* 查找和处理需要 Hook 的方法、构造方法
|
||||||
* @param priority Hook 优先级
|
* @param priority Hook 优先级
|
||||||
* @param tag 当前设置的标签
|
* @param tag 当前设置的标签
|
||||||
* @param packageName 当前 Hook 的 APP 包名
|
|
||||||
*/
|
*/
|
||||||
inner class MemberHookCreater @PublishedApi internal constructor(
|
inner class MemberHookCreater @PublishedApi internal constructor(private val priority: Int, internal val tag: String) {
|
||||||
private val priority: Int, internal val tag: String, internal val packageName: String
|
|
||||||
) {
|
|
||||||
|
|
||||||
/** Hook 结果实例 */
|
/** Hook 结果实例 */
|
||||||
private var result: Result? = null
|
private var result: Result? = null
|
||||||
@@ -493,7 +490,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
onHookingFailureCallback?.invoke(it)
|
onHookingFailureCallback?.invoke(it)
|
||||||
onAllFailureCallback?.invoke(it)
|
onAllFailureCallback?.invoke(it)
|
||||||
if (isNotIgnoredNoSuchMemberFailure) yLoggerE(
|
if (isNotIgnoredNoSuchMemberFailure) yLoggerE(
|
||||||
msg = "$hostTagName " + (if (isHookMemberSetup)
|
msg = (if (isHookMemberSetup)
|
||||||
"Hooked Member with a finding error by $hookClass [$tag]"
|
"Hooked Member with a finding error by $hookClass [$tag]"
|
||||||
else "Hooked Member cannot be non-null by $hookClass [$tag]"),
|
else "Hooked Member cannot be non-null by $hookClass [$tag]"),
|
||||||
e = findingThrowable ?: it
|
e = findingThrowable ?: it
|
||||||
@@ -587,7 +584,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
* @param msg 调试日志内容
|
* @param msg 调试日志内容
|
||||||
*/
|
*/
|
||||||
private fun onHookLogMsg(msg: String) {
|
private fun onHookLogMsg(msg: String) {
|
||||||
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = "$hostTagName $msg")
|
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -596,7 +593,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
* @param member 异常 [Member] - 可空
|
* @param member 异常 [Member] - 可空
|
||||||
*/
|
*/
|
||||||
private fun onHookFailureMsg(throwable: Throwable, member: Member? = null) = yLoggerE(
|
private fun onHookFailureMsg(throwable: Throwable, member: Member? = null) = yLoggerE(
|
||||||
msg = "$hostTagName Try to hook [${hookClass.instance ?: hookClass.name}]${member?.let { "[$it]" } ?: ""} got an Exception [$tag]",
|
msg = "Try to hook [${hookClass.instance ?: hookClass.name}]${member?.let { "[$it]" } ?: ""} got an Exception [$tag]",
|
||||||
e = throwable
|
e = throwable
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -612,12 +609,6 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
|||||||
*/
|
*/
|
||||||
internal val isNotIgnoredNoSuchMemberFailure get() = onNoSuchMemberFailureCallback == null && isNotIgnoredHookingFailure
|
internal val isNotIgnoredNoSuchMemberFailure get() = onNoSuchMemberFailureCallback == null && isNotIgnoredHookingFailure
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 Hook APP (宿主) 标签
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
internal val hostTagName get() = if (packageParam.appUserId != 0) "[$packageName][${packageParam.appUserId}]" else "[$packageName]"
|
|
||||||
|
|
||||||
override fun toString() = "[tag] $tag [priority] $priority [class] $hookClass [members] $members"
|
override fun toString() = "[tag] $tag [priority] $priority [class] $hookClass [members] $members"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -58,7 +58,7 @@ class YukiResourcesHookCreater(@PublishedApi internal val packageParam: PackageP
|
|||||||
* @return [ResourcesHookCreater.Result]
|
* @return [ResourcesHookCreater.Result]
|
||||||
*/
|
*/
|
||||||
inline fun injectResource(tag: String = "Default", initiate: ResourcesHookCreater.() -> Unit) =
|
inline fun injectResource(tag: String = "Default", initiate: ResourcesHookCreater.() -> Unit) =
|
||||||
ResourcesHookCreater(tag, packageParam.exhibitName).apply(initiate).apply { preHookResources[toString()] = this }.build()
|
ResourcesHookCreater(tag).apply(initiate).apply { preHookResources[toString()] = this }.build()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook 执行入口
|
* Hook 执行入口
|
||||||
@@ -78,9 +78,8 @@ class YukiResourcesHookCreater(@PublishedApi internal val packageParam: PackageP
|
|||||||
*
|
*
|
||||||
* 查找和处理需要 Hook 的 Resources
|
* 查找和处理需要 Hook 的 Resources
|
||||||
* @param tag 当前设置的标签
|
* @param tag 当前设置的标签
|
||||||
* @param packageName 当前 Hook 的 APP 包名
|
|
||||||
*/
|
*/
|
||||||
inner class ResourcesHookCreater @PublishedApi internal constructor(private val tag: String, private val packageName: String) {
|
inner class ResourcesHookCreater @PublishedApi internal constructor(private val tag: String) {
|
||||||
|
|
||||||
/** 是否已经执行 Hook */
|
/** 是否已经执行 Hook */
|
||||||
private var isHooked = false
|
private var isHooked = false
|
||||||
@@ -232,15 +231,9 @@ class YukiResourcesHookCreater(@PublishedApi internal val packageParam: PackageP
|
|||||||
* @param msg 调试日志内容
|
* @param msg 调试日志内容
|
||||||
*/
|
*/
|
||||||
private fun onHookLogMsg(msg: String) {
|
private fun onHookLogMsg(msg: String) {
|
||||||
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = "$hostTagName $msg")
|
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 Hook APP (宿主) 标签
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
private val hostTagName get() = if (packageParam.appUserId != 0) "[$packageName][${packageParam.appUserId}]" else "[$packageName]"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resources 查找条件实现类
|
* Resources 查找条件实现类
|
||||||
*/
|
*/
|
||||||
|
@@ -197,8 +197,8 @@ class FieldFinder @PublishedApi internal constructor(
|
|||||||
if (classSet != null) {
|
if (classSet != null) {
|
||||||
runBlocking {
|
runBlocking {
|
||||||
setInstance(result)
|
setInstance(result)
|
||||||
}.result {
|
}.result { ms ->
|
||||||
memberInstances.takeIf { it.isNotEmpty() }?.forEach { onHookLogMsg(msg = "Find Field [$it] takes ${it}ms [${hookTag}]") }
|
memberInstances.takeIf { it.isNotEmpty() }?.forEach { onHookLogMsg(msg = "Find Field [$it] takes ${ms}ms [${hookTag}]") }
|
||||||
}
|
}
|
||||||
Result()
|
Result()
|
||||||
} else Result(isNoSuch = true, Throwable("classSet is null"))
|
} else Result(isNoSuch = true, Throwable("classSet is null"))
|
||||||
|
@@ -211,7 +211,7 @@ abstract class BaseFinder internal constructor(
|
|||||||
/** 存在日志时输出日志 */
|
/** 存在日志时输出日志 */
|
||||||
internal fun printLogIfExist() {
|
internal fun printLogIfExist() {
|
||||||
if (loggingContent != null) yLoggerE(
|
if (loggingContent != null) yLoggerE(
|
||||||
msg = "${hookInstance?.hostTagName?.let { "$it " } ?: ""}NoSuch$tag happend in [$classSet] ${loggingContent?.first} [${hookTag}]",
|
msg = "NoSuch$tag happend in [$classSet] ${loggingContent?.first} [${hookTag}]",
|
||||||
e = loggingContent?.second
|
e = loggingContent?.second
|
||||||
)
|
)
|
||||||
/** 仅输出一次 - 然后清掉日志 */
|
/** 仅输出一次 - 然后清掉日志 */
|
||||||
@@ -223,8 +223,7 @@ abstract class BaseFinder internal constructor(
|
|||||||
* @param msg 调试日志内容
|
* @param msg 调试日志内容
|
||||||
*/
|
*/
|
||||||
internal fun onHookLogMsg(msg: String) {
|
internal fun onHookLogMsg(msg: String) {
|
||||||
if (YukiHookAPI.Configs.isDebug && YukiHookBridge.hasXposedBridge)
|
if (YukiHookAPI.Configs.isDebug && YukiHookBridge.hasXposedBridge) yLoggerI(msg = msg)
|
||||||
hookInstance?.also { yLoggerI(msg = "${it.hostTagName} $msg") } ?: yLoggerI(msg = msg)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -76,8 +76,9 @@ enum class LoggerType {
|
|||||||
* @param tag 日志打印的标签
|
* @param tag 日志打印的标签
|
||||||
* @param msg 日志打印的内容
|
* @param msg 日志打印的内容
|
||||||
* @param e 异常堆栈信息
|
* @param e 异常堆栈信息
|
||||||
|
* @param isShowProcessName 是否显示当前进程名称 - 仅限 [XposedBridge.log]
|
||||||
*/
|
*/
|
||||||
private fun baseLogger(format: String, type: LoggerType, tag: String, msg: String, e: Throwable? = null) {
|
private fun baseLogger(format: String, type: LoggerType, tag: String, msg: String, e: Throwable? = null, isShowProcessName: Boolean = true) {
|
||||||
/** 打印到 [Log] */
|
/** 打印到 [Log] */
|
||||||
fun loggerInLogd() = when (format) {
|
fun loggerInLogd() = when (format) {
|
||||||
"D" -> Log.d(tag, msg)
|
"D" -> Log.d(tag, msg)
|
||||||
@@ -89,8 +90,11 @@ private fun baseLogger(format: String, type: LoggerType, tag: String, msg: Strin
|
|||||||
|
|
||||||
/** 打印到 [XposedBridge.log] */
|
/** 打印到 [XposedBridge.log] */
|
||||||
fun loggerInXposed() = runCatching {
|
fun loggerInXposed() = runCatching {
|
||||||
XposedBridge.log("[$tag][$format]--> $msg")
|
YukiHookBridge.hostProcessName.also {
|
||||||
e?.also { XposedBridge.log(it) }
|
val appUserId = YukiHookBridge.findUserId(it)
|
||||||
|
XposedBridge.log("[$tag][$format]${if (isShowProcessName) (if (appUserId != 0) "[$it][$appUserId]" else "[$it]") else ""}--> $msg")
|
||||||
|
e?.also { e -> XposedBridge.log(e) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
when (type) {
|
when (type) {
|
||||||
LoggerType.LOGD -> loggerInLogd()
|
LoggerType.LOGD -> loggerInLogd()
|
||||||
@@ -106,38 +110,46 @@ private fun baseLogger(format: String, type: LoggerType, tag: String, msg: Strin
|
|||||||
/**
|
/**
|
||||||
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - D
|
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - D
|
||||||
* @param msg 日志打印的内容
|
* @param msg 日志打印的内容
|
||||||
|
* @param isShowProcessName 是否显示当前进程名称 - 仅限 [XposedBridge.log]
|
||||||
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
||||||
*/
|
*/
|
||||||
internal fun yLoggerD(msg: String, isDisableLog: Boolean = false) {
|
internal fun yLoggerD(msg: String, isShowProcessName: Boolean = true, isDisableLog: Boolean = false) {
|
||||||
if (YukiHookAPI.Configs.isAllowPrintingLogs) if (isDisableLog.not()) loggerD(msg = msg)
|
if (YukiHookAPI.Configs.isAllowPrintingLogs.not() || isDisableLog) return
|
||||||
|
baseLogger(format = "D", LoggerType.BOTH, YukiHookAPI.Configs.debugTag, msg, isShowProcessName = isShowProcessName)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - I
|
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - I
|
||||||
* @param msg 日志打印的内容
|
* @param msg 日志打印的内容
|
||||||
|
* @param isShowProcessName 是否显示当前进程名称 - 仅限 [XposedBridge.log]
|
||||||
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
||||||
*/
|
*/
|
||||||
internal fun yLoggerI(msg: String, isDisableLog: Boolean = false) {
|
internal fun yLoggerI(msg: String, isShowProcessName: Boolean = true, isDisableLog: Boolean = false) {
|
||||||
if (YukiHookAPI.Configs.isAllowPrintingLogs) if (isDisableLog.not()) loggerI(msg = msg)
|
if (YukiHookAPI.Configs.isAllowPrintingLogs.not() || isDisableLog) return
|
||||||
|
baseLogger(format = "I", LoggerType.BOTH, YukiHookAPI.Configs.debugTag, msg, isShowProcessName = isShowProcessName)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - W
|
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - W
|
||||||
* @param msg 日志打印的内容
|
* @param msg 日志打印的内容
|
||||||
|
* @param isShowProcessName 是否显示当前进程名称 - 仅限 [XposedBridge.log]
|
||||||
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
||||||
*/
|
*/
|
||||||
internal fun yLoggerW(msg: String, isDisableLog: Boolean = false) {
|
internal fun yLoggerW(msg: String, isShowProcessName: Boolean = true, isDisableLog: Boolean = false) {
|
||||||
if (YukiHookAPI.Configs.isAllowPrintingLogs) if (isDisableLog.not()) loggerW(msg = msg)
|
if (YukiHookAPI.Configs.isAllowPrintingLogs.not() || isDisableLog) return
|
||||||
|
baseLogger(format = "W", LoggerType.BOTH, YukiHookAPI.Configs.debugTag, msg, isShowProcessName = isShowProcessName)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - E
|
* [YukiHookAPI] 向控制台和 [XposedBridge] 打印日志 - E
|
||||||
* @param msg 日志打印的内容
|
* @param msg 日志打印的内容
|
||||||
* @param e 可填入异常堆栈信息 - 将自动完整打印到控制台
|
* @param e 可填入异常堆栈信息 - 将自动完整打印到控制台
|
||||||
|
* @param isShowProcessName 是否显示当前进程名称 - 仅限 [XposedBridge.log]
|
||||||
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
* @param isDisableLog 禁止打印日志 - 标识后将什么也不做 - 默认为 false
|
||||||
*/
|
*/
|
||||||
internal fun yLoggerE(msg: String, e: Throwable? = null, isDisableLog: Boolean = false) {
|
internal fun yLoggerE(msg: String, e: Throwable? = null, isShowProcessName: Boolean = true, isDisableLog: Boolean = false) {
|
||||||
if (YukiHookAPI.Configs.isAllowPrintingLogs) if (isDisableLog.not()) loggerE(msg = msg, e = e)
|
if (YukiHookAPI.Configs.isAllowPrintingLogs.not() || isDisableLog) return
|
||||||
|
baseLogger(format = "E", LoggerType.BOTH, YukiHookAPI.Configs.debugTag, msg, e, isShowProcessName)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -61,14 +61,6 @@ import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
|||||||
*/
|
*/
|
||||||
open class PackageParam internal constructor(@PublishedApi internal var wrapper: PackageParamWrapper? = null) {
|
open class PackageParam internal constructor(@PublishedApi internal var wrapper: PackageParamWrapper? = null) {
|
||||||
|
|
||||||
/**
|
|
||||||
* 用于展示的 APP 包名
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
@PublishedApi
|
|
||||||
internal val exhibitName
|
|
||||||
get() = wrapper?.exhibitName ?: "unknown"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook APP 的 [ClassLoader]
|
* 获取当前 Hook APP 的 [ClassLoader]
|
||||||
* @return [ClassLoader]
|
* @return [ClassLoader]
|
||||||
|
@@ -56,12 +56,6 @@ class PackageParamWrapper internal constructor(
|
|||||||
var appResources: YukiResources? = null
|
var appResources: YukiResources? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
/**
|
|
||||||
* 用于展示的 APP 包名
|
|
||||||
* @return [String]
|
|
||||||
*/
|
|
||||||
internal val exhibitName get() = if (type == HookEntryType.ZYGOTE) "android-zygote" else packageName
|
|
||||||
|
|
||||||
override fun toString() =
|
override fun toString() =
|
||||||
"PackageParamWrapper [type] $type [packageName] $exhibitName [processName] $processName [appInfo] $appInfo [appResources] $appResources"
|
"PackageParamWrapper [type] $type [packageName] $packageName [processName] $processName [appInfo] $appInfo [appResources] $appResources"
|
||||||
}
|
}
|
@@ -60,6 +60,7 @@ import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiMemberReplacem
|
|||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector
|
import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector
|
||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus
|
import com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus
|
||||||
import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel
|
import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel
|
||||||
|
import com.highcapable.yukihookapi.hook.xposed.helper.YukiHookAppHelper
|
||||||
import dalvik.system.PathClassLoader
|
import dalvik.system.PathClassLoader
|
||||||
import de.robv.android.xposed.IXposedHookInitPackageResources
|
import de.robv.android.xposed.IXposedHookInitPackageResources
|
||||||
import de.robv.android.xposed.IXposedHookLoadPackage
|
import de.robv.android.xposed.IXposedHookLoadPackage
|
||||||
@@ -88,6 +89,9 @@ object YukiHookBridge {
|
|||||||
/** [YukiHookDataChannel] 是否已经注册 */
|
/** [YukiHookDataChannel] 是否已经注册 */
|
||||||
private var isDataChannelRegister = false
|
private var isDataChannelRegister = false
|
||||||
|
|
||||||
|
/** 当前 Hook 进程是否正处于 [IXposedHookZygoteInit.initZygote] */
|
||||||
|
private var isInitializingZygote = false
|
||||||
|
|
||||||
/** 已在 [PackageParam] 中被装载的 APP 包名 */
|
/** 已在 [PackageParam] 中被装载的 APP 包名 */
|
||||||
private val loadedPackageNames = HashSet<String>()
|
private val loadedPackageNames = HashSet<String>()
|
||||||
|
|
||||||
@@ -128,6 +132,12 @@ object YukiHookBridge {
|
|||||||
*/
|
*/
|
||||||
internal val moduleGeneratedVersion get() = YukiHookBridge_Injector.getModuleGeneratedVersion()
|
internal val moduleGeneratedVersion get() = YukiHookBridge_Injector.getModuleGeneratedVersion()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前宿主正在进行的 Hook 进程标识名称
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
internal val hostProcessName get() = if (isInitializingZygote) "android-zygote" else YukiHookAppHelper.currentPackageName() ?: "unknown"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前系统框架的 [Context]
|
* 获取当前系统框架的 [Context]
|
||||||
* @return [Context] ContextImpl 实例对象
|
* @return [Context] ContextImpl 实例对象
|
||||||
@@ -235,6 +245,7 @@ object YukiHookBridge {
|
|||||||
appInfo: ApplicationInfo? = null,
|
appInfo: ApplicationInfo? = null,
|
||||||
appResources: YukiResources? = null
|
appResources: YukiResources? = null
|
||||||
) = run {
|
) = run {
|
||||||
|
isInitializingZygote = type == HookEntryType.ZYGOTE
|
||||||
if (packageParamWrappers[packageName] == null)
|
if (packageParamWrappers[packageName] == null)
|
||||||
if (type == HookEntryType.ZYGOTE || appClassLoader != null)
|
if (type == HookEntryType.ZYGOTE || appClassLoader != null)
|
||||||
PackageParamWrapper(
|
PackageParamWrapper(
|
||||||
|
Reference in New Issue
Block a user