使用反射实现替换classLoader1.获取"android.app.ActivityThread"中的"mPackages" ;
定义为arraymap<String,weakReference<LoadedApk>> mPackages
c = Class.forName("android.app.ActivityThread"); Field field1 = c.getDeclaredField("mPackages"); field1.setAccessible(true); Object currentActivityThread = c.getMethod("currentActivityThread").invoke(null); ArrayMap map =(ArrayMap) field1.get(currentActivityThread);
2.获取"android.app.LoadedApk","mClassLoader"的属性;
将1中的WeakReference获取的对象传递进去获取LoadedApk,设置其值为自定义的dexClassLoader。
c = Class.forName("android.app.LoadedApk"); Field field = c.getDeclaredField("mClassLoader"); field.setAccessible(true); field.set(weakReference.get(), classLoader);