繁体   English   中英

为什么我的Android应用程序因特定库的NoClassDefFoundError而崩溃?

[英]Why does my Android app crash with NoClassDefFoundError for one specific library?

我有一个Android应用程序项目(A)和一个Android库项目(L)。 A使用L作为库。

L,库项目,已经使用了一些外部库:Apache Commons Codec 1.7,Apache Commons Lang3 3.1,Android支持库V4和ActionBarSherlock 4.0,作为库项目引用。 所有这些库以及调用它们的代码都可以正常工作,并且已经运行了一段时间。

但是,我最近添加了一个库:Apache Commons IO 2.4。 现在我的应用程序在库代码(在L中)尝试调用Commons IO中的方法时崩溃。

我添加IO库的方式与添加其他所有外部库的方式完全相同: 建立路径

当我的申请首次开始时,我得到:

11-01 12:32:14.243: I/dalvikvm(3815): Could not find method org.apache.commons.io.FileUtils.copyInputStreamToFile, referenced from method au.com.grdc.alib.helpers.LibraryCommon.download
11-01 12:32:14.243: W/dalvikvm(3815): VFY: unable to resolve static method 7039: Lorg/apache/commons/io/FileUtils;.copyInputStreamToFile (Ljava/io/InputStream;Ljava/io/File;)V

后来我得到:

11-01 14:50:48.913: E/AndroidRuntime(10030): FATAL EXCEPTION: AsyncTask #1
11-01 14:50:48.913: E/AndroidRuntime(10030): java.lang.RuntimeException: An error occured while executing doInBackground()
...
11-01 12:35:10.268: E/AndroidRuntime(4493): Caused by: java.lang.NoClassDefFoundError: org.apache.commons.io.FileUtils
11-01 12:35:10.268: E/AndroidRuntime(4493):     at au.com.grdc.alib.helpers.LibraryCommon.download(LibraryCommon.java:89)

我看到建议将我的“lib”文件夹重命名为“libs”,我已经完成了 - 这没有解决问题。

我还看到了要标记要导出的外部库的建议,我也已经完成了,并且还没有解决问题。

  1. 更新你的eclipse-android-plugin和android-tools(他们改变了libs的处理方式)
  2. 确保您的项目中有“libs”(非“lib”)文件夹。
  3. 将所有库jar放在'libs'文件夹中。
  4. 确保“libs”文件夹中的库jar不会像在普通的java项目中那样添加到构建路径中。 Android会自动添加它们。 如果查看“项目”>“属性”>“Java构建路径”>“库”:
    1. 确保顶层没有显示单个库库(否则删除它们)
    2. 检查是否存在名为“Android Dependencies”的自动创建的顶级依赖关系组。
    3. 检查libs文件夹中的所有jar都已自动添加到“Android Dependencies”组中

对(A)和(L)两者执行上述步骤。

还要确保(A)对(L)没有普通java风格的项目依赖。 项目>属性> Java构建路径>(A)的项目不应列出(L),否则删除。

确保项目>属性> Android(A)列在库部分项目(L)中,否则添加。

可能是org.apache.commons.io.FileUtils存在于几个jar中,而JVM无法解析使用哪个..你可以交叉检查吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM