From 017ba82c3e427caa343fab5393c313b3789e70bf Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Thu, 19 May 2022 03:41:54 +0800 Subject: [PATCH] Added Module Generated Version --- .../YukiHookXposedProcessor.kt | 17 ++++++++++++++--- .../sources/CodeSourceFileTemplate.kt | 18 ++++++++++++++++++ yukihookapi/libs/bridge-injector.jar | Bin 0 -> 703 bytes .../hook/xposed/bridge/YukiHookBridge.kt | 13 ++++++++----- 4 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 yukihookapi/libs/bridge-injector.jar diff --git a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/YukiHookXposedProcessor.kt b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/YukiHookXposedProcessor.kt index 0362d072..6c4fe907 100644 --- a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/YukiHookXposedProcessor.kt +++ b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/YukiHookXposedProcessor.kt @@ -217,14 +217,25 @@ class YukiHookXposedProcessor : SymbolProcessorProvider { packageName.split(".hook")[0] else error("Cannot identify your Module App's package name, please manually configure the package name") } - val injectPackageName = "com.highcapable.yukihookapi.hook.xposed.application.inject" + val mdAppInjectPackageName = "com.highcapable.yukihookapi.hook.xposed.application.inject" + val ykBridgeInjectPackageName = "com.highcapable.yukihookapi.hook.xposed.bridge.inject" /** 插入 ModuleApplication_Injector 代码 */ codeGenerator.createNewFile( dependencies = Dependencies.ALL_FILES, - packageName = injectPackageName, + packageName = mdAppInjectPackageName, fileName = "ModuleApplication_Injector" ).apply { - write(CodeSourceFileTemplate.getModuleApplicationInjectorFileByteArray(injectPackageName, packageName, entryClassName)) + write(CodeSourceFileTemplate.getModuleApplicationInjectorFileByteArray(mdAppInjectPackageName, packageName, entryClassName)) + flush() + close() + } + /** 插入 YukiHookBridge_Injector 代码 */ + codeGenerator.createNewFile( + dependencies = Dependencies.ALL_FILES, + packageName = ykBridgeInjectPackageName, + fileName = "YukiHookBridge_Injector" + ).apply { + write(CodeSourceFileTemplate.getYukiHookBridgeInjectorFileByteArray(ykBridgeInjectPackageName, entryClassName)) flush() close() } 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 f7fe62af..aff173f3 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 @@ -80,6 +80,24 @@ object CodeSourceFileTemplate { " }\n" + "}").toByteArray() + /** + * 获得 YukiHookBridge_Injector 注入文件 + * @param packageName 包名 + * @param entryClassName 入口类名 + * @return [ByteArray] + */ + fun getYukiHookBridgeInjectorFileByteArray(packageName: String, entryClassName: String) = + ("@file:Suppress(\"ClassName\")\n" + + "\n" + + "package $packageName\n" + + "\n" + + getCommentContent(entryClassName, currrentClassTag = "YukiHookBridge") + + "object YukiHookBridge_Injector {\n" + + "\n" + + " @JvmStatic\n" + + " fun getModuleGeneratedVersion() = \"${System.currentTimeMillis()}\"\n" + + "}").toByteArray() + /** * 获得 xposed_init 注入文件 * @param packageName 包名 diff --git a/yukihookapi/libs/bridge-injector.jar b/yukihookapi/libs/bridge-injector.jar new file mode 100644 index 0000000000000000000000000000000000000000..1a7a8383b032c31fe25577e4a14238454cf51e45 GIT binary patch literal 703 zcmWIWW@Zs#-~d7f21Ou-04F8}hF}I=hUENQ{fx}?jO4_E#H5^5{mRnp%#8f}?8Jgh zeGsi*QIKDpnxdanl$nyAs-Kycm6}|l9|=_D0hDzDi^h9`Me~dFl5-M^i$gui!g)uTN>8}p7vsP6j*c8I@`qXnEMfL8&$bE&F)8=A8`vY zyNMM|x_LLzxblt8?8wgfPc;`TD7W{T6Ui)iWOnh2MXPtO-aWJb{B&~$_Z8767S1~E z#%Ri|ne%Mp)Z=E3?_5}%<_ayDtvg$xSkKlkAg{aO{xRWp_wQ#UvzOkQrYC({M@TKM zL()_rxGC@URADQDe+N<*p1iQULWM1;FG6EQq80bkDb-gxTb>tdH7S;hzJ0wad##Q!g4i-hIAGd2hv;^%Vz{m+eUZoS~KC5Rkp?mh-n0FJ`dXyiP)zS;vGvX$ZX0^L_Wop_6m}jGZdMQ8{0lDs*Dex zk-k^y>iT8RPwaW!@u$Eb!ZYUjeue;Vc8+A%FOQ-a85lsZ9pKH#B*KhH3CME63<{v= e0D~=!AZh^8MSwRe8^~%#AY2HfIe?C4U;qG@!}baQ literal 0 HcmV?d00001 diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt index 8c2edd27..69bf15b8 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge.kt @@ -25,7 +25,7 @@ * * This file is Created by fankes on 2022/4/3. */ -@file:Suppress("unused") +@file:Suppress("unused", "StaticFieldLeak") package com.highcapable.yukihookapi.hook.xposed.bridge @@ -41,7 +41,7 @@ import com.highcapable.yukihookapi.hook.param.wrapper.PackageParamWrapper import com.highcapable.yukihookapi.hook.xposed.YukiHookModuleStatus import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources -import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel +import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector import de.robv.android.xposed.* import de.robv.android.xposed.callbacks.XC_InitPackageResources import de.robv.android.xposed.callbacks.XC_LoadPackage @@ -72,9 +72,6 @@ object YukiHookBridge { /** 当前 [PackageParamWrapper] 实例数组 */ private var packageParamWrappers = HashMap() - /** 已在 [YukiHookDataChannel] 注册的包名数组 */ - private val dataChannelRegisters = HashSet() - /** 当前 [PackageParam] 方法体回调 */ internal var packageParamCallback: (PackageParam.() -> Unit)? = null @@ -90,6 +87,12 @@ object YukiHookBridge { */ internal val dynamicModuleAppResources get() = runCatching { YukiModuleResources.createInstance(moduleAppFilePath) }.getOrNull() + /** + * 自动生成的 Xposed 模块构建版本号 + * @return [String] + */ + internal val moduleGeneratedVersion get() = YukiHookBridge_Injector.getModuleGeneratedVersion() + /** * 模块是否装载了 Xposed 回调方法 *