android - Proguard 4.7 与 Eclipse SDK 3.7.1 : Proguard fails with java. io.IOException -(堆栈映射框架中的未知验证类型 [25])

标签 android eclipse proguard

更新:此问题已在三星 SPen SDK 的新版本中修复。

我正在尝试使用 Eclipse 3.7.1 创建签名的 APK,并在此过程中运行 Proguard 4.7。 但是,我无法在包含三星 SPen SDK 1.5 的项目上运行 Proguard,并出现以下错误:

[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,并且我在“已安装的 JRE”中检查了 jre6。

您可以在 Samsung Mobile 的网站上获取重现问题的源代码: http://innovator.samsungmobile.com/down/cnts/toolSDK.detail.view.do?platformId=1&cntsId=10210

我正在尝试导出包含在上述 Zip 文件中的示例项目 SDraw_Example1。

关于可能导致问题的原因以及如何解决它的任何想法? 谢谢!

最佳答案

问题是由附加到 SPen 库 (libspen.jar) 中方法的损坏的预验证信息(StackMapTable 属性)引起的。该库似乎已使用 ProGuard 本身进行了处理,但可能预验证配置错误,或者其他工具随后破坏了预验证信息。您可以修改 ProGuard 以忽略该属性,甚至再次预验证库。我会在 your thread 中通知三星在他们的开发者论坛上。

关于android - Proguard 4.7 与 Eclipse SDK 3.7.1 : Proguard fails with java. io.IOException -(堆栈映射框架中的未知验证类型 [25]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8877452/

相关文章:

android - 如何在 Android Activity 中存储更改的 View 可见性

android - 将 ImageView 与 GridView 一起使用以设置行和列中显示的图像数

android - ProGuard 和 AdMob 的问题

java - proguard:无法读取 [C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot\lib\rt.jar]

Android SQlite 触发器

android - 找不到模块 : Error: Can't resolve 'nativescript-sound'

eclipse - Eclipse何时会原生支持Java 9?

java.lang.NoClassDefFoundError : in eclipse maven 错误

java - 为什么只有某些提要从谷歌阅读器中恢复?

java - ProGuard 混淆 Jar 文件和数据库连接字符串