二、设置 “宿主“ 中的 Element[] dexElements
将之前 合并 “插件包“ 与 “宿主“ 中的 Element[] dexElements 数组 , 设置到 宿主 PathClassLoader 中的 DexPathList pathList 成员的 Element[] dexElements 属性值中 ;
先获取 Element[] dexElements 字段 Field 对象 ;
Field elementsFiled = null; try { elementsFiled = host_pathListObject.getClass().getDeclaredField("dexElements"); } catch (NoSuchFieldException e) { e.printStackTrace(); } elementsFiled.setAccessible(true);
、
然后调用 Field 的 set 方法 , 设置该属性值 , 其中 host_pathListObject 是原来的属性值 , newElementsArray 是新的合并后的 Element[] dexElements 数组 ;
elementsFiled.set(host_pathListObject, newElementsArray);
完整代码 :
// 4. 重新设置 PathClassLoader 中的 DexPathList pathList 成员的 Element[] dexElements 属性值 Field elementsFiled = null; try { elementsFiled = host_pathListObject.getClass().getDeclaredField("dexElements"); } catch (NoSuchFieldException e) { e.printStackTrace(); } elementsFiled.setAccessible(true); // 设置 DexPathList pathList 的 Element[] dexElements 属性值 // host_pathListObject 是原来的属性值 // newElementsArray 是新的合并后的 Element[] dexElements 数组 // 注意 : 这里也可以使用 host_dexElementsField 字段进行设置 try { elementsFiled.set(host_pathListObject, newElementsArray); } catch (IllegalAccessException e) { e.printStackTrace(); }