Modify support hook entry class "OBJECT" kind and add hook entry class kind checking in GenerateData, CodeSourceFileFactory, YukiHookXposedProcessor

This commit is contained in:
2022-12-31 23:25:14 +08:00
parent b3028e50ea
commit 6254c451cf
3 changed files with 10 additions and 2 deletions

View File

@@ -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" } ->

View File

@@ -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
)

View File

@@ -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" +