Proguard 4.7 с Eclipse SDK 3.7.1: сбой Proguard с java.io.IOException - (неизвестный тип проверки [25] во фрейме стековой карты)

1

Обновление: эта проблема исправлена ​​в новых версиях Samsung SPen SDK.

Я пытаюсь создать подписанный APK с Eclipse 3.7.1, запуская Proguard 4.7 как часть процесса. Тем не менее, я не могу запустить Proguard для проектов, включая Samsung SPen SDK 1.5, и получить следующие ошибки:

[2012-01-16 14:16:45 - SDraw_Example1] Proguard returned with error code 1. See console
[2012-01-16 14:16:45 - SDraw_Example1] java.io.IOException: Can't read [C:\Work\Mobile\EclipseWorkspace\SDraw_Example1\libs\libspen.jar] (Can't process class [com/samsung/sdraw/CanvasView.class] (Unknown verification type [25] in stack map frame))
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.InputReader.readInput(InputReader.java:230)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.InputReader.readInput(InputReader.java:200)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.InputReader.readInput(InputReader.java:178)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.InputReader.execute(InputReader.java:78)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.ProGuard.readInput(ProGuard.java:196)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.ProGuard.execute(ProGuard.java:78)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.ProGuard.main(ProGuard.java:492)
[2012-01-16 14:16:45 - SDraw_Example1] Caused by: java.io.IOException: Can't process class [com/samsung/sdraw/CanvasView.class] (Unknown verification type [25] in stack map frame)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.io.ClassReader.read(ClassReader.java:112)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.io.JarReader.read(JarReader.java:65)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.InputReader.readInput(InputReader.java:226)
[2012-01-16 14:16:45 - SDraw_Example1]  ... 6 more
[2012-01-16 14:16:45 - SDraw_Example1] Caused by: java.lang.RuntimeException: Unknown verification type [25] in stack map frame
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.io.ProgramClassReader.createVerificationType(ProgramClassReader.java:890)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.io.ProgramClassReader.visitFullFrame(ProgramClassReader.java:659)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.io.ProgramClassReader.visitStackMapTableAttribute(ProgramClassReader.java:452)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.io.ProgramClassReader.visitCodeAttribute(ProgramClassReader.java:422)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:200)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[2012-01-16 14:16:45 - SDraw_Example1]  at proguard.io.ClassReader.read(ClassReader.java:91)
[2012-01-16 14:16:45 - SDraw_Example1]  ... 11 more

Аналогичные проблемы были сообщены для Java 7, но мой уровень соответствия компиляторам Java установлен на 1.6, и я проверил jre6 в "Установленные JRE".

Вы можете получить исходный код, чтобы воспроизвести проблему на веб-сайте Samsung Mobile здесь: http://innovator.samsungmobile.com/down/cnts/toolSDK.detail.view.do?platformId=1&cntsId=10210

Я пытаюсь экспортировать образец проекта SDraw_Example1, включенный в указанный выше Zip файл.

Любая идея о том, что может вызвать проблему и как ее исправить? Спасибо!

Теги:
proguard

2 ответа

1
Лучший ответ

Проблема вызвана коррумпированной информацией предварительной проверки (атрибутом StackMapTable), прикрепленной к методу в библиотеке SPen (libspen.jar). Библиотека, похоже, была обработана самим ProGuard, но, возможно, предварительная проверка была неверно сконфигурирована или другой инструмент впоследствии прервал информацию предварительной проверки. Вы можете изменить ProGuard, чтобы игнорировать атрибут и даже предварительно проверять библиотеку. Я сообщу Samsung в ваш поток на форуме разработчиков.

  • 1
    Спасибо, Эрик! Я просмотрел документацию Proguard, но не могу понять, как игнорировать атрибут StackMapTable, чтобы снова провести предварительную проверку библиотеки. Я попробовал это, но я просто снова получаю исходную ошибку, и Proguard не выдает никаких результатов. C:\Android\android-sdk\tools\proguard\lib>java -jar proguard.jar -injars libspen.jar -outjars libspen_rePG.jar -dontshrink -dontoptimize -dontobfuscate
  • 0
    Нашел эту ветку sourceforge.net/tracker/… так что, думаю, мне нужно изменить исходный код Proguard и перестроить его. Я начал делать это, но сталкиваюсь с различными проблемами. Есть ли какие-либо справочные ресурсы о восстановлении Proguard?
Показать ещё 1 комментарий
1

Я встретил ту же проблему, но она исчезла, когда я изменил формат выходного класса на 1.6. похоже, spenlib.jar скомпилирован с классом 1.6, а ваш компилятор установлен в 1,5 или наоборот. Я понятия не имею, почему прокуратура жалуется на него, но это сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню