mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-05 18:25:28 +08:00
Modify support hook entry class "OBJECT" kind and add hook entry class kind checking in GenerateData, CodeSourceFileFactory, YukiHookXposedProcessor
This commit is contained in:
@@ -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" } ->
|
||||||
|
@@ -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
|
||||||
)
|
)
|
@@ -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" +
|
||||||
|
Reference in New Issue
Block a user