mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-05 18:25:28 +08:00
Fix a possible bug when Xposed loaded
This commit is contained in:
@@ -45,7 +45,6 @@ import com.highcapable.yukihookapi.hook.store.MemberCacheStore
|
|||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.YukiHookXposedBridge
|
import com.highcapable.yukihookapi.hook.xposed.bridge.YukiHookXposedBridge
|
||||||
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
import com.highcapable.yukihookapi.hook.xposed.prefs.YukiHookModulePrefs
|
||||||
import de.robv.android.xposed.XposedBridge
|
import de.robv.android.xposed.XposedBridge
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
import java.lang.reflect.Field
|
import java.lang.reflect.Field
|
||||||
import java.lang.reflect.Member
|
import java.lang.reflect.Member
|
||||||
@@ -166,19 +165,10 @@ object YukiHookAPI {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 装载 Xposed API 回调核心实现方法
|
* 装载 Xposed API 回调核心实现方法
|
||||||
* @param lpparam Xposed [XC_LoadPackage.LoadPackageParam]
|
* @param wrapper 代理包装 [PackageParamWrapper]
|
||||||
*/
|
*/
|
||||||
internal fun onXposedLoaded(lpparam: XC_LoadPackage.LoadPackageParam) =
|
internal fun onXposedLoaded(wrapper: PackageParamWrapper) =
|
||||||
YukiHookXposedBridge.packageParamCallback?.invoke(
|
YukiHookXposedBridge.packageParamCallback?.invoke(PackageParam(wrapper)).apply { printSplashLog() }
|
||||||
PackageParam(
|
|
||||||
PackageParamWrapper(
|
|
||||||
packageName = lpparam.packageName,
|
|
||||||
processName = lpparam.processName,
|
|
||||||
appClassLoader = lpparam.classLoader,
|
|
||||||
appInfo = lpparam.appInfo
|
|
||||||
)
|
|
||||||
).apply { printSplashLog() }
|
|
||||||
)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 配置 [YukiHookAPI] 相关参数
|
* 配置 [YukiHookAPI] 相关参数
|
||||||
@@ -269,9 +259,6 @@ object YukiHookAPI {
|
|||||||
else printNoXposedEnvLog()
|
else printNoXposedEnvLog()
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 输出找不到 [XposedBridge] 的错误日志 */
|
|
||||||
private fun printNoXposedEnvLog() = yLoggerE(msg = "Could not found XposedBridge in current space! Aborted")
|
|
||||||
|
|
||||||
/** 输出欢迎信息调试日志 */
|
/** 输出欢迎信息调试日志 */
|
||||||
private fun printSplashLog() {
|
private fun printSplashLog() {
|
||||||
if (Configs.isDebug.not() || isShowSplashLogOnceTime.not() || YukiHookXposedBridge.isModulePackageXposedEnv) return
|
if (Configs.isDebug.not() || isShowSplashLogOnceTime.not() || YukiHookXposedBridge.isModulePackageXposedEnv) return
|
||||||
@@ -279,12 +266,14 @@ object YukiHookAPI {
|
|||||||
yLoggerI(msg = "Welcome to YukiHookAPI $API_VERSION_NAME($API_VERSION_CODE)! Using $executorName API $executorVersion")
|
yLoggerI(msg = "Welcome to YukiHookAPI $API_VERSION_NAME($API_VERSION_CODE)! Using $executorName API $executorVersion")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 输出找不到 [XposedBridge] 的错误日志 */
|
||||||
|
private fun printNoXposedEnvLog() = yLoggerE(msg = "Could not found XposedBridge in current space! Aborted")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 baseContext 创建 Hook 入口类
|
* 通过 baseContext 创建 Hook 入口类
|
||||||
* @return [PackageParam]
|
* @return [PackageParam]
|
||||||
*/
|
*/
|
||||||
private val Context.packagePararm
|
private val Context.packagePararm get() = PackageParam(PackageParamWrapper(packageName, processName, classLoader, applicationInfo))
|
||||||
get() = PackageParam(PackageParamWrapper(packageName, processName, classLoader, applicationInfo))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否存在 [XposedBridge]
|
* 是否存在 [XposedBridge]
|
||||||
|
@@ -32,6 +32,7 @@ package com.highcapable.yukihookapi.hook.xposed.bridge
|
|||||||
import com.highcapable.yukihookapi.YukiHookAPI
|
import com.highcapable.yukihookapi.YukiHookAPI
|
||||||
import com.highcapable.yukihookapi.annotation.YukiGenerateApi
|
import com.highcapable.yukihookapi.annotation.YukiGenerateApi
|
||||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||||
|
import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper
|
||||||
import de.robv.android.xposed.IXposedHookLoadPackage
|
import de.robv.android.xposed.IXposedHookLoadPackage
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
|
|
||||||
@@ -94,5 +95,10 @@ object YukiHookXposedBridge {
|
|||||||
* @param lpparam Xposed [XC_LoadPackage.LoadPackageParam]
|
* @param lpparam Xposed [XC_LoadPackage.LoadPackageParam]
|
||||||
*/
|
*/
|
||||||
@YukiGenerateApi
|
@YukiGenerateApi
|
||||||
fun callXposedLoaded(lpparam: XC_LoadPackage.LoadPackageParam) = YukiHookAPI.onXposedLoaded(lpparam)
|
fun callXposedLoaded(lpparam: XC_LoadPackage.LoadPackageParam) {
|
||||||
|
/** 判断基础 API 可能为空的情况 */
|
||||||
|
if (lpparam.packageName == null || lpparam.processName == null || lpparam.appInfo == null || lpparam.classLoader == null) return
|
||||||
|
/** 回调 Xposed API 装载 */
|
||||||
|
YukiHookAPI.onXposedLoaded(PackageParamWrapper(lpparam.packageName, lpparam.processName, lpparam.classLoader, lpparam.appInfo))
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user