我有一个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文件
答案 0 :(得分:1)
有一个名为“dx”的工具,这个工具可以将Java二进制代码转换为Android Dalvik二进制代码。在Android中,无法识别Java二进制代码。
答案 1 :(得分:0)
我发现了解决方案。在发布问题时,也许我太仓促了。
当然.dex文件是必需的,因为这正是Dalvik执行的。
为了解决我的问题,我已将外部Jar文件设为dex,因此它们现在包含了自己的“classes.dex”。幸运的是,这是我们持续集成环境的一部分,所以一旦我们检查并构建了Android库,通过dx.exe的额外中间步骤会生成'classes.dex'并最终允许我在运行时从Jar加载类 - 时间。