Proguard: IllegalArgumentException: стеки имеют разные текущие размеры - PullRequest
5 голосов
/ 14 февраля 2012

Proguard падает с «Proguard возвращен с кодом ошибки 1», и это падение в консоли:

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)

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

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

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

Я пробовал этос proguard 4.5, 4.6 и 4.7 и все не удалось.

Есть идеи?

Спасибо

Ответы [ 2 ]

10 голосов
/ 15 февраля 2012

Это похоже на ошибку в ProGuard.Вы можете войти в нее на трекере ошибок ProGuard , желательно с небольшим тестовым набором, который позволяет мне воспроизвести проблему, или вы можете отправить ее мне (Эрик, разработчик ProGuard).

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

0 голосов
/ 07 ноября 2017

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

enter image description here

...