Java中也有类加载器ClassLoader,其作用是动态装载Class文件,当我们从网络下载Class文件,或者在编译时不参与而在运行时动态调用时就需要用类加载器。由于Android对class文件进行了重新打包和优化,最终APK文件中包含的是dex文件,加载这种文件就需要用到DexClassLoader。
DexClassLoader(dexPath, optimizedDirectory, libraryPath, parent)
dexPath:目标类所在的APK或者jar包,/.../xxx.jar
optimizedDirectory:从APK或者jar解压出来的dex文件存放路径
libraryPath:native库路径,可以为null
parent:父类装载器,一般为当前类的装载器、
插件类Plugin用于在运行时由宿主程序调用
public class Plugin {
public int add(int a, int b) {
return a+b;
}
}使用jar命令将其打包成jar文件
jar -cvf plugin.jar com/dl/plugin/Plugin.class使用dx命令将其转化为android中的类格式dex文件dx --dex --output=f:\dynamic.jar f:\Plugin.jar将其放到手机目录中,比如放到根目录adb push F:\dynamic.jar /
在宿主程序中动态加载调用插件类Plugin的add函数
DexClassLoader loader = new DexClassLoader("/dynamic.jar"