13

我知道这个问题的一种形式就在那里,但我找不到任何适合我的场景的东西,所以就在这里。

在模拟器中测试时,我的应用程序可以完美编译和运行,但是当我尝试导出已签名的 apk 时,我得到了Conversion to Dalvik format failed with error 1. Eclipse 错误日志显示此堆栈跟踪:

com.android.ide.eclipse.adt.internal.build.DexException: Conversion to Dalvik format failed with error 1
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:751)
at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:269)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:296)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:233)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:218)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

我没有其他人似乎有的命名冲突(至少它在错误中没有这样说),而且我很难理解它为什么在模拟器中运行,但我无法导出。

顺便说一句,我也没有使用 ProGuard。

4

3 回答 3

27

看起来 ADT 21 在你的 bin 中添加了一个名为 dexedLibs 的文件夹,它应该通过将 jar 和库放入预编译的 dex 代码中来加速部署。我在那里有两个版本的支持库,所以我删除了文件夹中的所有文件并重新构建它并且它工作。如果我尝试使用其中的任何文件进行构建,那么构建会失败,所以我必须在每次导出之前删除它们。我正在使用 ActionBar Sherlock,这可能与 dexedLibs 冲突,因为除非文件夹最初为空,否则它不会出现在那里。

编辑:当这个问题第一次出现时,我一直在使用ActionBarSherlock,但最近切换到了ActionBarCompat。自从切换后,我不再需要在导出时删除 dexedLibs 文件夹。看起来也许 ActionBarSherlock 是罪魁祸首,但我不能确定。

于 2013-04-18T21:44:46.717 回答
12

转到项目并取消选择自动构建。然后清理项目并全部构建。为我导出签名的应用程序包工作

于 2013-12-13T06:21:04.767 回答
2

经过多次尝试,我设法找出了发生此问题的原因。一般来说,这是由 ProGuard 尤其是它的优化引起的。至少在我的情况下,我有 4 个出现此错误的损坏项目,但在我禁用 ProGuard 优化后,所有项目都正确构建。因此,在您的 ProGuard 配置中注释 -optimizations 和 -optimizationpasses 选项并添加 -dontoptimize

# -optimizations ...
# -optimizationpasses 5

-dontoptimize

希望这可以帮助。

于 2014-12-02T21:48:40.123 回答