mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-12 19:31:17 +08:00
Merge branch 'main' of https://github.com/qqlittleice233/SimplicityTools into qqlittleice233-main
This commit is contained in:
87
app/src/main/java/me/iacn/biliroaming/utils/DexHelper.java
Normal file
87
app/src/main/java/me/iacn/biliroaming/utils/DexHelper.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package me.iacn.biliroaming.utils;
|
||||
|
||||
import com.lt2333.simplicitytools.util.KotlinXposedHelperKt;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Member;
|
||||
|
||||
import dalvik.system.BaseDexClassLoader;
|
||||
|
||||
public class DexHelper implements AutoCloseable, Closeable {
|
||||
public static final int NO_CLASS_INDEX = -1;
|
||||
private final ClassLoader classLoader;
|
||||
private final long token;
|
||||
private static DexHelper instance;
|
||||
|
||||
public static DexHelper getInstance(ClassLoader classLoader) {
|
||||
synchronized (DexHelper.class) {
|
||||
if (instance != null) return instance;
|
||||
BaseDexClassLoader loader = KotlinXposedHelperKt.findDexClassLoader(classLoader);
|
||||
if (loader == null) {
|
||||
return null;
|
||||
}
|
||||
instance = new DexHelper(loader);
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
|
||||
public DexHelper(ClassLoader classLoader) {
|
||||
this.classLoader = classLoader;
|
||||
token = load(classLoader);
|
||||
}
|
||||
|
||||
public native long[] findMethodUsingString(
|
||||
String str, boolean matchPrefix, long returnType, short parameterCount,
|
||||
String parameterShorty, long declaringClass, long[] parameterTypes,
|
||||
long[] containsParameterTypes, int[] dexPriority, boolean findFirst);
|
||||
|
||||
public native long[] findMethodInvoking(long methodIndex, long returnType,
|
||||
short parameterCount, String parameterShorty,
|
||||
long declaringClass, long[] parameterTypes,
|
||||
long[] containsParameterTypes,
|
||||
int[] dexPriority, boolean findFirst);
|
||||
|
||||
public native long[] findMethodInvoked(long methodIndex, long returnType,
|
||||
short parameterCount, String parameterShorty,
|
||||
long declaringClass, long[] parameterTypes,
|
||||
long[] containsParameterTypes,
|
||||
int[] dexPriority, boolean findFirst);
|
||||
|
||||
public native long[] findMethodSettingField(
|
||||
long fieldIndex, long returnType, short parameterCount,
|
||||
String parameterShorty, long declaringClass, long[] parameterTypes,
|
||||
long[] containsParameterTypes, int[] dexPriority, boolean findFirst);
|
||||
|
||||
public native long[] findMethodGettingField(
|
||||
long fieldIndex, long returnType, short parameterCount,
|
||||
String parameterShorty, long declaringClass, long[] parameterTypes,
|
||||
long[] containsParameterTypes, int[] dexPriority, boolean findFirst);
|
||||
|
||||
public native long[] findField(long type, int[] dexPriority, boolean findFirst);
|
||||
|
||||
public native Member decodeMethodIndex(long methodIndex);
|
||||
|
||||
public native long encodeMethodIndex(Member method);
|
||||
|
||||
public native Field decodeFieldIndex(long fieldIndex);
|
||||
|
||||
public native long encodeFieldIndex(Field field);
|
||||
|
||||
public native long encodeClassIndex(Class<?> clazz);
|
||||
|
||||
public native Class<?> decodeClassIndex(long classIndex);
|
||||
|
||||
public native void createFullCache();
|
||||
|
||||
@Override
|
||||
public native void close();
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
close();
|
||||
}
|
||||
|
||||
private native long load(ClassLoader classLoader);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user