1

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

我一直在玩 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”。

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

简单地说:如何在不需要“classes.dex”的情况下从外部 Jar 文件中加载类?

非常感谢,P

更新 Dalvik 记录的消息是

zip很好,但是里面没有classes.dex,同一目录下也没有有效的.odex文件

4

2 回答 2

2

有一个叫“dx”的工具,这个工具可以把Java Binary Code转换成Android Dalvik Binary code。在 Android 中,无法识别 Java 二进制代码。

于 2013-05-08T12:57:05.360 回答
0

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

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

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

于 2012-11-23T19:33:20.593 回答