From 1fb4ca6bcfe3d7a1eea745797349dd565de88de0 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Fri, 30 Dec 2022 01:25:11 +0800 Subject: [PATCH] Fix Java "void" Type Class not found problem in Android 7.0 (API 24) or latest --- .../hook/factory/ReflectionFactory.kt | 21 ++++++++++--------- .../hook/type/java/VariableTypeFactory.kt | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt index 2751e59d..185a600e 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt @@ -40,6 +40,7 @@ import com.highcapable.yukihookapi.hook.core.finder.members.MethodFinder import com.highcapable.yukihookapi.hook.core.finder.tools.ReflectionTool import com.highcapable.yukihookapi.hook.core.finder.type.factory.* import com.highcapable.yukihookapi.hook.type.java.AnyClass +import com.highcapable.yukihookapi.hook.type.java.UnitType import com.highcapable.yukihookapi.hook.xposed.bridge.status.YukiHookModuleStatus import com.highcapable.yukihookapi.hook.xposed.parasitic.AppParasitics import dalvik.system.BaseDexClassLoader @@ -180,16 +181,16 @@ infix fun Class<*>?.notImplements(other: Class<*>?) = implements(other).not() * @return [Class] */ fun Class<*>.toJavaPrimitiveType() = - (name.replace(Unit.toString(), "void") - .replace("java.lang.Void", "void") - .replace("java.lang.Boolean", "boolean") - .replace("java.lang.Integer", "int") - .replace("java.lang.Float", "float") - .replace("java.lang.Double", "double") - .replace("java.lang.Long", "long") - .replace("java.lang.Short", "short") - .replace("java.lang.Character", "char") - .replace("java.lang.Byte", "byte")).toClass() + if (name != Unit.toString() && name != "java.lang.Void" && name != "void") + (name.replace("java.lang.Boolean", "boolean") + .replace("java.lang.Integer", "int") + .replace("java.lang.Float", "float") + .replace("java.lang.Double", "double") + .replace("java.lang.Long", "long") + .replace("java.lang.Short", "short") + .replace("java.lang.Character", "char") + .replace("java.lang.Byte", "byte")).toClass() + else UnitType /** * 通过字符串类名转换为 [loader] 中的实体类 diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt index a2a64f0b..a00e7c1e 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/type/java/VariableTypeFactory.kt @@ -148,7 +148,7 @@ val DoubleType get() = "double".toClass() * 这是 Java 原始类型 (Primitive Type) - 它在字节码中的关键字为 "void" * @return [Class] */ -val UnitType get() = "void".toClass() +val UnitType get() = Void.TYPE ?: "void".toClass() /** * 获得 [Any] 类型