首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >带有ADK14的Dx错误类文件魔术(cafebabe)或版本(0033.0000

带有ADK14的Dx错误类文件魔术(cafebabe)或版本(0033.0000
EN

Stack Overflow用户
提问于 2011-10-23 22:31:17
回答 17查看 36.8K关注 0票数 54

自从迁移到ADK14以来,我一直无法在我的Windows7系统上构建新的apks来发布。

构建失败,“转换到dalvik格式失败,错误为1",而控制台充满了许多"Dx坏类文件魔术(cafebabe)或版本(0033.0000)”。

完整的异常文本:

代码语言:javascript
复制
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:740)
at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:204)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:290)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:229)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:214)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

我正在构建一个使用了很多库的旧项目,所以这个问题大概与这个事实有关。我已经做了迁移到ADK14时建议的所有“修复属性”/Clean等(因为我自然有所有这些问题),但他们没有帮助这一点。

所有的库都在相同的Android SDK和JDK/JRE版本上,所以这似乎不是issue.And事实上,这个应用程序很容易在调试中构建并安装在我的旧版本1.5HTC Magic上-只有当我需要导出一个签名的应用程序包时,它才会崩溃。

在Windows 7x64 PC上编辑此文件。我观察到,在我的Linux笔记本电脑(Lucid Lynx)上为完全相同的代码打包apk绝对没有任何问题。

有什么想法吗?对此感到非常沮丧。

笔记

显然,这个错误消息可以由各种不同的问题触发。我的特殊问题与Java 6/7无关,因为我从一开始就没有安装过Java 7,并且编译器遵从性设置为Java 6(我当时检查过,因为我在其他地方看到过该解决方案)。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2011-11-15 17:42:54

我终于找到了解决这个问题的办法。

如果你查看Proguard.bat (Android SDK\tools\proguard\bin),你会发现下面这行:

代码语言:javascript
复制
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

将其替换为以下内容:

代码语言:javascript
复制
call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9

这是一个愚蠢的老问题,我实际上意识到我以前见过,现在我已经弄清楚了。显然Android SDK团队还没有解决这个问题,当我干净地安装Android SDK时,这个问题又被重新引入。

票数 27
EN

Stack Overflow用户

发布于 2012-02-20 03:08:30

对于我来说,使用Java6而不是7进行编译是可行的,但前提是我将Eclipse配置为“知道”我的JRE6安装路径。以前,我只在Eclipse中设置了JRE7。我可以将我的编译器遵从性级别设置为1.6或1.5,但显然没有相应的JRE,这实际上没有任何效果。我真的不明白为什么会这样-- JRE与编译有什么关系,与Android代码又有什么关系?

票数 37
EN

Stack Overflow用户

发布于 2012-01-28 07:32:47

在阅读dex工具的源代码时,这里的问题是类文件不在它可以理解的版本中。版本必须在45-50 (主版本)之间。您在这里使用的版本是0033.0000 (十六进制的0x33),它是十进制的51 (代表Java 7的版本号)。这不是我的猜测,我是直接在源代码中找到的。

以下是猜测,以及是什么解决了我的问题:我还没有弄清楚你必须做什么来确定你用各种选项编译后会得到什么类文件版本,但对我来说,问题是我的库是用Java 7编译的。由于Android只支持Java 5或6,我只是简单地在6中重新编译,然后就解决了。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7866723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档