mirror of
https://github.com/LittleTurtle2333/SimplicityTools.git
synced 2026-07-12 11:21:18 +08:00
88 lines
3.2 KiB
Java
88 lines
3.2 KiB
Java
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);
|
|
}
|
|
|