【问题标题】:Conversion to Dalvik format failed with error 1 in Android on export (adt 21)导出时在 Android 中转换为 Dalvik 格式失败,出现错误 1 ​​(adt 21)
【发布时间】:2014-12-03 05:48:40
【问题描述】:

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

在模拟器中测试时,我的应用程序可以完美编译并运行,但是当我尝试导出已签名的 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。

【问题讨论】:

  • 访问此处进行相同的问题讨论,它可能对您有所帮助stackoverflow.com/questions/2680827/…
  • 在这种情况下对我有帮助的是:删除“bin”文件夹的所有内容,清理项目,在测试设备上运行应用程序,再次构建签名的发布 apk。

标签: android


【解决方案1】:

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

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

【讨论】:

  • 解决了!!在导出 apk 之前,刚刚从 bin 文件夹中删除了 dexedLibs 文件夹
  • 在 ADT 22 上遇到了同样的问题,这完成了工作!
  • 非常感谢!在导出之前删除 dexedLibs 文件夹对我有帮助!
【解决方案2】:

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

【讨论】:

  • 我删除了我的 bin 文件夹中的所有内容,清理了,没有任何帮助。不过,它做到了!
  • 我不能接受你的回答,我没有问这个问题。
【解决方案3】:

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

# -optimizations ...
# -optimizationpasses 5

-dontoptimize

希望这会有所帮助。

【讨论】:

  • 我已经尝试了所有建议的解决方案,但这是唯一适合我的解决方案。
  • 但这不是很糟糕吗?我的意思是假设我想发布我的应用程序。去优化的版本不会比优化的版本差吗?这个问题在我做了一些代码更改后发生在我身上,所以我想知道 ProGuard 是否混淆了我引入的一些新符号......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
  • 2012-02-08
相关资源
最近更新 更多