mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Added Module Generated Version
This commit is contained in:
@@ -217,14 +217,25 @@ class YukiHookXposedProcessor : SymbolProcessorProvider {
|
|||||||
packageName.split(".hook")[0]
|
packageName.split(".hook")[0]
|
||||||
else error("Cannot identify your Module App's package name, please manually configure the package name")
|
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 代码 */
|
/** 插入 ModuleApplication_Injector 代码 */
|
||||||
codeGenerator.createNewFile(
|
codeGenerator.createNewFile(
|
||||||
dependencies = Dependencies.ALL_FILES,
|
dependencies = Dependencies.ALL_FILES,
|
||||||
packageName = injectPackageName,
|
packageName = mdAppInjectPackageName,
|
||||||
fileName = "ModuleApplication_Injector"
|
fileName = "ModuleApplication_Injector"
|
||||||
).apply {
|
).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()
|
flush()
|
||||||
close()
|
close()
|
||||||
}
|
}
|
||||||
|
@@ -80,6 +80,24 @@ object CodeSourceFileTemplate {
|
|||||||
" }\n" +
|
" }\n" +
|
||||||
"}").toByteArray()
|
"}").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 注入文件
|
* 获得 xposed_init 注入文件
|
||||||
* @param packageName 包名
|
* @param packageName 包名
|
||||||
|
BIN
yukihookapi/libs/bridge-injector.jar
Normal file
BIN
yukihookapi/libs/bridge-injector.jar
Normal file
Binary file not shown.
@@ -25,7 +25,7 @@
|
|||||||
*
|
*
|
||||||
* This file is Created by fankes on 2022/4/3.
|
* This file is Created by fankes on 2022/4/3.
|
||||||
*/
|
*/
|
||||||
@file:Suppress("unused")
|
@file:Suppress("unused", "StaticFieldLeak")
|
||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.xposed.bridge
|
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.YukiHookModuleStatus
|
||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources
|
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources
|
||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources
|
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.*
|
||||||
import de.robv.android.xposed.callbacks.XC_InitPackageResources
|
import de.robv.android.xposed.callbacks.XC_InitPackageResources
|
||||||
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
import de.robv.android.xposed.callbacks.XC_LoadPackage
|
||||||
@@ -72,9 +72,6 @@ object YukiHookBridge {
|
|||||||
/** 当前 [PackageParamWrapper] 实例数组 */
|
/** 当前 [PackageParamWrapper] 实例数组 */
|
||||||
private var packageParamWrappers = HashMap<String, PackageParamWrapper>()
|
private var packageParamWrappers = HashMap<String, PackageParamWrapper>()
|
||||||
|
|
||||||
/** 已在 [YukiHookDataChannel] 注册的包名数组 */
|
|
||||||
private val dataChannelRegisters = HashSet<String>()
|
|
||||||
|
|
||||||
/** 当前 [PackageParam] 方法体回调 */
|
/** 当前 [PackageParam] 方法体回调 */
|
||||||
internal var packageParamCallback: (PackageParam.() -> Unit)? = null
|
internal var packageParamCallback: (PackageParam.() -> Unit)? = null
|
||||||
|
|
||||||
@@ -90,6 +87,12 @@ object YukiHookBridge {
|
|||||||
*/
|
*/
|
||||||
internal val dynamicModuleAppResources get() = runCatching { YukiModuleResources.createInstance(moduleAppFilePath) }.getOrNull()
|
internal val dynamicModuleAppResources get() = runCatching { YukiModuleResources.createInstance(moduleAppFilePath) }.getOrNull()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动生成的 Xposed 模块构建版本号
|
||||||
|
* @return [String]
|
||||||
|
*/
|
||||||
|
internal val moduleGeneratedVersion get() = YukiHookBridge_Injector.getModuleGeneratedVersion()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模块是否装载了 Xposed 回调方法
|
* 模块是否装载了 Xposed 回调方法
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user