diff --git a/README-en.md b/README-en.md
index 4110ccb..ad67012 100644
--- a/README-en.md
+++ b/README-en.md
@@ -42,8 +42,8 @@ dependencyResolutionManagement {
dependencies {
// Choose one of these options; jitpack is recommended as maven might not update as frequently.
// Tip: Replace v.*.*.* with the latest release version.
- implementation 'com.github.HChenX:HookTool:v.1.1.7' // jitpack
- implementation 'io.github.hchenx:hooktool:v.1.1.7'
+ implementation 'com.github.HChenX:HookTool:v.1.2.0' // jitpack
+ // implementation 'io.github.hchenx:hooktool:v.1.2.0'
// maven Tip: Almost abandoned, please do not use!
}
```
@@ -110,7 +110,7 @@ public static class MainActivity {
public class MainTest {
public void test() {
CoreTool.hookMethod(/* content */); // Hook method
- CoreTool.findClass().get(); // Find class
+ CoreTool.findClass(); // Find class
CoreTool.callMethod(); // Call method
ChainTool.chain("com.hchen.demo", new ChainTool()
.method("method")
@@ -141,7 +141,7 @@ public class MainTest extends BaseHC {
// Be sure to initialize HCInit.initStartupParam(startupParam) at the hook entry point.
@Override
public void initZygote(IXposedHookZygoteInit.StartupParam startupParam) {
- Class> c = findClass("com.hchen.demo.Main").get();
+ Class> c = findClass("com.hchen.demo.Main");
hookMethod(c, "test", new IHook() {
/* content */
});
@@ -221,7 +221,7 @@ public class MainTest extends BaseHC {
```java
public class MainTest extends BaseHC {
public void init() {
- Class> c = findClass("com.hchen.demo.Demo").get(); // If the class cannot be retrieved, an error log is recorded and null is returned.
+ Class> c = findClass("com.hchen.demo.Demo"); // If the class cannot be retrieved, an error log is recorded and null is returned.
hookMethod(c, "test", new IHook() { // If c is null, an error log is recorded and the hook is skipped, allowing the rest of the code to continue.
@Override
public void before() {
diff --git a/README.md b/README.md
index 72aa29d..813ebc8 100644
--- a/README.md
+++ b/README.md
@@ -42,8 +42,8 @@ dependencyResolutionManagement {
dependencies {
// 二选一即可,推荐使用 jitpack,maven 可能不会同步更新!
// Tip: v.*.*.* 填写当前最新发行版版本号即可!
- implementation 'com.github.HChenX:HookTool:v.1.1.7' // jitpack
- implementation 'io.github.hchenx:hooktool:v.1.1.7' // maven Tip: 几乎废弃,请不要使用!
+ implementation 'com.github.HChenX:HookTool:v.1.2.0' // jitpack
+ // implementation 'io.github.hchenx:hooktool:v.1.2.0' // maven Tip: 几乎废弃,请不要使用!
}
```
@@ -108,7 +108,7 @@ public static class MainActivity {
public class MainTest {
public void test() {
CoreTool.hookMethod(/* 内容 */); // 即可 hook
- CoreTool.findClass().get(); // 查找类
+ CoreTool.findClass(); // 查找类
CoreTool.callMethod(); // 调用方法
ChainTool.chain("com.hchen.demo", new ChainTool()
.method("method")
@@ -139,7 +139,7 @@ public class MainTest extends BaseHC {
// 请务必在 hook 入口处初始化 HCInit.initStartupParam(startupParam);
@Override
public void initZygote(IXposedHookZygoteInit.StartupParam startupParam) {
- Class> c = findClass("com.hchen.demo.Main").get();
+ Class> c = findClass("com.hchen.demo.Main");
hookMethod(c, "test", new IHook() {
/* 内容 */
});
@@ -220,7 +220,7 @@ public class MainTest extends BaseHC {
```java
public class MainTest extends BaseHC {
public void init() {
- Class> c = findClass("com.hchen.demo.Demo").get(); // 如果无法获取 class 则会记录 Error 日志并返回 null。
+ Class> c = findClass("com.hchen.demo.Demo"); // 如果无法获取 class 则会记录 Error 日志并返回 null。
hookMethod(c, "test", new IHook() { // c 为 null 也会记录 Error 日志,并跳过 hook 继续执行后面逻辑。
@Override
public void before() {
diff --git a/app/build.gradle b/app/build.gradle
index d548897..898f663 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,8 +3,8 @@ plugins {
id 'maven-publish'
}
-def defVersion = 'v.1.1.8'
-int defVersionCode = 2025012100
+def defVersion = 'v.1.2.0'
+int defVersionCode = 2025012700
group = 'com.github.HChenX'
version = defVersion
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 9f42090..9bc165a 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -21,7 +21,6 @@
#-renamesourcefileattribute SourceFile
-keep class * extends com.hchen.hooktool.BaseHC
--keep class com.hchen.hooktool.HCEntrance
-keep class com.hchen.hooktool.HCState {
static boolean isEnabled;
static java.lang.String mFramework;
diff --git a/app/src/main/java/com/hchen/hooktool/helper/ConvertHelper.java b/app/src/main/java/com/hchen/hooktool/helper/ConvertHelper.java
deleted file mode 100644
index 28dc0d6..0000000
--- a/app/src/main/java/com/hchen/hooktool/helper/ConvertHelper.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * This file is part of HookTool.
-
- * HookTool is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
-
- * Copyright (C) 2023-2024 HChenX
- */
-package com.hchen.hooktool.helper;
-
-import static com.hchen.hooktool.log.LogExpand.getStackTrace;
-import static com.hchen.hooktool.log.XposedLog.logW;
-import static com.hchen.hooktool.tool.CoreTool.findClass;
-
-import androidx.annotation.Nullable;
-
-import com.hchen.hooktool.HCData;
-import com.hchen.hooktool.hook.IHook;
-import com.hchen.hooktool.log.LogExpand;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 快捷转换
- *
- * @author 焕晨HChen
- */
-public final class ConvertHelper {
- /**
- * 泛型转换为数组。
- */
- public static Object[] genericToArray(T ts) {
- if (ts instanceof Object[] objects) return objects;
- return new Object[]{ts};
- }
-
- @Nullable
- public static Class>[] arrayToClass(Object... objs) {
- return arrayToClass(HCData.getClassLoader(), objs);
- }
-
- /**
- * 数组参数转为类。
- */
- @Nullable
- public static Class>[] arrayToClass(ClassLoader classLoader, Object... objs) {
- if (classLoader == null || objs == null) return null;
- if (objs.length == 0) return new Class>[]{};
- List> classes = new ArrayList<>();
- for (Object o : objs) {
- if (o instanceof Class> c) {
- classes.add(c);
- } else if (o instanceof String s) {
- Class> ct = findClass(s, classLoader);
- if (ct == null) return null;
- classes.add(ct);
- } else if (o instanceof IHook) {
- break; // 一定为最后一个参数
- } else {
- logW(LogExpand.getTag(), "Unknown type: " + o + getStackTrace());
- return null;
- }
- }
- return classes.toArray(new Class>[0]);
- }
-}
diff --git a/app/src/main/java/com/hchen/hooktool/tool/CoreBase.java b/app/src/main/java/com/hchen/hooktool/tool/CoreBase.java
index 7d8d31a..ea5d50f 100644
--- a/app/src/main/java/com/hchen/hooktool/tool/CoreBase.java
+++ b/app/src/main/java/com/hchen/hooktool/tool/CoreBase.java
@@ -18,7 +18,6 @@
*/
package com.hchen.hooktool.tool;
-import static com.hchen.hooktool.helper.ConvertHelper.arrayToClass;
import static com.hchen.hooktool.helper.TryHelper.run;
import static com.hchen.hooktool.hook.HookFactory.createHook;
import static com.hchen.hooktool.log.LogExpand.getStackTrace;
@@ -26,17 +25,22 @@
import static com.hchen.hooktool.log.XposedLog.logE;
import static com.hchen.hooktool.log.XposedLog.logI;
import static com.hchen.hooktool.log.XposedLog.logW;
+import static com.hchen.hooktool.tool.CoreBase.ConvertHelper.arrayToClass;
import static com.hchen.hooktool.tool.CoreTool.callStaticMethod;
import static com.hchen.hooktool.tool.SingleMember.createSingleMember;
+import androidx.annotation.Nullable;
+
import com.hchen.hooktool.HCData;
import com.hchen.hooktool.hook.IHook;
+import com.hchen.hooktool.log.LogExpand;
import com.hchen.hooktool.tool.itool.IMemberFilter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@@ -362,4 +366,44 @@ private static Method baseGetSuperPrivateMethod(Class> clz, String name, Objec
return method;
}).orErrorMag(null, "Failed to get super private method!");
}
+
+ static final class ConvertHelper {
+ /**
+ * 泛型转换为数组。
+ */
+ public static Object[] genericToArray(T ts) {
+ if (ts instanceof Object[] objects) return objects;
+ return new Object[]{ts};
+ }
+
+ @Nullable
+ public static Class>[] arrayToClass(Object... objs) {
+ return arrayToClass(HCData.getClassLoader(), objs);
+ }
+
+ /**
+ * 数组参数转为类。
+ */
+ @Nullable
+ public static Class>[] arrayToClass(ClassLoader classLoader, Object... objs) {
+ if (classLoader == null || objs == null) return null;
+ if (objs.length == 0) return new Class>[]{};
+ List> classes = new ArrayList<>();
+ for (Object o : objs) {
+ if (o instanceof Class> c) {
+ classes.add(c);
+ } else if (o instanceof String s) {
+ Class> ct = baseFindClass(s, classLoader).getNotReport();
+ if (ct == null) return null;
+ classes.add(ct);
+ } else if (o instanceof IHook) {
+ break; // 一定为最后一个参数
+ } else {
+ logW(LogExpand.getTag(), "Unknown type: " + o + getStackTrace());
+ return null;
+ }
+ }
+ return classes.toArray(new Class>[0]);
+ }
+ }
}