[core] Fix dexbuilder return type of constructor
This commit is contained in:
parent
c23e172bac
commit
05656e0939
|
|
@ -30,6 +30,7 @@ import io.github.lsposed.lspd.util.ProxyClassLoader;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Executable;
|
||||||
import java.lang.reflect.Member;
|
import java.lang.reflect.Member;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
|
@ -99,7 +100,8 @@ public class HookerDexMaker {
|
||||||
return parameterTypeIds;
|
return parameterTypeIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Class<?>[] getParameterTypes(Class<?>[] parameterTypes, boolean isStatic) {
|
private static Class<?>[] getParameterTypes(Executable method, boolean isStatic) {
|
||||||
|
Class<?>[] parameterTypes = method.getParameterTypes();
|
||||||
if (isStatic) {
|
if (isStatic) {
|
||||||
return parameterTypes;
|
return parameterTypes;
|
||||||
}
|
}
|
||||||
|
|
@ -107,7 +109,7 @@ public class HookerDexMaker {
|
||||||
int targetParameterSize = parameterSize + 1;
|
int targetParameterSize = parameterSize + 1;
|
||||||
Class<?>[] newParameterTypes = new Class<?>[targetParameterSize];
|
Class<?>[] newParameterTypes = new Class<?>[targetParameterSize];
|
||||||
int offset = 1;
|
int offset = 1;
|
||||||
newParameterTypes[0] = Object.class;
|
newParameterTypes[0] = method.getDeclaringClass();
|
||||||
System.arraycopy(parameterTypes, 0, newParameterTypes, offset, parameterTypes.length);
|
System.arraycopy(parameterTypes, 0, newParameterTypes, offset, parameterTypes.length);
|
||||||
return newParameterTypes;
|
return newParameterTypes;
|
||||||
}
|
}
|
||||||
|
|
@ -127,13 +129,14 @@ public class HookerDexMaker {
|
||||||
mReturnTypeId = TypeId.OBJECT;
|
mReturnTypeId = TypeId.OBJECT;
|
||||||
}
|
}
|
||||||
mParameterTypeIds = getParameterTypeIds(method.getParameterTypes(), isStatic);
|
mParameterTypeIds = getParameterTypeIds(method.getParameterTypes(), isStatic);
|
||||||
mActualParameterTypes = getParameterTypes(method.getParameterTypes(), isStatic);
|
mActualParameterTypes = getParameterTypes(method, isStatic);
|
||||||
} else if (member instanceof Constructor) {
|
} else if (member instanceof Constructor) {
|
||||||
Constructor constructor = (Constructor) member;
|
Constructor constructor = (Constructor) member;
|
||||||
isStatic = false;
|
isStatic = false;
|
||||||
mReturnTypeId = TypeId.VOID;
|
mReturnTypeId = TypeId.VOID;
|
||||||
|
mReturnType = void.class;
|
||||||
mParameterTypeIds = getParameterTypeIds(constructor.getParameterTypes(), isStatic);
|
mParameterTypeIds = getParameterTypeIds(constructor.getParameterTypes(), isStatic);
|
||||||
mActualParameterTypes = getParameterTypes(constructor.getParameterTypes(), isStatic);
|
mActualParameterTypes = getParameterTypes(constructor, isStatic);
|
||||||
} else if (member.getDeclaringClass().isInterface()) {
|
} else if (member.getDeclaringClass().isInterface()) {
|
||||||
throw new IllegalArgumentException("Cannot hook interfaces: " + member.toString());
|
throw new IllegalArgumentException("Cannot hook interfaces: " + member.toString());
|
||||||
} else if (Modifier.isAbstract(member.getModifiers())) {
|
} else if (Modifier.isAbstract(member.getModifiers())) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue