mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Fix cannot hook system framework bug and added zygote name in log
This commit is contained in:
@@ -99,7 +99,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
||||
* @return [MemberHookCreater.Result]
|
||||
*/
|
||||
inline fun injectMember(priority: Int = PRIORITY_DEFAULT, tag: String = "Default", initiate: MemberHookCreater.() -> Unit) =
|
||||
MemberHookCreater(priority, tag, packageParam.packageName).apply(initiate).apply { preHookMembers.add(this) }.build()
|
||||
MemberHookCreater(priority, tag, packageParam.exhibitName).apply(initiate).apply { preHookMembers.add(this) }.build()
|
||||
|
||||
/**
|
||||
* Hook 执行入口
|
||||
@@ -123,7 +123,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
|
||||
}
|
||||
isDisableCreaterRunHook.not() && hookClass.instance == null ->
|
||||
if (onHookClassNotFoundFailureCallback == null)
|
||||
yLoggerE(msg = "[${packageParam.packageName}] HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
||||
yLoggerE(msg = "[${packageParam.exhibitName}] HookClass [${hookClass.name}] not found", e = hookClass.throwable)
|
||||
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
|
||||
}
|
||||
}.start()
|
||||
|
@@ -226,7 +226,7 @@ class YukiResourcesHookCreater(private val packageParam: PackageParam, @Publishe
|
||||
* @param msg 调试日志内容
|
||||
*/
|
||||
private fun onHookLogMsg(msg: String) {
|
||||
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = "[${packageParam.packageName}] $msg")
|
||||
if (YukiHookAPI.Configs.isDebug) yLoggerI(msg = "[${packageParam.exhibitName}] $msg")
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -55,6 +55,14 @@ import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
||||
*/
|
||||
open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper? = null) {
|
||||
|
||||
/**
|
||||
* 用于展示的 APP 包名
|
||||
* @return [String]
|
||||
*/
|
||||
@PublishedApi
|
||||
internal val exhibitName
|
||||
get() = wrapper?.exhibitName ?: "unknown"
|
||||
|
||||
/**
|
||||
* 获取当前 Hook APP 的 [ClassLoader]
|
||||
* @return [ClassLoader]
|
||||
|
@@ -56,6 +56,12 @@ class PackageParamWrapper(
|
||||
var appResources: YukiResources? = null
|
||||
) {
|
||||
|
||||
/**
|
||||
* 用于展示的 APP 包名
|
||||
* @return [String]
|
||||
*/
|
||||
internal val exhibitName get() = if (type == HookEntryType.ZYGOTE) "android-zygote" else packageName
|
||||
|
||||
override fun toString() =
|
||||
"PackageParamWrapper [type] $type [packageName] $packageName [processName] $processName [appInfo] $appInfo [appResources] $appResources"
|
||||
"PackageParamWrapper [type] $type [packageName] $exhibitName [processName] $processName [appInfo] $appInfo [appResources] $appResources"
|
||||
}
|
@@ -160,8 +160,8 @@ object YukiHookBridge {
|
||||
*/
|
||||
private fun assignWrapper(
|
||||
type: HookEntryType,
|
||||
packageName: String,
|
||||
processName: String = "",
|
||||
packageName: String?,
|
||||
processName: String? = "",
|
||||
appClassLoader: ClassLoader? = null,
|
||||
appInfo: ApplicationInfo? = null,
|
||||
appResources: YukiResources? = null
|
||||
@@ -169,16 +169,16 @@ object YukiHookBridge {
|
||||
if (packageParamWrappers[packageName] == null)
|
||||
PackageParamWrapper(
|
||||
type = type,
|
||||
packageName = packageName,
|
||||
processName = processName,
|
||||
packageName = packageName ?: SYSTEM_FRAMEWORK_NAME,
|
||||
processName = processName ?: SYSTEM_FRAMEWORK_NAME,
|
||||
appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER,
|
||||
appInfo = appInfo,
|
||||
appResources = appResources
|
||||
).also { packageParamWrappers[packageName] = it }
|
||||
).also { packageParamWrappers[packageName ?: SYSTEM_FRAMEWORK_NAME] = it }
|
||||
else packageParamWrappers[packageName]?.also {
|
||||
it.type = type
|
||||
if (packageName.isNotBlank()) it.packageName = packageName
|
||||
if (processName.isNotBlank()) it.processName = processName
|
||||
if (packageName?.isNotBlank() == true) it.packageName = packageName
|
||||
if (processName?.isNotBlank() == true) it.processName = processName
|
||||
if (appClassLoader != null) it.appClassLoader = appClassLoader
|
||||
if (appInfo != null) it.appInfo = appInfo
|
||||
if (appResources != null) it.appResources = appResources
|
||||
@@ -230,22 +230,15 @@ object YukiHookBridge {
|
||||
resparam: XC_InitPackageResources.InitPackageResourcesParam? = null
|
||||
) {
|
||||
if (isMiuiCatcherPatch(packageName = lpparam?.packageName ?: resparam?.packageName).not()) when {
|
||||
isZygoteLoaded -> {
|
||||
if (isPackageLoaded(SYSTEM_FRAMEWORK_NAME, HookEntryType.ZYGOTE).not())
|
||||
assignWrapper(HookEntryType.ZYGOTE, SYSTEM_FRAMEWORK_NAME, SYSTEM_FRAMEWORK_NAME)
|
||||
isZygoteLoaded -> assignWrapper(HookEntryType.ZYGOTE, SYSTEM_FRAMEWORK_NAME, SYSTEM_FRAMEWORK_NAME)
|
||||
lpparam != null ->
|
||||
if (isPackageLoaded(lpparam.packageName, HookEntryType.PACKAGE).not())
|
||||
assignWrapper(HookEntryType.PACKAGE, lpparam.packageName, lpparam.processName, lpparam.classLoader, lpparam.appInfo)
|
||||
else null
|
||||
}
|
||||
lpparam != null -> {
|
||||
if (lpparam.packageName != null && lpparam.processName != null && lpparam.appInfo != null && lpparam.classLoader != null &&
|
||||
isPackageLoaded(lpparam.packageName, HookEntryType.PACKAGE).not()
|
||||
) assignWrapper(HookEntryType.PACKAGE, lpparam.packageName, lpparam.processName, lpparam.classLoader, lpparam.appInfo)
|
||||
else null
|
||||
}
|
||||
resparam != null -> {
|
||||
resparam != null ->
|
||||
if (isPackageLoaded(resparam.packageName, HookEntryType.RESOURCES).not())
|
||||
assignWrapper(HookEntryType.RESOURCES, resparam.packageName, appResources = YukiResources.createFromXResources(resparam.res))
|
||||
else null
|
||||
}
|
||||
else -> null
|
||||
}?.let { YukiHookAPI.onXposedLoaded(it) }
|
||||
}
|
||||
|
Reference in New Issue
Block a user