package com.demo; import java.io.File; import java.util.LinkedList; import android.content.Context; import dalvik.system.DexClassLoader; public class MultiDexClassLoader extends ClassLoader { private static MultiDexClassLoader instance = null; private LinkedList<DexClassLoader> classLoaders; public static MultiDexClassLoader getInstance() { if (instance == null) { instance = new MultiDexClassLoader(); } return instance; } private MultiDexClassLoader() { super(ClassLoader.getSystemClassLoader()); this.classLoaders = new LinkedList<DexClassLoader>(); } public void install(Context context, String jarPath) { File dexOutputDir = context.getDir("dex", 0); DexClassLoader dexClassLoader = new DexClassLoader(jarPath, dexOutputDir.getAbsolutePath(), null, context.getClassLoader()); this.classLoaders.addLast(dexClassLoader); } @Override public Class<?> findClass(String className) throws ClassNotFoundException { Class<?> clazz = null; for (DexClassLoader classLoader : this.classLoaders) { try { clazz = classLoader.loadClass(className); } catch (ClassNotFoundException e) { continue; } if (clazz != null) { return clazz; } } throw new ClassNotFoundException(className + " in loader " + this); } }