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



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

我一直在玩Android API提供的PathClassLoader类,但没有用。我在活动中使用以下代码:

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文件

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

我发现了解决方案。也许我在发布这个问题时太草率了。

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

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

最新更新