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.auto.service.AutoService
import com.google.devtools.ksp.processing.* 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.FileLocation
import com.google.devtools.ksp.symbol.KSAnnotated import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.KSClassDeclaration import com.google.devtools.ksp.symbol.KSClassDeclaration
@@ -140,6 +141,11 @@ class YukiHookXposedProcessor : SymbolProcessorProvider {
data.entryPackageName = it.packageName.asString() data.entryPackageName = it.packageName.asString()
data.entryClassName = it.simpleName.asString() data.entryClassName = it.simpleName.asString()
data.xInitClassName = xInitPatchName 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) generateAssetsFile(codePath = (it.location as? FileLocation?)?.filePath ?: "", sourcePath = sourcePath, data)
} }
it.superTypes.any { type -> type.element.toString() == "YukiHookXposedInitProxy" } -> it.superTypes.any { type -> type.element.toString() == "YukiHookXposedInitProxy" } ->

View File

@@ -34,6 +34,7 @@ package com.highcapable.yukihookapi_ksp_xposed.bean
* @param customMPackageName 自定义模块包名 * @param customMPackageName 自定义模块包名
* @param entryClassName 入口类名 * @param entryClassName 入口类名
* @param xInitClassName xposed_init 入口类名 * @param xInitClassName xposed_init 入口类名
* @param isEntryClassKindOfObject 入口类种类 (类型) 是否为 object (单例)
* @param isUsingResourcesHook 是否启用 Resources Hook * @param isUsingResourcesHook 是否启用 Resources Hook
*/ */
data class GenerateData( data class GenerateData(
@@ -42,5 +43,6 @@ data class GenerateData(
var customMPackageName: String = "", var customMPackageName: String = "",
var entryClassName: String = "", var entryClassName: String = "",
var xInitClassName: String = "", var xInitClassName: String = "",
var isEntryClassKindOfObject: Boolean = false,
var isUsingResourcesHook: Boolean = true var isUsingResourcesHook: Boolean = true
) )

View File

@@ -82,7 +82,7 @@ fun GenerateData.sources() = mapOf(
"object ${ClassName.ModuleApplication_Impl} {\n" + "object ${ClassName.ModuleApplication_Impl} {\n" +
"\n" + "\n" +
" fun callHookEntryInit() = try {\n" + " fun callHookEntryInit() = try {\n" +
" $entryClassName().onInit()\n" + " " + (if (isEntryClassKindOfObject) "$entryClassName.onInit()\n" else "$entryClassName().onInit()\n") +
" } catch (_: Throwable) {\n" + " } catch (_: Throwable) {\n" +
" }\n" + " }\n" +
"}"), "}"),
@@ -150,7 +150,7 @@ fun GenerateData.sources() = mapOf(
"\n" + "\n" +
" private var isZygoteBinded = false\n" + " private var isZygoteBinded = false\n" +
"\n" + "\n" +
" private val hookEntry = $entryClassName()\n" + " private val hookEntry = " + (if (isEntryClassKindOfObject) "$entryClassName\n" else "$entryClassName()\n") +
"\n" + "\n" +
" private fun callXposedLoaded(\n" + " private fun callXposedLoaded(\n" +
" isZygoteLoaded: Boolean = false,\n" + " isZygoteLoaded: Boolean = false,\n" +