From 6254c451cf7478ac13b4763cc18f91cd495c3a3f Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sat, 31 Dec 2022 23:25:14 +0800 Subject: [PATCH] Modify support hook entry class "OBJECT" kind and add hook entry class kind checking in GenerateData, CodeSourceFileFactory, YukiHookXposedProcessor --- .../yukihookapi_ksp_xposed/YukiHookXposedProcessor.kt | 6 ++++++ .../highcapable/yukihookapi_ksp_xposed/bean/GenerateData.kt | 2 ++ .../yukihookapi_ksp_xposed/factory/CodeSourceFileFactory.kt | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) 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 4a873776..7437a070 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 @@ -31,6 +31,7 @@ package com.highcapable.yukihookapi_ksp_xposed import com.google.auto.service.AutoService import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.ClassKind import com.google.devtools.ksp.symbol.FileLocation import com.google.devtools.ksp.symbol.KSAnnotated import com.google.devtools.ksp.symbol.KSClassDeclaration @@ -140,6 +141,11 @@ class YukiHookXposedProcessor : SymbolProcessorProvider { data.entryPackageName = it.packageName.asString() data.entryClassName = it.simpleName.asString() data.xInitClassName = xInitPatchName + data.isEntryClassKindOfObject = when (it.classKind) { + ClassKind.CLASS -> false + ClassKind.OBJECT -> true + else -> problem(msg = "Invalid HookEntryClass \"${it.simpleName.asString()}\" kind \"${it.classKind}\"") + } generateAssetsFile(codePath = (it.location as? FileLocation?)?.filePath ?: "", sourcePath = sourcePath, data) } it.superTypes.any { type -> type.element.toString() == "YukiHookXposedInitProxy" } -> 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 87399332..f41d87f3 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 @@ -34,6 +34,7 @@ package com.highcapable.yukihookapi_ksp_xposed.bean * @param customMPackageName 自定义模块包名 * @param entryClassName 入口类名 * @param xInitClassName xposed_init 入口类名 + * @param isEntryClassKindOfObject 入口类种类 (类型) 是否为 object (单例) * @param isUsingResourcesHook 是否启用 Resources Hook */ data class GenerateData( @@ -42,5 +43,6 @@ data class GenerateData( var customMPackageName: String = "", var entryClassName: String = "", var xInitClassName: String = "", + var isEntryClassKindOfObject: Boolean = false, var isUsingResourcesHook: Boolean = true ) \ No newline at end of file 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 a9a9be1d..cc7fefcf 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 @@ -82,7 +82,7 @@ fun GenerateData.sources() = mapOf( "object ${ClassName.ModuleApplication_Impl} {\n" + "\n" + " fun callHookEntryInit() = try {\n" + - " $entryClassName().onInit()\n" + + " " + (if (isEntryClassKindOfObject) "$entryClassName.onInit()\n" else "$entryClassName().onInit()\n") + " } catch (_: Throwable) {\n" + " }\n" + "}"), @@ -150,7 +150,7 @@ fun GenerateData.sources() = mapOf( "\n" + " private var isZygoteBinded = false\n" + "\n" + - " private val hookEntry = $entryClassName()\n" + + " private val hookEntry = " + (if (isEntryClassKindOfObject) "$entryClassName\n" else "$entryClassName()\n") + "\n" + " private fun callXposedLoaded(\n" + " isZygoteLoaded: Boolean = false,\n" +