Android Error Conversion to Dalvik format failed with error 1

来源:互联网 发布:网络弱电布线工程报价 编辑:程序博客网 时间:2024/05/22 04:27

由于原先用的是低版本的Maven,兼容的minSDK是Android2.3.3。而现在由于使用新版蓝牙BLE接口,将minSDK上调到Android API 18。岂料Maven打包报错,提示各种新API的系统符号未找到。

然后想到用gradle打包,去官网下载最新版的binary,发现无链接。到GitHub上下载源码发现速度只有3KB/s。

最后决定用proguardgui.bat进行混淆。
先导出该项目的jar包,然后使用proguardgui.bat进行混淆,然后再将混淆后的jar和这个项目中的其他第三方jar一起放到目标项目的libs目录下。编译一切正常,就在生成APK时报了如下错误:

[2016-09-21 15:30:26 - MainActivity] Dx UNEXPECTED TOP-LEVEL EXCEPTION:java.lang.RuntimeException: Exception parsing classes    at com.android.dx.command.dexer.Main.processClass(Main.java:752)    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)    at com.android.dx.command.dexer.Main.access$1200(Main.java:85)    at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)    at com.android.dx.command.dexer.Main.processOne(Main.java:672)    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)    at com.android.dx.command.dexer.Main.run(Main.java:277)    at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)    at java.lang.reflect.Method.invoke(Unknown Source)    at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:188)    at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:786)    at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:597)    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:726)    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321)    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396)    at org.eclipse.core.internal.resources.Project$1.run(Project.java:618)    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)    at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597)    at org.eclipse.core.internal.resources.Project.build(Project.java:124)    at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1143)    at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:155)    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:855)    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:704)    at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1047)    at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1251)    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)    at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)    at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)    at com.android.dx.command.dexer.Main.parseClass(Main.java:764)    at com.android.dx.command.dexer.Main.access$1500(Main.java:85)    at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)    at com.android.dx.command.dexer.Main.processClass(Main.java:749)    ... 32 more[2016-09-21 15:30:26 - MainActivity] Dx 1 error; aborting[2016-09-21 15:30:26 - MainActivity] Conversion to Dalvik format failed with error 1

进过一番尝试才知道原来是JDK版本的问题导致的 “Dalvik format failed”。在混淆时,我用的是JDK1.8,而在编译项目的时候用的是默认的JDK1.6。之后我改用JDK1.6的JDK进行proguard,就可以成功生产APK并运行在手机上了。

0 0