4

我有一个 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”,我已经这样做了——这并没有解决问题。

我还看到了标记要导出的外部库的建议,我也这样做了,但也没有解决问题。

4

2 回答 2

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

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

还要确保 (A) 对 (L) 没有纯 java 样式的项目依赖项。Project > Properties > Java Build Path > Projects for (A) 不应列出 (L),否则删除。

确保在库部分项目 (L) 中列出 Project > Properties > Android for (A),否则添加。

于 2012-11-05T00:01:56.420 回答
0

可能是 org.apache.commons.io.FileUtils 存在于多个 jar 中,并且 JVM 无法解析使用哪一个 .. 你能交叉检查一下吗?

于 2012-11-01T04:47:20.390 回答