From 73204588c047c92b7dff1fb22785c74d0d2e2328 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Wed, 4 May 2022 09:56:07 +0800 Subject: [PATCH] Fix YukiHookModuleStatus not found error and added some type in android --- docs/guide/example.md | 20 ++----- .../sources/CodeSourceFileTemplate.kt | 55 ++++++++++--------- .../hook/type/android/ComponentTypeFactory.kt | 12 ++++ 3 files changed, 46 insertions(+), 41 deletions(-) diff --git a/docs/guide/example.md b/docs/guide/example.md index 8bb87792..94c9a94f 100644 --- a/docs/guide/example.md +++ b/docs/guide/example.md @@ -219,13 +219,11 @@ loadZygote { } ``` -这样就实现了上述的 Hook 功能。 - ### Hook 系统框架 在 `YukiHookAPI` 中,Hook 系统框架的实现非常简单。 -假设我们要全局 Hook 一个系统 `Activity` 的 `onCreate` 事件 +假设,你要得到 `ApplicationInfo` 与 `PackageInfo` 并对它们进行一些操作。 在 `encase` 方法体中添加代码。 @@ -233,17 +231,11 @@ loadZygote { ```kotlin loadSystem { - ActivityClass.hook { - injectMember { - method { - name = "onCreate" - param(BundleClass) - returnType = UnitType - } - afterHook { - // Your code here. - } - } + ApplicationInfoClass.hook { + // Your code here. + } + PackageInfoClass.hook { + // Your code here. } } ``` diff --git a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/sources/CodeSourceFileTemplate.kt b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/sources/CodeSourceFileTemplate.kt index f6c0105e..1f8d6650 100644 --- a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/sources/CodeSourceFileTemplate.kt +++ b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/sources/CodeSourceFileTemplate.kt @@ -184,38 +184,39 @@ object CodeSourceFileTemplate { " YukiHookBridge.callXposedLoaded(isZygoteLoaded, lpparam, resparam)\n" + " }\n" + "\n" + - " private fun hookModuleAppStatus(lpparam: XC_LoadPackage.LoadPackageParam? = this.lpparam, isHookResourcesStatus: Boolean = false) {\n" + - " lpparam?.let { this.lpparam = it }\n" + - " if (isHookResourcesStatus.not()) {\n" + - " XposedHelpers.findAndHookMethod(\n" + + " private fun hookModuleAppStatus(lpparam: XC_LoadPackage.LoadPackageParam? = this.lpparam, isHookResourcesStatus: Boolean = false) =\n" + + " runCatching {\n" + + " lpparam?.let { this.lpparam = it }\n" + + " if (isHookResourcesStatus.not()) {\n" + + " XposedHelpers.findAndHookMethod(\n" + + " YukiHookModuleStatus::class.java.name,\n" + + " this.lpparam?.classLoader,\n" + + " \"$IS_ACTIVE_METHOD_NAME\",\n" + + " object : XC_MethodReplacement() {\n" + + " override fun replaceHookedMethod(param: MethodHookParam?) = true\n" + + " })\n" + + " XposedHelpers.findAndHookMethod(\n" + + " YukiHookModuleStatus::class.java.name,\n" + + " this.lpparam?.classLoader,\n" + + " \"$GET_XPOSED_TAG_METHOD_NAME\",\n" + + " object : XC_MethodReplacement() {\n" + + " override fun replaceHookedMethod(param: MethodHookParam?) = YukiHookBridge.executorName\n" + + " })\n" + + " XposedHelpers.findAndHookMethod(\n" + + " YukiHookModuleStatus::class.java.name,\n" + + " this.lpparam?.classLoader,\n" + + " \"$GET_XPOSED_VERSION_METHOD_NAME\",\n" + + " object : XC_MethodReplacement() {\n" + + " override fun replaceHookedMethod(param: MethodHookParam?) = YukiHookBridge.executorVersion\n" + + " })\n" + + " } else XposedHelpers.findAndHookMethod(\n" + " YukiHookModuleStatus::class.java.name,\n" + " this.lpparam?.classLoader,\n" + - " \"$IS_ACTIVE_METHOD_NAME\",\n" + + " \"$HAS_RESOURCES_HOOK_METHOD_NAME\",\n" + " object : XC_MethodReplacement() {\n" + " override fun replaceHookedMethod(param: MethodHookParam?) = true\n" + " })\n" + - " XposedHelpers.findAndHookMethod(\n" + - " YukiHookModuleStatus::class.java.name,\n" + - " this.lpparam?.classLoader,\n" + - " \"$GET_XPOSED_TAG_METHOD_NAME\",\n" + - " object : XC_MethodReplacement() {\n" + - " override fun replaceHookedMethod(param: MethodHookParam?) = YukiHookBridge.executorName\n" + - " })\n" + - " XposedHelpers.findAndHookMethod(\n" + - " YukiHookModuleStatus::class.java.name,\n" + - " this.lpparam?.classLoader,\n" + - " \"$GET_XPOSED_VERSION_METHOD_NAME\",\n" + - " object : XC_MethodReplacement() {\n" + - " override fun replaceHookedMethod(param: MethodHookParam?) = YukiHookBridge.executorVersion\n" + - " })\n" + - " } else XposedHelpers.findAndHookMethod(\n" + - " YukiHookModuleStatus::class.java.name,\n" + - " this.lpparam?.classLoader,\n" + - " \"$HAS_RESOURCES_HOOK_METHOD_NAME\",\n" + - " object : XC_MethodReplacement() {\n" + - " override fun replaceHookedMethod(param: MethodHookParam?) = true\n" + - " })\n" + - " }\n" + + " }\n" + "\n" + " @YukiGenerateApi\n" + " fun callInitZygote(sparam: IXposedHookZygoteInit.StartupParam?) {\n" + diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt index f3cbd5c1..63b1fc49 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/android/ComponentTypeFactory.kt @@ -91,6 +91,18 @@ val ContextWrapperClass get() = ContextWrapper::class.java */ val ApplicationClass get() = Application::class.java +/** + * 获得 [ApplicationInfo] 类型 + * @return [Class] + */ +val ApplicationInfoClass get() = ApplicationInfo::class.java + +/** + * 获得 [PackageInfo] 类型 + * @return [Class] + */ +val PackageInfoClass get() = PackageInfo::class.java + /** * 获得 [ApplicationPackageManager] 类型 * @return [Class]