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

Mic*_* A. 53 java android

自从迁移到ADK14后,我无法在Windows 7系统上构建新的apks版本.

构建失败,"转换为dalvik格式失败,错误1",而控制台充满了大量的"Dx坏类文件魔术(cafebabe)或版本(0033.0000)".

完整的例外文字:

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)
Run Code Online (Sandbox Code Playgroud)

我正在构建一个使用大量库的旧项目,所以可能问题与这个事实有关.已经完成了移动到ADK14时建议的所有"修复属性"/清理等(因为我自然会遇到所有这些问题),但他们没有帮助解决这个问题.

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

[编辑]这是在Windows 7x64 PC上.我观察到在我的Linux笔记本电脑(Lucid Lynx)上包装apk以获得完全相同的代码绝对没有任何问题.

有任何想法吗?对此感到非常沮丧.

注意

显然,这个错误消息可以由各种不同的问题触发.我的特殊问题与Java 6/7无关,因为我从未安装过Java 7,并且编译器合规性设置为Java 6(我当时检查过,因为我已经看到其他地方建议的解决方案).

小智 37

使用Java 6而不是7进行编译对我有用,但只有在我将Eclipse配置为"了解"我的JRE6安装路径之后.以前我只在Eclipse中设置了JRE7.我可以将我的编译器合规性级别设置为1.6或1.5,但显然没有相应的JRE,它实际上没有任何影响.我真的不明白为什么会这样--JRE与编译有什么关系,它与Android代码有什么关系?

  • 使用带有Gradle的Android Studio,这个解决方案帮助了我.我刚刚将`sourceCompatibility = 1.6`添加到build.gradle并且它有效. (3认同)

Mic*_* A. 27

我终于找到了这个问题的解决方案.

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

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*
Run Code Online (Sandbox Code Playgroud)

将其替换为以下内容:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
Run Code Online (Sandbox Code Playgroud)

这是一个愚蠢的老问题,我实际上意识到我以前见过,现在我已经弄明白了.显然Android SDK团队仍然没有解决这个问题,并且在我干净安装Android SDK时重新引入了它.

  • 的确感谢报道.仅供将来参考:更改此批处理文件对我来说不起作用(尽管实际上同一文件夹中的所有其他批处理文件已经使用了建议的修复),但是使用Java 6而不是7进行编译. (3认同)

Lad*_*lin 25

在阅读dex工具的源代码时,这里的问题是类文件不在它可以理解的版本中.版本必须介于45-50(主要版本)之间.您在此处使用的版本是0033.0000(十六进制为0x33),十进制为51(版本号代表Java 7).这不是我的推测,我在源代码中直接发现了这一点.

以下是猜测,是什么解决了我的问题:我还没弄清楚你必须做些什么来坚定地确认你用各种选项编译时会得到什么类文件版本,但对我来说问题是我的库已被编译使用Java 7.由于Android仅支持Java 5或6,我只是在6中重新编译,并且繁荣,解决了.


小智 13

将Eclipse java版本更改为6对我有用.在Eclipse中,转到Windows-> Preferences-> Java-> Compiler并将"Compiler compliance level"设置为1.6.

奇怪的是,我有Eclipse 3.7.0并且它工作正常,而其他计算机有3.7.1并且那里构建的jar文件不起作用...


zkj*_*erg 12

如果您使用的是Android Studio,可以使用上述建议通过添加以下行来修复build.gradle中的Java 1.6 :

apply plugin: 'java'
sourceCompatibility = 1.6
targetCompatibility = 1.6
Run Code Online (Sandbox Code Playgroud)

从这篇博文中发现了这个修补程序:http://www.alonsoruibal.com/my-gradle-tips-and-tricks/


Eri*_*Kim 5

我通过右键单击Java项目 - >构建路径 - >配置构建路径解决了这个问题.转到库选项卡,选择JavaSE-1.7->按编辑然后更改为JavaSE-1.6按完成然后确定.

转到Android项目,右键单击项目 - >构建路径 - >配置构建路径转到订购和导出选项卡,选中java项目旁边的复选框以及您包含的其他库.点击确定.在您的Android项目中,删除"gen"和"bin".然后不久之后这两个文件夹将重新生成.(如果没有,那么请确保您已经以管理员的身份运行了eclipse.)

现在尝试在手机上运行android项目.Wala它工作:)


Sid*_*Sid 5

我在Eclipse转到解决了这个问题,Windows --> Preferences Java --> Compiler在右侧窗口中选择Compiler compliance level1.6,单击ApplyOk.

以及Clean Build所有应该解决问题的项目