reformat code & optimize import & rearrange code
This commit is contained in:
@ -5,11 +5,14 @@ package com.gh.common.util;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import dalvik.system.DexClassLoader;
|
||||
import dalvik.system.PathClassLoader;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.*;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import dalvik.system.DexClassLoader;
|
||||
import dalvik.system.PathClassLoader;
|
||||
|
||||
/* compiled from: ProGuard */
|
||||
public final class HotFix {
|
||||
@ -38,15 +41,6 @@ public final class HotFix {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean hasDexClassLoader() {
|
||||
try {
|
||||
Class.forName("dalvik.system.BaseDexClassLoader");
|
||||
return true;
|
||||
} catch (ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static void injectInAliyunOs(Context context, String patchDexFile, String patchClassName)
|
||||
throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException,
|
||||
InstantiationException, NoSuchFieldException {
|
||||
@ -68,6 +62,26 @@ public final class HotFix {
|
||||
combineArray(getField(obj, PathClassLoader.class, "mLexs"), getField(newInstance, cls, "mDexs")));
|
||||
}
|
||||
|
||||
private static boolean hasDexClassLoader() {
|
||||
try {
|
||||
Class.forName("dalvik.system.BaseDexClassLoader");
|
||||
return true;
|
||||
} catch (ClassNotFoundException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static void injectAboveEqualApiLevel14(Context context, String str, String str2)
|
||||
throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
|
||||
PathClassLoader pathClassLoader = (PathClassLoader) context.getClassLoader();
|
||||
Object a = combineArray(getDexElements(getPathList(pathClassLoader)),
|
||||
getDexElements(getPathList(
|
||||
new DexClassLoader(str, context.getDir("dex", 0).getAbsolutePath(), str, context.getClassLoader()))));
|
||||
Object a2 = getPathList(pathClassLoader);
|
||||
setField(a2, a2.getClass(), "dexElements", a);
|
||||
pathClassLoader.loadClass(str2);
|
||||
}
|
||||
|
||||
@TargetApi(14)
|
||||
private static void injectBelowApiLevel14(Context context, String str, String str2)
|
||||
throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
|
||||
@ -92,24 +106,22 @@ public final class HotFix {
|
||||
obj.loadClass(str2);
|
||||
}
|
||||
|
||||
private static void injectAboveEqualApiLevel14(Context context, String str, String str2)
|
||||
throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
|
||||
PathClassLoader pathClassLoader = (PathClassLoader) context.getClassLoader();
|
||||
Object a = combineArray(getDexElements(getPathList(pathClassLoader)),
|
||||
getDexElements(getPathList(
|
||||
new DexClassLoader(str, context.getDir("dex", 0).getAbsolutePath(), str, context.getClassLoader()))));
|
||||
Object a2 = getPathList(pathClassLoader);
|
||||
setField(a2, a2.getClass(), "dexElements", a);
|
||||
pathClassLoader.loadClass(str2);
|
||||
private static void setField(Object obj, Class cls, String str, Object obj2)
|
||||
throws NoSuchFieldException, IllegalAccessException {
|
||||
Field declaredField = cls.getDeclaredField(str);
|
||||
declaredField.setAccessible(true);
|
||||
declaredField.set(obj, obj2);
|
||||
}
|
||||
|
||||
private static Object getPathList(Object obj) throws ClassNotFoundException, NoSuchFieldException,
|
||||
IllegalAccessException {
|
||||
return getField(obj, Class.forName("dalvik.system.BaseDexClassLoader"), "pathList");
|
||||
}
|
||||
|
||||
private static Object getDexElements(Object obj) throws NoSuchFieldException, IllegalAccessException {
|
||||
return getField(obj, obj.getClass(), "dexElements");
|
||||
private static Object appendArray(Object obj, Object obj2) {
|
||||
Class componentType = obj.getClass().getComponentType();
|
||||
int length = Array.getLength(obj);
|
||||
Object newInstance = Array.newInstance(componentType, length + 1);
|
||||
Array.set(newInstance, 0, obj2);
|
||||
for (int i = 1; i < length + 1; i++) {
|
||||
Array.set(newInstance, i, Array.get(obj, i - 1));
|
||||
}
|
||||
return newInstance;
|
||||
}
|
||||
|
||||
private static Object getField(Object obj, Class cls, String str)
|
||||
@ -119,13 +131,6 @@ public final class HotFix {
|
||||
return declaredField.get(obj);
|
||||
}
|
||||
|
||||
private static void setField(Object obj, Class cls, String str, Object obj2)
|
||||
throws NoSuchFieldException, IllegalAccessException {
|
||||
Field declaredField = cls.getDeclaredField(str);
|
||||
declaredField.setAccessible(true);
|
||||
declaredField.set(obj, obj2);
|
||||
}
|
||||
|
||||
private static Object combineArray(Object obj, Object obj2) {
|
||||
Class componentType = obj2.getClass().getComponentType();
|
||||
int length = Array.getLength(obj2);
|
||||
@ -141,15 +146,13 @@ public final class HotFix {
|
||||
return newInstance;
|
||||
}
|
||||
|
||||
private static Object appendArray(Object obj, Object obj2) {
|
||||
Class componentType = obj.getClass().getComponentType();
|
||||
int length = Array.getLength(obj);
|
||||
Object newInstance = Array.newInstance(componentType, length + 1);
|
||||
Array.set(newInstance, 0, obj2);
|
||||
for (int i = 1; i < length + 1; i++) {
|
||||
Array.set(newInstance, i, Array.get(obj, i - 1));
|
||||
}
|
||||
return newInstance;
|
||||
private static Object getDexElements(Object obj) throws NoSuchFieldException, IllegalAccessException {
|
||||
return getField(obj, obj.getClass(), "dexElements");
|
||||
}
|
||||
|
||||
private static Object getPathList(Object obj) throws ClassNotFoundException, NoSuchFieldException,
|
||||
IllegalAccessException {
|
||||
return getField(obj, Class.forName("dalvik.system.BaseDexClassLoader"), "pathList");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user