Android:通过ClassLoader加载外部Jar文件

时间:2012-11-23 13:38:22

标签: android jar classloader

我有一个Android应用程序,需要能够加载外部Jar文件。我知道罐子的位置。

我一直在使用Android API提供的PathClassLoader类无济于事。我在Activity中使用以下代码:

String jarPath = "/sdcard/jars/testjar.jar";

PathClassLoader myClassLoader = new PathClassLoader(jarPath, ClassLoader.getSystemClassLoader());

        try
    {
        Class<?> clazz = Class.forName("com.test.Class1", true, myClassLoader);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }

在实例化PathClassLoader实例时,Dalvik向LogCat输出一条消息,告诉我它无法找到'classes.dex'文件。之后,'Class.forName'抛出'ClassNotFoundException'。

我正在尝试找到一种方法,可以从外部Jar文件加载类,而无需'classes.dex'文件。 Jar文件不包含此文件,但是当在类路径中使用Jar构建其他应用程序时,Dalvik可以非常愉快地加载类。

简单地说:如何从外部Jar文件加载类而不需要'classes.dex'?

非常感谢, P

更新 Dalvik记录的消息是

  

Zip很好,但里面没有classes.dex,并且在同一目录中没有有效的.odex文件

2 个答案:

答案 0 :(得分:1)

有一个名为“dx”的工具,这个工具可以将Java二进制代码转换为Android Dalvik二进制代码。在Android中,无法识别Java二进制代码。

答案 1 :(得分:0)

我发现了解决方案。在发布问题时,也许我太仓促了。

当然.dex文件是必需的,因为这正是Dalvik执行的。

为了解决我的问题,我已将外部Jar文件设为dex,因此它们现在包含了自己的“classes.dex”。幸运的是,这是我们持续集成环境的一部分,所以一旦我们检查并构建了Android库,通过dx.exe的额外中间步骤会生成'classes.dex'并最终允许我在运行时从Jar加载类 - 时间。