动态执行jar包的笔记

    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接口里的方法了。

猜你喜欢

转载自yangmengli.iteye.com/blog/2208274