当前位置: 代码迷 >> Android >> 为什么启用proguard时蚂蚁构建失败?
  详细解决方案

为什么启用proguard时蚂蚁构建失败?

热度:113   发布时间:2023-08-04 12:50:25.0

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

如何配置它以使其与proguard一起正常使用?

这是我的例外。

[proguard]优化...

失败的C:\\ android \\ sdk \\ tools \\ ant \\ build.xml:875:java.lang.IllegalArgumentException:值不是proguard.evaluation.value.Value的参考值[proguard.evaluation.value.InstructionOffsetValue]。在proguard.optimize.evaluation.SimpleEnumUseSimplifier.isPoppingSimpleEnum(SimpleEnumUseSimplifier.java:520)的proguard.optimize.evaluation.SimpleEnumUseSimplifier.isPoppingSimpleEnum(SimpleEnumUseSimplifier.java:530)的referenceValue(Value.java:97) proguard.classfile.at中的.visitVariableInstruction(SimpleEnumUseSimplifier.java:229)在proguard.class.instruction.VariableInstruction.accept(VariableInstruction.java:306)在proguard.optimize.evaluation.SimpleEnumUseSimplifier.visitCodeAttribute(SimpleEnumUseSimplifier.java:131)在proguard.classfile。 proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79)上的CodeAttribute.accept(CodeAttribute.java:101)at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMem 在proguard.classfile.ProgramClass.methodsAccept(ProgramClass)的proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71)的proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91)的ber(AllAttributeVisitor.java:95) .java:504)位于proguard.classfile.ClassPool.classesAccept(ClassPool.java :)上proguard.classfile.ProgramClass.accept(ProgramClass.java:346)上的proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47) 124)的proguard.optimize.Optimizer.execute(Optimizer.java:373)的proguard.ProGuard.optimize(ProGuard.java:306)的proguard.ProGuard.execute(ProGuard.java:115)的proguard.ant.ProGuardTask。在org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)处在sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)处执行(ProGuardTask.java:316)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl。 org.apache.tools.ant中的java.lang.reflect.Method.invoke(Method.java:606)中的java:43)。 org.apache.tools.ant.Task.perform(Task.java:348)上的dispatch.DispatchUtils.execute(DispatchUtils.java:106)在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)在sun.reflect.GeneratedMethodAccessor4.invoke(未知源)在org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java)处java.lang.reflect.Method.invoke(Method.java:606)处sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) :106),位于org.apache.tools.ant.Task.perform(Task.java:348),位于org.apache.tools.ant.Target.execute(Target.java:435),位于org.apache.tools.ant。 org.apache.tools.ant.Project.execute上的Target.performTasks(Target.java:456)org上org.apache.tools.ant.Project.executeTarget(Project.java:1364)上的SortedTargets(Project.java:1393) org.apache的.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)。 org.apache.tools.ant.Main.startAnt(Main.java:上的org.apache.tools.ant.Main.runBuild(Main.java:851)上的tools.ant.Project.executeTargets(Project.java:1248) 235)在org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)在org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

这是ProGuard 4.11版的错误。

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

在您的proguard文件中包括以下行:

-optimizations !class/unboxing/enum

我找到了解决方案。

问题与我更新至4.11的proguard版本有关

恢复到4.7,它开始起作用!

  相关解决方案