多个dex文件 - 转换为Dalvik格式失败 - 无法执行dex。

18

我有两个应用程序版本,分别为专业版和精简版。它们已经在市场上推出了 v1.01 版本。我正试图发布两个版本的 v1.1 版本。此更新包括 SwawrmConnect 集成,以便使用他们的全球排行榜。

首先,我应该说我知道我没有正确维护我的代码。我有两个完全独立的应用程序,它们共享大约 90% 的代码。我将它们分开维护是因为在经过一两周或三周的尝试后,我没有找到如何做库并共享代码,所以我放弃了并采用了这种方式。

SwarmConnect 是我第一个使用并需要将库制作为两个应用程序(请参见文件结构的截图)的 jar 文件。

现在,我的精简版正在运作并准备好发布。我现在正在努力让我的专业版达到发布所需的要求。我相当确定所有的 Java/XML 文件都是最新且准备就绪的。但是,当我尝试在模拟器中运行专业版时,我收到以下错误:

[2013-04-18 11:24:41 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/swarmconnect/loopj/android/http/AsyncHttpResponseHandler;
[2013-04-18 11:24:41 - BibleTriviaPro] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/swarmconnect/loopj/android/http/AsyncHttpResponseHandler;

我尝试过的方法:

  • 清理/重新构建
  • 更新Eclipse
  • 删除bin和gen文件夹
  • 重启Eclipse
  • 还有其他一些尝试

我的文件结构:

图片描述

问题可能是我正在尝试将SwarmConnect作为2个项目(lite和pro)的库使用吗?

编辑:

下面是完美运行的lite版本的文件结构。可以在模拟器上编译和运行。

图片描述


我已经编辑了我的开场帖。你可以看到我的 Lite 版本看起来和我的 Pro 版本一样。为什么一个能工作而另一个不能?我在我的 Lite 版本中也将 jar 文件复制了两次,它可以完美地工作。 - Matt
@Matt 无论如何,重复包含一个jar文件肯定会引起问题:除非你自己查看构建文件,否则我不相信Eclipse告诉你的内容。 - Kristopher Micinski
1
BibleTriviaPro有那个小红叉附着。既然您正在添加Eclipse布局的图像,是否也可以发布问题部分的图像? - DigCamara
@Matt 你可以在 Lite 版本和 Pro 版本中各添加一次,但不能在同一个项目中重复添加。 - Sankar V
@DigCamara - 你可以在第一张截图中看到BibleTriviaPro的文件结构。红色的x出现在项目名称旁边,但在文件结构中没有其他地方出现。它只是不断发布我在开头帖子中提到的LogCat输出。 - Matt
显示剩余6条评论
5个回答

37

巧合的是,就在前天我遇到了同样的问题。以下是我建议你做的事情。

首先确保您备份了“Android Dependencies” /“libs”文件夹中所有当前存在的jar文件。

现在,让我们按照以下步骤先修复lite版本。

  1. 从Eclipse的Project Explorer下的“Android Dependencies”文件夹中删除除android-support-v4.jar以外的所有jar文件。

  2. 同样地,从Eclipse的Project Explorer下的libs文件夹中删除除android-support-v4.jar以外的所有Jar文件。

  3. 现在右键单击项目->选择属性->选择Java构建路径->选择添加外部JAR。添加所有必要的jar文件(只需确保每个jar文件仅添加一次即可)。

最后清理项目并构建它。现在将相同的步骤应用于pro版本。就这样。

更新:-如果在完成所有这些操作后,您看到Eclipse抱怨某些编译时错误,那么您可能只需要通过按Ctrl + Shift + O执行必要的导入来解决这些编译时错误。

【我假设在源代码依赖关系等方面,该项目的pro和lite版本之间没有任何链接。基本上,它们是完全独立的。】

希望这有所帮助。


我把项目放在“Project”依赖项中,而jar包则放在libs中。很笨拙。 - Siddharth
1
删除了它们,再次添加,问题解决了。多么奇怪的错误 :) - Ewald
全部删除,重新添加,问题解决了。多么奇怪的错误 :) - Ewald
此外,这个链接可能是一个更简单的解决方案。 - Abhinav
同一库的两个不同版本存在,导致错误。 - Narendra Singh
显示剩余3条评论

2

我强烈怀疑这是你的问题

  1. 右键单击你的项目
  2. 查看"Android"选项
  3. 在下方的窗格中查看是否存在"Swarm Connect"
  4. 如果没有,请添加(但我非常怀疑它已经在那里了)
  5. 从libs目录中删除Swarm.jar文件

原因是:当你将一个库项目添加到Eclipse中的Android项目中时,它不会显示在你的libs目录中。我曾经尝试仅向一个项目添加.jar文件,被告知这是错误的方法(至少在API 14之前是这样的)。

我的猜测是,在你的"非专业版"中,你没有在项目选项中链接它,因此它仍然可以正确编译。不过,你应该按照我刚刚描述的方式链接它,以避免当库尝试访问自己的资源时出现问题。


2
上述解决方案对我无效,我所要做的只是在 libs 文件夹中外部添加 jar 包,并在“顺序和导出”选项卡下取消 Android 私有库的勾选。
 right click--
             java build path--
                               order and export tab ->Uncheck Android private libraries 
                                   and add jars in the libs folder externally.

按照上述步骤操作,不知道为什么会出现这种情况。


0

我尝试了上面@Sriram的答案,但是没有起作用。

然后我不得不从项目->属性->Java构建路径->库中删除库,并将实际的jar文件(我需要android-support-v4.jar和android-support-v13.jar)添加到我的项目的libs文件夹中。然后它就起作用了:

final structure

请注意,没有“Referenced Libraries”文件夹。

-1
我之所以出现这个错误,是因为我使用了完整的Android开发工具包安装程序(Eclipse加SDK,日期为2013年2月6日)。我唯一能够摆脱它的方法是卸载所有这些内容,然后分别从eclipse.org安装Java开发人员专用的Eclipse和仅从Android网站下载Android SDK。随套件提供的Eclipse对于包含库的位置有一些奇怪的想法,更不用说残留的C++和GDB支持部分了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接