Android中加载jar包和java中不太一样,因为Android的虚拟机(Dalvik VM)是不认识Java打出jar的byte code,需要通过dx工具来优化转换成Dalvik byte code才行。这一点在咱们Android项目打包的apk中可以看出:引入其他Jar的内容都被打包进了classes.dex。
用于动态加载的API DexClassLoader、PathClassLoader他们两个的区别是第二个只能加载已经安装到Android系统中的apk文件,这里我们用到的是DexClassLoader。
步骤:
1.编写接口和实现
public interface IDemo {
public String sayhello();
}
public class Demo implements IDemo {
@Override
public String sayhello() {
return "Hello!";
}
}
2打包并转化为dex格式的jar包
dx --dex --output=test.jar demo.jar
3通过DexClassLoader加载dex格式的jar包test.jar
DexClassLoader classLoader = new DexClassLoader( "path/test.jar", optimizerpath, null,cxt.getClassLoader());
Class mLoadClass = classLoader.loadClass("com.test.Demo");
sInstance = (IDemo) mLoadClass.newInstance();
现在就可以使用IDemo接口里的方法了。