// 移除所有方法的final字段
public static void removeFinal(Class<?> clazz, Method[] methods) {
Class classClass = Method.class;
for (Method method : methods) {
try {
Field accessFlagsField = classClass.getSuperclass().getDeclaredField("accessFlags");
accessFlagsField.setAccessible(true);
Integer accessFlags = (Integer) accessFlagsField.get(method);
if (Modifier.isFinal(accessFlags)) {
accessFlags &= ~Modifier.FINAL;
accessFlagsField.setInt(method, accessFlags);
Log.e("removeFinal", clazz.getName() + ":" + method.getName() + " result " + Modifier.isFinal((Integer) accessFlagsField.get(method)));
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
// 给所有构造方法添加public描述
public static void addPublic(Class<?> clazz, Constructor[] constructors) {
Class classClass = Constructor.class;
for (Constructor constructor : constructors) {
try {
Field accessFlagsField = classClass.getSuperclass().getDeclaredField("accessFlags");
accessFlagsField.setAccessible(true);
Integer accessFlags = (Integer) accessFlagsField.get(constructor);
if (!Modifier.isPublic(accessFlags)) {
accessFlags |= Modifier.PUBLIC;
accessFlagsField.setInt(constructor, accessFlags);
Log.e("addPublic", clazz.getName() + ":" + constructor.getName() + " result " + Modifier.isPublic((Integer) accessFlagsField.get(constructor)));
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}