今天使用Unity导出APK时,提示我
CommandInvokationFailure: Unable to convert classes into dex format.
然后打开Editor Log查看了下原因,上面显示是这样的:
Android PostProcess task "Creating staging area" took 12.988 ms
Android PostProcess task "Preparing Unity resources" took 53.404 ms
Android PostProcess task "Splitting assets" took 108.298 ms
Android PostProcess task "Processing OBB assets" took 0.237 ms
Android PostProcess task "Preparing Unity libraries" took 2819.138 ms
Android PostProcess task "Processing resources" took 6.315 ms
Android PostProcess task "Preparing APK resources" took 34.494 ms
Android PostProcess task "Process plugins" took 131.363 ms
Android PostProcess task "Processing AAR plugins" took 4378.021 ms
Android PostProcess task "Processing Android libraries" took 20.819 ms
Android PostProcess task "Creating Android manifest" took 1655.11 ms
Android PostProcess task "Compiling resources" took 3346.134 ms
Android PostProcess task "Verifying Android libraries" took 56.886 ms
CommandInvokationFailure: Unable to convert classes into dex format.
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/guojicheng/Documents/Android/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/sdktools.jar" -
stderr[
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoIcsImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoJellyBeanMr2;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatJellyBeanMr2;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/animation/AnimatorCompatHelper;
Uncaught translation error: java.lang.IllegalArgumentException: already added: Landroid/support/v4/animation/AnimatorListenerCompat;
重要的是看到有个“already added: Landroid/support/v4 ” 的提示,由此可知,是因为一个classes包重复存在了,需要删除。
我里面使用了谷歌广告,默认给我加了两个jar包:android-support-v4.jar,只要把这个删除,就可以编译出APK啦。
最后在网上看到,有 Unable to convert classes into dex format. 的提示基本都是有重复的jar问题,只要看看Edtior Log就可以了。
至于Editor Log怎么看,打开Unity编辑器,右击console 的Tab,会有一个 open editor log的选项,打开就可以了。这个东西非常好用,还可以看看导出的资源,有时候可以检查导出资源是否重复,什么资源占用的多,然后又针对性的优化包大小,都可以从这里入手。