这个问题我印象中遇到3次了,都是稍微动了一下工程配置或者升级了一下什么东西就容易出现。由于出现没啥征兆,导致每次解决也浪费好多时间,特别记录一下,下次能快点处理掉。

报错日志如下:

  1. [2013-03-07 10:09:51 - pirateage-android] Proguard returned with error code 1. See console 
  2. [2013-03-07 10:09:51 - pirateage-android] Note: there were 2626 duplicate class definitions. 
  3. [2013-03-07 10:09:51 - pirateage-android]       You should check if you need to specify additional program jars. 
  4. [2013-03-07 10:09:51 - pirateage-android] Unexpected error while computing stack sizes: 
  5. [2013-03-07 10:09:51 - pirateage-android]   Class       = [com/badlogic/gdx/graphics/glutils/ShaderProgram] 
  6. [2013-03-07 10:09:51 - pirateage-android]   Method      = [loadShader(ILjava/lang/String;)I] 
  7. [2013-03-07 10:09:51 - pirateage-android]   Exception   = [java.lang.IllegalArgumentException] (Stack size becomes negative after instruction [105] putfield #88 in [com/badlogic/gdx/graphics/glutils/ShaderProgram.loadShader(ILjava/lang/String;)I]) 
  8. [2013-03-07 10:09:51 - pirateage-android] java.lang.IllegalArgumentException: Stack size becomes negative after instruction [105] putfield #88 in [com/badlogic/gdx/graphics/glutils/ShaderProgram.loadShader(ILjava/lang/String;)I] 
  9. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.attribute.visitor.StackSizeComputer.evaluateInstructionBlock(StackSizeComputer.java:334) 
  10. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.attribute.visitor.StackSizeComputer.visitBranchInstruction(StackSizeComputer.java:197) 
  11. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.instruction.BranchInstruction.accept(BranchInstruction.java:140) 
  12. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.attribute.visitor.StackSizeComputer.evaluateInstructionBlock(StackSizeComputer.java:355) 
  13. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.attribute.visitor.StackSizeComputer.visitCodeAttribute0(StackSizeComputer.java:153) 
  14. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.attribute.visitor.StackSizeComputer.visitCodeAttribute(StackSizeComputer.java:110) 
  15. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.editor.StackSizeUpdater.visitCodeAttribute(StackSizeUpdater.java:49) 
  16. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.editor.MemberReferenceFixer.visitCodeAttribute(MemberReferenceFixer.java:322) 
  17. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101) 
  18. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79) 
  19. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.editor.MemberReferenceFixer.visitProgramMember(MemberReferenceFixer.java:285) 
  20. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91) 
  21. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71) 
  22. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504) 
  23. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.editor.MemberReferenceFixer.visitProgramClass(MemberReferenceFixer.java:82) 
  24. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) 
  25. [2013-03-07 10:09:51 - pirateage-android]   at proguard.classfile.ClassPool.classesAccept(ClassPool.java:116) 
  26. [2013-03-07 10:09:51 - pirateage-android]   at proguard.optimize.Optimizer.execute(Optimizer.java:457) 
  27. [2013-03-07 10:09:51 - pirateage-android]   at proguard.ProGuard.optimize(ProGuard.java:306) 
  28. [2013-03-07 10:09:51 - pirateage-android]   at proguard.ProGuard.execute(ProGuard.java:115) 
  29. [2013-03-07 10:09:51 - pirateage-android]   at proguard.ProGuard.main(ProGuard.java:492) 

    反复比较libgdx给的示例工程和自己工程的区别,发现自己工程不知道为什么多出来一个android dependencies的lib库合集,里面包含了android-4.2.jar,这个就和我给工程默认添加的android 2.2类库android.jar是有重复的。后来查证出现重复类库打包就容易出现“Conversion to Dalvik format failed with error 1”的报错。

    最后删掉这个类库合集,重新打包就对了。但是有个地方比较奇怪,就是export的里面不能带有gdx-crontrollers和gdx-crontrollers-android的工程,否则会有一些super class找不到的问题,可能这个地方用到了比android 2.2类库更高级类库里面的东西,但是不带上这两个包也没看出来有任何的差异,这个没深入研究。至此总算顺利打包。