Unity打包APK错误:CommandInvokationFailure: Unable to convert classes into dex format.

Unity打包APK错误:CommandInvokationFailure: Unable to convert classes into dex format.

背景描述

使用unity5.4.3+vuforia-unity-6-2-10 做一个简单的AR识别图demo。

错误描述

在打包到Android平台导出apk时出现了如下图的错误:
Unity打包APK错误:CommandInvokationFailure: Unable to convert classes into dex format._第1张图片
接着根据错误弹窗的提示查看Console面板,错误提示如下:
Unity打包APK错误:CommandInvokationFailure: Unable to convert classes into dex format._第2张图片
具体他错误提示为:
CommandInvokationFailure: Unable to convert classes into dex format.
C:/Program Files (x86)/Java/jdk1.7.0_55\bin\java.exe -Xmx1024M -Dcom.android.sdkmanager.toolsdir=”D:/2DGamesetup/Android_SDK\tools” -Dfile.encoding=UTF8 -jar “D:\unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar” -

stderr[
Exception in thread “main” java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader\$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader\$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at SDKMain.main(SDKMain.java:127)
]
stdout[

]
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandInternal (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandSafe (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.HostView:OnGUI()

解决方法

通过上面加粗的文字:
UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
可以发现这应该是jdk版本问题。通过网上查找version 52.0所对应的是jdk1.8。所以这个问题的原因就是用了低版本的jdk运行了高版本的jdk编译的文件。通过更换JDK就可以解决了。
具体步骤是:首先安装JDK1.8的安装包,然后配置环境变量,接着点击Unity菜单栏的Edit->Preferences->External Tools更换JDK。
更换前:
这里写图片描述
更换后:
这里写图片描述
接着再进行打包APK,成功打包。

注意:之前打包时也遇到过Unable to convert classes into dex format. 错误,一般是jar文件重复编译,通过这次打包错误:学到了应该仔细查看并分析错误提示,做到具体问题具体分析。

你可能感兴趣的:(游戏开发-Unity)