4、获取 DexPathList pathList 对象
获取 DexPathList.class , 之前已经通过反射获取了 DexPathList pathList 对象 , 这里直接通过调用该对象的 getClass 方法 , 获取该类对象 ;
// ④ 获取 DexPathList.class // DexPathList 类中有 private Element[] dexElements 成员变量 // 通过反射获取该成员变量 // 参考 https://www.androidos.net.cn/android/9.0.0_r8/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java // 获取 DexPathList pathList 成员变量的字节码类型 ( 也可以通过反射获得 ) // 获取的是 DexPathList.class Class<?> plugin_dexPathListClass = plugin_pathListObject.getClass();
5、反射获取 Element[] dexElements 字段
// ⑤ 反射获取 DexPathList.class 中的 private Element[] dexElements 成员变量的 Field 字段对象 Field plugin_dexElementsField = null; try { plugin_dexElementsField = plugin_dexPathListClass.getDeclaredField("dexElements"); // 设置属性的可见性 plugin_dexElementsField.setAccessible(true); } catch (NoSuchFieldException e) { e.printStackTrace(); }
6、反射获取 Element[] dexElements 对象
// ⑥ 反射获取 DexPathList 对象中的 private Element[] dexElements 成员变量对象 Object plugin_dexElementsObject = null; try { plugin_dexElementsObject = plugin_dexElementsField.get(plugin_pathListObject); } catch (IllegalAccessException e) { e.printStackTrace(); }