首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DexClassLoader期望libraryPath的输入是什么?

DexClassLoader期望libraryPath的输入是什么?
EN

Stack Overflow用户
提问于 2016-03-03 02:59:02
回答 1查看 640关注 0票数 0

DexClassLoader结构器如下所示:

代码语言:javascript
复制
public DexClassLoader (String dexPath, String optimizedDirectory, String libraryPath, ClassLoader parent)

DexClassLoader对libraryPath的期望是什么(除了null)?

是否可以将外部库作为参数传递给DexClassLoader?如果是这样的话,libraryPath参数的行为是否类似于java的-classpath cmd行选项?我编写了一个简单的java应用程序,它将jar文件作为外部库引用,现在我想在android应用程序中复制这种行为。

我有一个带有数学函数的jar : MyMath.jar -包含一个类"add“和一个方法"Add”。在我的主程序中,我从MyMath.jar导入了"mymath“包,创建了Add类的一个实例,并调用了它的add方法。

要构建,我使用: javac -classpath ./lib/MyMath.jar MainProgram.java

要运行,我使用: java -classpath .;./lib/myMath.jar MainProgram

这成功地利用了MyMath.jar访问我的主程序中的"Add“类。现在我需要在android应用程序中复制这一功能,但是我无法成功地用DexClassLoader加载DexClassLoader,下面是我的实现:

代码语言:javascript
复制
DexClassLoader classloader = new DexClassLoader("/storage/sdcard/Download/MainProgram.jar", codeCacheDir.getAbsolutePath(), "/storage/sdcard/Download/MyMath.jar", ClassLoader.getSystemClassLoader());

我可以用类加载器实例化类并调用不依赖于" MyMath.jar“的方法,但不能调用依赖于MyMath.jar的方法。

下面是当我试图调用依赖于MyMath.jar的方法时抛出的异常:

代码语言:javascript
复制
java.lang.reflect.InvocationTargetException                                                     at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   ...
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/mymath/Add;
   ...
   at java.lang.reflect.Method.invoke(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mymath.Add" on path: DexPathList[[zip file "/storage/sdcard/Download/MainProgram.jar"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]

当我使用MyMath.jar加载MainProgram.jar时,如何链接DexClassLoader库?

EN

回答 1

Stack Overflow用户

发布于 2016-03-03 04:25:16

这个库可能会有所帮助:dex/src/com/example/dex/DexInjector.java

首先,您可以通过以下方法将jar文件转换为dex文件

代码语言:javascript
复制
dx --dex --output ./MyMath_dex.jar ./MyMath.jar

然后,您可以在Android中加载您的dex文件,有关更多信息,您可以在上面的库中阅读源代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35762358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档