android - SAAgent.class 上的 Proguard 错误

标签 android proguard samsung-mobile samsung-mobile-sdk

我正在使用三星的 accessory-v1.0.0.jar 开发一个 Samsung Gear 应用程序。

当我尝试创建一个已签名的 apk(执行混淆步骤)时,我得到 Unknown verification type [10] in stack map frame 异常,因为三星的 SAAgent 类在 accessory-v1.0.0.jar 中。

我找不到任何解决方案,您有解决方法吗?

Same problem (not answered on Samsung's forum) here.

Similar problem on Samsung's SPen SDK (this problem was solved on a later version of SPen SDK)

到目前为止我已经尝试过但对我没有帮助的:

1) 添加了以下 proguard 元素:

-keepclassmembers class com.samsung.** { *; }
-keep class com.samsung.** { *; } 
-dontwarn com.samsung.**
-keepattributes InnerClasses 

2) 使用混淆器 4.74.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/) 构建了一个 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

您可以将它放在您的 AndroidSDK\tools\proguard\lib 文件夹中,但复制一份原始文件 - 您可能不应该将它用于其他项目。更好的是,修改 project.properties 中的 proguard.config 路径,使其指向与普通 progaurd 库不同的路径。

免责声明:这是一个临时解决方法,而不是修复 - 使用风险自负。三星应该在更新的 SDK 中提供适当的修复。也就是说,我在自己的测试中没有发现任何问题。

更新:这不再是 Samsung Accessory SDK v2.0.19 的问题

关于android - SAAgent.class 上的 Proguard 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23810219/

相关文章:

安卓 SetTextColor 错误 : Screen switching during mySQL call

android - 两个依赖使用相同的库但版本不同

android - 库类(来自 Android sdk)依赖于程序类(同样是 Android sdk)

android - Android 上统一原生广告中的 IncompatibleClassChangeError

java - 使用 Samsung Remote Test Lab 时连接卡住

java-me - 版权不可用 诺基亚位置 API(OVI map )

android - 尝试设置 Adob​​e 创意 SDK 时无法解析 : com. adobe.creativesdk :image:4. 0.0

debugging - 在启用 Proguard 的情况下在 Android Studio 中运行调试器

android - 三星的 Zirconia 许可检查器出错

Android:判断之前显示的外部Activity