我正在开发一个Samsung Gear
与三星的应用程序accessory-v1.0.0.jar
.
当我尝试创建签名的 apk(执行 proguard 步骤)时,我得到Unknown verification type [10] in stack map frame
例外,因为三星SAAgent
上课于accessory-v1.0.0.jar
.
我找不到任何解决方案,您有解决方法吗?
三星的 SPen SDK 上存在类似问题(此问题在更高版本的 SPen SDK 上已解决) https://stackoverflow.com/questions/8877452/proguard-4-7-with-eclipse-sdk-3-7-1-proguard-fails-with-java-io-ioexception
到目前为止我尝试过的方法对我没有帮助:
1)添加了以下混淆器元素:
-keepclassmembers class com.samsung.** { *; }
-keep class com.samsung.** { *; }
-dontwarn com.samsung.**
-keepattributes InnerClasses
2)使用过的混淆器4.7 and 4.11.
3)创建了一个新的Android项目,仅在其libs文件夹中添加了accessory-v1.0.0.jar,我没有编写任何代码并尝试对apk进行签名。发生同样的错误。
[2014-05-22 17:13:06 - SAGalleryProguardTest] Proguard returned with error code 1. See console
[2014-05-22 17:13:06 - SAGalleryProguardTest] java.io.IOException: Can't read [C:\Devel\Workspace\SAGalleryProguardTest\libs\accessory-v1.0.0a.jar] (Can't process class [com/samsung/android/sdk/accessory/SAAgent.class] (Unknown verification type [10] in stack map frame))
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.InputReader.readInput(InputReader.java:230)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.InputReader.readInput(InputReader.java:200)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.InputReader.readInput(InputReader.java:178)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.InputReader.execute(InputReader.java:78)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.ProGuard.readInput(ProGuard.java:196)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.ProGuard.execute(ProGuard.java:78)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.ProGuard.main(ProGuard.java:492)
[2014-05-22 17:13:06 - SAGalleryProguardTest] Caused by: java.io.IOException: Can't process class [com/samsung/android/sdk/accessory/SAAgent.class] (Unknown verification type [10] in stack map frame)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.io.ClassReader.read(ClassReader.java:112)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.io.JarReader.read(JarReader.java:65)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.InputReader.readInput(InputReader.java:226)
[2014-05-22 17:13:06 - SAGalleryProguardTest] ... 6 more
[2014-05-22 17:13:06 - SAGalleryProguardTest] Caused by: java.lang.RuntimeException: Unknown verification type [10] in stack map frame
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.io.ProgramClassReader.createVerificationType(ProgramClassReader.java:890)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.io.ProgramClassReader.visitFullFrame(ProgramClassReader.java:659)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.io.ProgramClassReader.visitStackMapTableAttribute(ProgramClassReader.java:452)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.io.ProgramClassReader.visitCodeAttribute(ProgramClassReader.java:422)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:200)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[2014-05-22 17:13:06 - SAGalleryProguardTest] at proguard.io.ClassReader.read(ClassReader.java:91)
[2014-05-22 17:13:06 - SAGalleryProguardTest] ... 11 more
我不认为你可以在 ProGuard 配置中添加任何内容来解决这个问题。这是一个问题accessory-v1.0.0.jar
由三星构建,他们必须在 SDK 更新中修复它。
我已按照此处列出的步骤进行操作(http://sourceforge.net/p/proguard/bugs/420/ http://sourceforge.net/p/proguard/bugs/420/)建立一个proguard.jar
库(基于 v.4.11)将忽略此错误。然后导出使用 ProGuard 构建的签名发布 apk 成功完成。
我也在使用这些配置设置:
-keep class com.samsung.** { *; }
-keep class * extends com.samsung.** { *; }
我构建的 proguard.jar 可以在这里找到:http://www.codingcaveman.com/download/proguard.jar http://www.codingcaveman.com/download/proguard.jar
您可以将其放入您的AndroidSDK\tools\proguard\lib
文件夹,但复制原始文件 - 您可能不应该将其用于其他项目。更好的是,修改你的proguard.config
路径进入project.properties
指向与普通 proguard 库不同的路径。
免责声明:这是一个临时解决方法,而不是修复方法 - 使用风险由您自行承担。三星应该在更新的 SDK 中提供适当的修复。话虽这么说,我在自己的测试中没有发现任何问题。
UPDATE:使用 Samsung Accessory SDK v2.0.19 不再是问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)