2012-02-14 1 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) 

я сузили его до попытки поймать блок для исключение IOException. Если я прокомментирую, что try catch block, то он показывает эту ошибку для другого IOException try catch block в другом месте приложения. Если я прокомментирую этот вариант, он будет успешно создан.

Таким образом, в обоих случаях proguard, кажется, разбивается на блок захвата IOException. Эти блоки были в коде в предыдущих сборках, которые прошли через proguard без каких-либо проблем раньше.

Кроме того, существуют другие блоки catch IOException, которые не дают никаких ошибок.

Я пробовал это с помощью proguard 4.5, 4.6 и 4.7, и все провалилось.

Любые идеи?

Благодаря

ответ

8

Это, кажется, ошибка в ProGuard. Вы можете зарегистрировать его на ProGuard's bug tracker, желательно с небольшим тестовым примером, который позволяет мне воспроизвести проблему, или вы можете mail it мне (Эрик, разработчик ProGuard).

В настоящее время вы можете обойти проблему, отключив оптимизацию (с опцией -dontoptimize).

+0

прежде всего, спасибо за ProGuard, это действительно удивительный и простой в использовании. Я пошел вперед и подал ошибку. Чтобы сделать это заполнение переполнения стека завершенным, вот ссылка 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

Я получал эту ошибку для proguard 5.3.3 на проекте xamarin forms. моя проблема в том, что у меня были файлы, отсутствующие в моей папке proguard, потому что, когда вы загружаете версию proguard со своего сайта, у вас нет этих файлов txt в загруженном zip-файле. Всегда лучше делать резервную копию старой програды и копировать эти файлы там, или вы можете просто создать вручную, я считаю.

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^