From 1d22f634e1cbfe3e50c26b5cb5c2ceda09b026a1 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Tue, 27 Sep 2022 00:34:24 +0800 Subject: [PATCH] Modify remove stub-jar and add stub-project and change the compiled class --- settings.gradle | 1 + .../YukiHookXposedProcessor.kt | 18 ++++--- .../bean/GenerateData.kt | 2 - .../factory/CodeSourceFileFactory.kt | 18 ++++--- yukihookapi-stub/.gitignore | 1 + yukihookapi-stub/build.gradle | 9 ++++ .../application/ModuleApplication_Impl.kt | 43 +++++++++++++++++ .../hook/xposed/bridge/YukiHookBridge_Impl.kt | 44 ++++++++++++++++++ yukihookapi/build.gradle | 1 + yukihookapi/libs/bridge-injector.jar | Bin 703 -> 0 bytes yukihookapi/libs/module-injector.jar | Bin 703 -> 0 bytes .../highcapable/yukihookapi/YukiHookAPI.kt | 2 +- .../xposed/application/ModuleApplication.kt | 7 +-- .../hook/xposed/bridge/YukiHookBridge.kt | 11 ++++- 14 files changed, 127 insertions(+), 30 deletions(-) create mode 100644 yukihookapi-stub/.gitignore create mode 100644 yukihookapi-stub/build.gradle create mode 100644 yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication_Impl.kt create mode 100644 yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge_Impl.kt delete mode 100644 yukihookapi/libs/bridge-injector.jar delete mode 100644 yukihookapi/libs/module-injector.jar diff --git a/settings.gradle b/settings.gradle index 12f949e9..dbf796cd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,3 +18,4 @@ include ':demo-app' include ':demo-module' include ':yukihookapi' include ':yukihookapi-ksp-xposed' +include ':yukihookapi-stub' 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 7387e4f8..55c2c17b 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 @@ -231,19 +231,17 @@ class YukiHookXposedProcessor : SymbolProcessorProvider { msg = "You set the customize module package name to \"${data.customMPackageName}\", " + "please check for yourself if it is correct" ) - val mdAppInjectPackageName = "com.highcapable.yukihookapi.hook.xposed.application.inject" - val ykBridgeInjectPackageName = "com.highcapable.yukihookapi.hook.xposed.bridge.inject" - /** 插入 ModuleApplication_Injector 代码 */ + /** 插入 ModuleApplication_Impl 代码 */ createCodeFile( - fileName = "ModuleApplication_Injector", - packageName = mdAppInjectPackageName, - content = data.apply { injectPackageName = mdAppInjectPackageName }.sources()["ModuleApplication_Injector"] + fileName = "ModuleApplication_Impl", + packageName = "com.highcapable.yukihookapi.hook.xposed.application", + content = data.sources()["ModuleApplication_Impl"] ) - /** 插入 YukiHookBridge_Injector 代码 */ + /** 插入 YukiHookBridge_Impl 代码 */ createCodeFile( - fileName = "YukiHookBridge_Injector", - packageName = ykBridgeInjectPackageName, - content = data.apply { injectPackageName = ykBridgeInjectPackageName }.sources()["YukiHookBridge_Injector"] + fileName = "YukiHookBridge_Impl", + packageName = "com.highcapable.yukihookapi.hook.xposed.bridge", + content = data.sources()["YukiHookBridge_Impl"] ) /** 插入 xposed_init 代码 */ createCodeFile( diff --git a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/bean/GenerateData.kt b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/bean/GenerateData.kt index 717b781b..87399332 100644 --- a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/bean/GenerateData.kt +++ b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/bean/GenerateData.kt @@ -30,7 +30,6 @@ package com.highcapable.yukihookapi_ksp_xposed.bean /** * 生成的模板数据实例 * @param entryPackageName 入口类包名 - * @param injectPackageName 注入类包名 * @param modulePackageName 模块包名 (命名空间) * @param customMPackageName 自定义模块包名 * @param entryClassName 入口类名 @@ -39,7 +38,6 @@ package com.highcapable.yukihookapi_ksp_xposed.bean */ data class GenerateData( var entryPackageName: String = "", - var injectPackageName: String = "", var modulePackageName: String = "", var customMPackageName: String = "", var entryClassName: String = "", diff --git a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/factory/CodeSourceFileFactory.kt b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/factory/CodeSourceFileFactory.kt index 0b332c9a..14b3f2b5 100644 --- a/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/factory/CodeSourceFileFactory.kt +++ b/yukihookapi-ksp-xposed/src/api/kotlin/com/highcapable/yukihookapi_ksp_xposed/factory/CodeSourceFileFactory.kt @@ -56,30 +56,28 @@ private fun createCommentContent(entryClassName: String = "", currrentClassTag: * @return [Map]<[String],[String]> */ fun GenerateData.sources() = mapOf( - "ModuleApplication_Injector" to ("@file:Suppress(\"ClassName\")\n" + + "ModuleApplication_Impl" to ("@file:Suppress(\"ClassName\")\n" + "\n" + - "package $injectPackageName\n" + + "package com.highcapable.yukihookapi.hook.xposed.application\n" + "\n" + "import $entryPackageName.$entryClassName\n" + "\n" + createCommentContent(entryClassName, currrentClassTag = "ModuleApplication") + - "object ModuleApplication_Injector {\n" + + "object ModuleApplication_Impl {\n" + "\n" + - " @JvmStatic\n" + - " fun callApiInit() = try {\n" + + " fun callHookEntryInit() = try {\n" + " $entryClassName().onInit()\n" + " } catch (_: Throwable) {\n" + " }\n" + "}"), - "YukiHookBridge_Injector" to ("@file:Suppress(\"ClassName\")\n" + + "YukiHookBridge_Impl" to ("@file:Suppress(\"ClassName\")\n" + "\n" + - "package $injectPackageName\n" + + "package com.highcapable.yukihookapi.hook.xposed.bridge\n" + "\n" + createCommentContent(currrentClassTag = "YukiHookBridge") + - "object YukiHookBridge_Injector {\n" + + "object YukiHookBridge_Impl {\n" + "\n" + - " @JvmStatic\n" + - " fun getModuleGeneratedVersion() = \"${System.currentTimeMillis()}\"\n" + + " val compiledTimestamp get() = ${System.currentTimeMillis()}\n" + "}"), "xposed_init" to ("@file:Suppress(\"ClassName\")\n" + "\n" + diff --git a/yukihookapi-stub/.gitignore b/yukihookapi-stub/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/yukihookapi-stub/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/yukihookapi-stub/build.gradle b/yukihookapi-stub/build.gradle new file mode 100644 index 00000000..9029f9c5 --- /dev/null +++ b/yukihookapi-stub/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'java-library' + id 'org.jetbrains.kotlin.jvm' +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} \ No newline at end of file diff --git a/yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication_Impl.kt b/yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication_Impl.kt new file mode 100644 index 00000000..f963e02d --- /dev/null +++ b/yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/application/ModuleApplication_Impl.kt @@ -0,0 +1,43 @@ +/* + * YukiHookAPI - An efficient Kotlin version of the Xposed Hook API. + * Copyright (C) 2019-2022 HighCapable + * https://github.com/fankes/YukiHookAPI + * + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * This file is Created by fankes on 2022/9/26. + */ +@file:Suppress("ClassName") + +package com.highcapable.yukihookapi.hook.xposed.application + +/** + * ModuleApplication 注入 Stub + */ +object ModuleApplication_Impl { + + /** + * 调用 Hook 入口类的 onInit 方法 + * + * 方法内容将在每次编译时自动生成 + */ + fun callHookEntryInit(): Unit = error("Stub!") +} \ No newline at end of file diff --git a/yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge_Impl.kt b/yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge_Impl.kt new file mode 100644 index 00000000..6b0d6cb2 --- /dev/null +++ b/yukihookapi-stub/src/main/java/com/highcapable/yukihookapi/hook/xposed/bridge/YukiHookBridge_Impl.kt @@ -0,0 +1,44 @@ +/* + * YukiHookAPI - An efficient Kotlin version of the Xposed Hook API. + * Copyright (C) 2019-2022 HighCapable + * https://github.com/fankes/YukiHookAPI + * + * MIT License + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * This file is Created by fankes on 2022/9/26. + */ +@file:Suppress("ClassName") + +package com.highcapable.yukihookapi.hook.xposed.bridge + +/** + * YukiHookBridge 注入 Stub + */ +object YukiHookBridge_Impl { + + /** + * 获取项目编译完成的时间戳 (当前本地时间) + * + * 返回值将在每次编译时自动生成 + * @return [Long] + */ + val compiledTimestamp: Long get() = error("Stub!") +} \ No newline at end of file diff --git a/yukihookapi/build.gradle b/yukihookapi/build.gradle index 0072ee30..7f41c149 100644 --- a/yukihookapi/build.gradle +++ b/yukihookapi/build.gradle @@ -46,6 +46,7 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { dependencies { // Used 82 API Version compileOnly 'de.robv.android.xposed:api:82' + compileOnly project(':yukihookapi-stub') compileOnly fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.annotation:annotation:1.4.0' } diff --git a/yukihookapi/libs/bridge-injector.jar b/yukihookapi/libs/bridge-injector.jar deleted file mode 100644 index 1a7a8383b032c31fe25577e4a14238454cf51e45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/yukihookapi/libs/module-injector.jar b/yukihookapi/libs/module-injector.jar deleted file mode 100644 index eafaf3d1b63a1b1a20051663c688d9d83ebae567..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmWIWW@Zs#-~d7f21Ou-00SllhG+&|hUENQ{fx}?jO4_E#H5^5{mRnp%#8f}?8Jgh zeGsi*QIKDpnxdarP>_?EoLG{XpQoRhmzA1aqVJoZQks+Mh>(c)1WV)>=_ThR78i$x z@G`K&>;uuI72FJrEFcz`sL0`DU>9Kq@wYT?4LtA7h zp~BU&R^jvuk;hgqUhLYuW_MzJnEJv6@BRi}JR^2xHz{=V;f-yb)4FMobL1K-9> z<#ti-t2SY|OE#n}OiP?Q!FtlZo<7c(Rg1k(%vrHdVT$a_?(T|9!VgW~S4OS0I`uSe zdi$j#_mkA5PH8^8R(Q3A_i4h5PX|(NB->1LUV6-C!Wo0vtXW#Wde|G)W92-b8o%ss zk=|H*wcqw)l*+r?o=&a4PJ!pYL^bBTmgOvSKe|x++>)7l|CT@e*J1xbNaqP>^s{p| z@Az+ozHu*7@=IUG(KCO-TbIK8;}+%|=Knu&IHhhpn0mgWCF*Wu$6Spm{}$YQ@rWVv zulKVh4r#T$tg?n@mssvLXSY?&j84`QysVL>Q!8nrpQ)Gdb9qI$^_h+F6Lzg$_WZ=2 zmmPJb1`&R{!t59WyxBSSM!Q6KF)}cKVmZK@kx7IZkphtAq8SuG!4C#o8bQ