Я пытаюсь создать подписанный 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 файл.
Любая идея о том, что может вызвать проблему и как ее исправить? Спасибо!
Проблема вызвана коррумпированной информацией предварительной проверки (атрибутом StackMapTable), прикрепленной к методу в библиотеке SPen (libspen.jar). Библиотека, похоже, была обработана самим ProGuard, но, возможно, предварительная проверка была неверно сконфигурирована или другой инструмент впоследствии прервал информацию предварительной проверки. Вы можете изменить ProGuard, чтобы игнорировать атрибут и даже предварительно проверять библиотеку. Я сообщу Samsung в ваш поток на форуме разработчиков.
Я встретил ту же проблему, но она исчезла, когда я изменил формат выходного класса на 1.6. похоже, spenlib.jar скомпилирован с классом 1.6, а ваш компилятор установлен в 1,5 или наоборот. Я понятия не имею, почему прокуратура жалуется на него, но это сработало.
C:\Android\android-sdk\tools\proguard\lib>java -jar proguard.jar -injars libspen.jar -outjars libspen_rePG.jar -dontshrink -dontoptimize -dontobfuscate