为什么ant build会在启用proguard的情况下失败?

时间:2014-03-14 15:09:16

标签: android ant

我正在使用标准生成的build.xml文件进行ant构建。 当我键入ant debug时,它会成功构建,但是当我运行ant release命令时,它会失败。我猜这与proguard规则有关,但是它在发布模式下在eclipse上成功构建。

如何将其配置为与proguard一起正常工作?

这是我得到的例外。

  

[proguard]优化......

     

BUILD FAILED C:\ android \ sdk \ tools \ ant \ build.xml:875:   java.lang.IllegalArgumentException:Value不是引用值   [proguard.evaluation.value.Instru ctionOffsetValue]           在proguard.evaluation.value.Value.referenceValue(Value.java:97)           在proguard.optimize.evaluation.SimpleEnumUseSimplifier.isPoppingSimpleEnum(SimpleEnumUseSimplifier.java:530)           在proguard.optimize.evaluation.SimpleEnumUseSimplifier.isPoppingSimpleEnum(SimpleEnumUseSimplifier.java:520)           在proguard.optimize.evaluation.SimpleEnumUseSimplifier.visitVariableInstruction(SimpleEnumUseSimplifier.java:229)           在proguard.classfile.instruction.VariableInstruction.accept(VariableInstruction.java:306)           在proguard.optimize.evaluation.SimpleEnumUseSimplifier.visitCodeAttribute(SimpleEnumUseSimplifier.java:131)           在proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)           在proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79)           在proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)           在proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91)           在proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71)           在proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504)           在proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47)           在proguard.classfile.ProgramClass.accept(ProgramClass.java:346)           在proguard.classfile.ClassPool.classesAccept(ClassPool.java:124)           在proguard.optimize.Optimizer.execute(Optimizer.java:373)           在proguard.ProGuard.optimize(ProGuard.java:306)           在proguard.ProGuard.execute(ProGuard.java:115)           在proguard.ant.ProGuardTask.execute(ProGuardTask.java:316)           在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)           at sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)           at java.lang.reflect.Method.invoke(Method.java:606)           在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)           at org.apache.tools.ant.Task.perform(Task.java:348)           在org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)           在com.android.ant.IfElseTask.execute(IfElseTask.java:120)           在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)           at sun.reflect.GeneratedMethodAccessor4.invoke(未知来源)           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)           at java.lang.reflect.Method.invoke(Method.java:606)           在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)           at org.apache.tools.ant.Task.perform(Task.java:348)           在org.apache.tools.ant.Target.execute(Target.java:435)           在org.apache.tools.ant.Target.performTasks(Target.java:456)           在org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)           在org.apache.tools.ant.Project.executeTarget(Project.java:1364)           at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)           在org.apache.tools.ant.Project.executeTargets(Project.java:1248)           在org.apache.tools.ant.Main.runBuild(Main.java:851)           在org.apache.tools.ant.Main.startAnt(Main.java:235)           在org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)           在org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

2 个答案:

答案 0 :(得分:4)

这是ProGuard 4.11版的错误。

http://sourceforge.net/p/proguard/bugs/505/

替代降级,替代解决方案可以是关闭导致问题的特定优化。

在您的proguard文件中包含此行:

-optimizations !class/unboxing/enum

答案 1 :(得分:2)

我找到了解决方案。

这个问题与我更新到4.11

的proguard版本有关

恢复到4.7并开始工作!