File optimizedDirectory = context.getApplicationContext().getDir(
"WeToBandDex", 0);// jar包解压路径
DLClassLoader dLClassLoader = new DLClassLoader(dexPath,
optimizedDirectory.getPath(), null, parentLoader);
Class libProviderClazz = null;
try {
// 加载指定的工具插件
libProviderClazz = clazz.loadClass(packagePathAndName);
// 实例化该插件的类对象
IFeature lib = (IFeature) libProviderClazz.newInstance();
Method method = libProviderClazz.getMethod("setIsRun",
new Class[] { boolean.class });
method.setAccessible(true);
method.invoke(lib, new Object[] { true });
} catch (Exception e) {
e.printStackTrace();
}
说明:android环境下,需要对jar包进行优化后才能动态加载,优化过程即为把class文件打包成为.dex后缀
具体步骤如下:
工具jar包导出后要用android的DX工具进行优化具体优化方法如下:
- 将jar包放在DX 工具/build-tools/android-4.2.2/目录下
- 打开命令行窗口
- cd到/build-tools/android-4.2.2目录下,输入dx –dex –output=test.jar dynamic.jar
其中test.jar为优化后的jar包名称,dynamic.jar为要优化的jar包,进行jar包优化的原因是android用的是Dalvik VM(虚拟机),Dalvik VM不认识Java打出jar的byte code,需要通过dx工具来优化转换成Dalvik byte code才行,即是引入其他Jar的内容都被打包进了classes.dex
DX工具在SDK目录能找到:sdk\build-tools\android-4.2.2