2012-02-14 2 views
5

Proguard와는 "Proguard와 오류 코드 1 반환"과 충돌되는 다른 현재의 크기를 가지고 있고 콘솔에서이 충돌 :Proguard와 : IllegalArgumentException가 : 스택은,

java.lang.IllegalArgumentException: Stacks have different current sizes [0] and [1] 
at proguard.evaluation.Stack.generalize(Stack.java:125) 
at proguard.evaluation.TracedStack.generalize(TracedStack.java:140) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:683) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:587) 
at proguard.optimize.evaluation.PartialEvaluator.visitExceptionInfo(PartialEvaluator.java:1078) 
at proguard.classfile.visitor.ExceptionHandlerFilter.visitExceptionInfo(ExceptionHandlerFilter.java:67) 
at proguard.classfile.attribute.CodeAttribute.exceptionsAccept(CodeAttribute.java:186) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateExceptionHandlers(PartialEvaluator.java:1018) 
at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:567) 
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264) 
at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181) 
at proguard.optimize.evaluation.LivenessAnalyzer.visitCodeAttribute(LivenessAnalyzer.java:205) 
at proguard.optimize.evaluation.VariableOptimizer.visitCodeAttribute(VariableOptimizer.java:105) 
at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101) 
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79) 
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95) 
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91) 
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71) 
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504) 
at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47) 
at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) 
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:116) 
at proguard.optimize.Optimizer.execute(Optimizer.java:833) 
at proguard.ProGuard.optimize(ProGuard.java:306) 
at proguard.ProGuard.execute(ProGuard.java:115) 
at proguard.ProGuard.main(ProGuard.java:492) 

내가위한 시도의 catch 블록에 좁혀 IOException 내가 catch 블록을 주석 처리하면 다른 IOException에 대해이 오류가 표시됩니다. catch 블록은 응용 프로그램의 다른 곳에 있습니다. 그 중 하나를 언급하면 ​​성공적으로 빌드됩니다.

그래서 두 장소에서 proguard는 IOException try catch 블록에서 충돌하는 것으로 보입니다. 이 블록은 이전에 아무런 문제없이 proguard를 통과 한 이전 빌드의 코드에있었습니다.

또한 오류를주지 않는 다른 IOException catch 블록이 있습니다.

proguard 4.5, 4.6 및 4.7에서이 작업을 시도했지만 모두 실패했습니다.

아이디어가 있으십니까?

감사

답변

8

이것은 ProGuard에서 버그가 나타납니다. ProGuard's bug tracker에 로그인 할 수 있습니다. 문제가 재현 될 수있는 작은 테스트 케이스로 로그인하거나 mail it (Progard 개발자) Emer 일 수 있습니다.

당분간은 최적화를 해제하여 문제를 해결할 수 있습니다 (옵션).

+0

첫째로, 그것은 정말 굉장하고 사용하기 쉬운 난독 너무 감사합니다. 나는 앞서 가서 버그를 신청했다. 이 스택 오버플로 포스트를 완성하기 위해 링크는 다음과 같습니다 https://sourceforge.net/tracker/?func=detail&aid=3487940&group_id=54750&atid=474704 다시 한번 감사드립니다. – cottonBallPaws

+0

ProGuard 버전 5.2.1에서 여전히 발생합니다 .- ( –

+0

5.3.3도 여기에 해결책이 있습니까? – batmaci

0

xamarin 양식 프로젝트에서 proguard 5.3.3에 대해이 오류가 발생했습니다. 내 문제는 내 proguard 폴더에 파일이 누락되어 있었기 때문에 웹 사이트에서 proguard 버전을 다운로드 할 때 다운로드 된 zip에 이러한 txt 파일이 없기 때문입니다. 오래된 proguard를 백업하고 거기에서이 파일을 복사하는 것이 항상 좋습니다. 또는 수동으로 만들 수 있습니다.

enter image description here

관련 문제