try { // Class myDexClazzLoader=pluginClassloader.getClass(); Class myDexClazzLoader=Class.forName("dalvik.system.BaseDexClassLoader"); Field myPathListFiled=myDexClazzLoader.getDeclaredField("pathList"); myPathListFiled.setAccessible(true); Object myPathListObject =myPathListFiled.get(pluginClassloader);
Class myPathClazz=myPathListObject.getClass(); Field myElementsField = myPathClazz.getDeclaredField("dexElements"); myElementsField.setAccessible(true); // 自己插件的 dexElements[] Object myElements=myElementsField.get(myPathListObject);
int systemLength = Array.getLength(systemElements); int myLength = Array.getLength(myElements); // 找到 Element 的Class类型 数组 每一个成员的类型 Class<?> sigleElementClazz = systemElements.getClass().getComponentType(); int newSysteLength = myLength + systemLength; Object newElementsArray=Array.newInstance(sigleElementClazz, newSysteLength); //融合 for (int i = 0; i < newSysteLength; i++) { // 先融合 插件的Elements if (i < myLength) { Array.set(newElementsArray, i, Array.get(myElements, i)); }else { Object value = Array.get(systemElements, i - myLength); Array.set(newElementsArray,i, value); } } Field elementsField=pathListObject.getClass().getDeclaredField("dexElements");; elementsField.setAccessible(true); // 将新生成的EleMents数组对象重新放到系统中去 elementsField.set( pathListObject,newElementsArray); } catch (Exception e) { e.printStackTrace(); }
}
问题汇总
Found duplicate classes, falling back to interpreter mode
1 2 3 4 5 6 7 8 9 10 11
11325-11325/cn.qssq666.pluginload W/IInputConnectionWrapper: reportFullscreenMode on inexistent InputConnection 05-12 19:29:21.841 11325-11325/cn.qssq666.pluginload V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@a035b2a 05-12 19:29:21.948 11325-11325/cn.qssq666.pluginload W/MainActivity: CLASSLOADER length12 05-12 19:29:22.310 11325-11325/cn.qssq666.pluginload W/MainActivity: 融合file:/data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes.dex 05-12 19:29:22.397 11325-11325/cn.qssq666.pluginload W/MainActivity: 融合file:/data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex 05-12 19:29:22.408 11325-11325/cn.qssq666.pluginload W/art: Found duplicate classes, falling back to interpreter mode for /data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex Found duplicated class when checking oat files: 'Lcom/umeng/analytics/pro/m$1;' in /data/app/cn.qssq666.redpacket-2/base.apk and /data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex Failure to verify dex file '/data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex': Bad file size (1788928, expected 1787988d) 05-12 19:29:22.418 11325-11325/cn.qssq666.pluginload E/System: Unable to load dex file: /data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex 05-12 19:29:22.419 11325-11325/cn.qssq666.pluginload E/System: java.io.IOException: Failed to open dex files from /data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex because: Failure to verify dex file '/data/user/0/cn.qssq666.pluginload/app_robot_out_dex/classes2.dex': Bad file size (1788928, expected 1787988d) at dalvik.system.DexFile.openDexFileNative(Native Method)
真正的错误原因
1 2 3 4 5 6 7 8
W/art: Found duplicate classes, falling back to interpreter mode for /data/user/0/cn.qssq666.pluginload/app_robot_out _dex/classes2.dex Found duplicated class when checking oat files: 'Lcom/umeng/analytics/pro/m$1;' in /data/app/cn.qssq666.redpacket-2/ base.apk and /data/user/0/cn.qssq666.pluginload/app_robot_out_dex/ classes2.dex Failure to verify dex file '/data/user/0/cn.qssq666.pluginload/app_robot_out_dex