2012-11-23 42 views
0

我有一个Android应用程序需要能够加载外部Jar文件。我知道罐子的位置。Android:通过ClassLoader加载外部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可以非常高兴地加载这些类。

简而言之:如何在不需要'classes.dex'的情况下从外部Jar文件加载类?

非常感谢, P

更新 通过的Dalvik记录的消息是

Zip是好的,但没有classes.dex内,并在同一目录中没有有效.odex文件

回答

0

我发现了解决方案。发布这个问题时,我可能太匆忙了。

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

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

+0

嗨@protectedmember,我处于类似的情况。您能否告诉我要采取的措施?我实际上已经使用dex2jar将apk转换为jar文件。现在,当我使用dexclassloader加载这个类时,有一个错误,例如'Zip很好,但没有classes.dex,并且在同一个目录下没有有效的.odex文件。 – Lal

1

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