4、反射获取系统的 Element[] dexElements
获取 DexPathList pathList 对象 : 通过反射获取 BaseDexClassLoader 类 , 然后反射获取 BaseDexClassLoader 中的 private final DexPathList pathList 字段 , 由于是私有成员字段 , 需要设置可访问性 ;
通过系统类加载器 , 获取系统的 PathClassLoader pathClassLoader 对象的 DexPathList pathList 成员 ;
获取 Element[] dexElements 数组 : 通过反射获取 DexPathList 类 , 然后反射获取 获取 DexPathList 类中的 private final Element[] dexElements 成员字段 , 由于是私有成员字段 , 需要设置可访问性 , 最后获取 DexPathList pathList 对象的 Element[] dexElements 成员 ;
代码示例 :
// 加载系统的 Element[] dexElements --------------------------------------------- // 反射获取 BaseDexClassLoader 类对象 Class systemBaseDexClassLoaderClass = Class.forName("dalvik.system.BaseDexClassLoader"); // 反射获取 BaseDexClassLoader 中的 private final DexPathList pathList 字段 Field systemPathListField = systemBaseDexClassLoaderClass.getDeclaredField("pathList"); // 由于是私有成员字段 , 需要设置可访问性 systemPathListField.setAccessible(true); // 获取系统的 PathClassLoader pathClassLoader 对象的 // private final DexPathList pathList 成员 Object systemPathListObject = systemPathListField.get(pathClassLoader); // 获取 DexPathList 类 Class systemPathListClass = systemPathListObject.getClass(); // 获取 DexPathList 类中的 private final Element[] dexElements 成员字段 Field systemDexElementsField = systemPathListClass.getDeclaredField("dexElements"); // 由于是私有成员字段 , 需要设置可访问性 systemDexElementsField.setAccessible(true); // 获取 DexPathList pathList 对象的 Element[] dexElements 成员 Object systemDexElementsObject = systemDexElementsField.get(systemPathListObject); // 系统的 Element[] dexElements 加载完毕-----------------------------------------
5、反射获取自己加载的 修复包 Dex 的 Element[] dexElements
获取 DexPathList pathList 对象 : 通过反射获取 BaseDexClassLoader 类 , 然后反射获取 BaseDexClassLoader 中的 private final DexPathList pathList 字段 , 由于是私有成员字段 , 需要设置可访问性 ;
通过系统类加载器 , 获取系统的 PathClassLoader pathClassLoader 对象的 DexPathList pathList 成员 ;
获取 Element[] dexElements 数组 : 通过反射获取 DexPathList 类 , 然后反射获取 获取 DexPathList 类中的 private final Element[] dexElements 成员字段 , 由于是私有成员字段 , 需要设置可访问性 , 最后获取 DexPathList pathList 对象的 Element[] dexElements 成员 ;
代码示例 :
// 加载自己的 Element[] dexElements --------------------------------------------- // 反射获取 BaseDexClassLoader 类对象 Class myBaseDexClassLoaderClass = Class.forName("dalvik.system.BaseDexClassLoader"); // 反射获取 BaseDexClassLoader 中的 private final DexPathList pathList 字段 Field myPathListField = myBaseDexClassLoaderClass.getDeclaredField("pathList"); // 由于是私有成员字段 , 需要设置可访问性 myPathListField.setAccessible(true); // 获取系统的 PathClassLoader pathClassLoader 对象的 // private final DexPathList pathList 成员 Object myPathListObject = myPathListField.get(pathClassLoader); // 获取 DexPathList 类 Class myPathListClass = myPathListObject.getClass(); // 获取 DexPathList 类中的 private final Element[] dexElements 成员字段 Field myDexElementsField = myPathListClass.getDeclaredField("dexElements"); // 由于是私有成员字段 , 需要设置可访问性 myDexElementsField.setAccessible(true); // 获取 DexPathList pathList 对象的 Element[] dexElements 成员 Object myDexElementsObject = myDexElementsField.get(myPathListObject); // 自己的 Element[] dexElements 加载完毕-----------------------------------------