我使用proguard 4.11与Unity 3d
在我的项目中,我已经包含了unity-classes.jar在我的lib文件夹
当我生成apk时,它给出以下异常
[2014-05-03 14:33:41 - FBUnityPlayerActivity] Proguard returned with error code 1. See console
[2014-05-03 14:33:41 - FBUnityPlayerActivity] java.io.IOException: Can't read [C:UsersTATDesktopquickFBUnityPlayerActivitylibsunity-classes.jar] (Can't process class [com/unity3d/player/UnityPlayer.class] (Unknown verification type [195] in stack map frame))
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.InputReader.readInput(InputReader.java:232)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.InputReader.readInput(InputReader.java:202)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.InputReader.readInput(InputReader.java:180)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.InputReader.execute(InputReader.java:78)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.ProGuard.readInput(ProGuard.java:196)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.ProGuard.execute(ProGuard.java:78)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.ProGuard.main(ProGuard.java:483)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] Caused by: java.io.IOException: Can't process class [com/unity3d/player/UnityPlayer.class] (Unknown verification type [195] in stack map frame)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.ClassReader.read(ClassReader.java:112)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.JarReader.read(JarReader.java:65)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.InputReader.readInput(InputReader.java:228)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] ... 6 more
[2014-05-03 14:33:41 - FBUnityPlayerActivity] Caused by: java.lang.RuntimeException: Unknown verification type [195] in stack map frame
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.io.ProgramClassReader.createVerificationType(ProgramClassReader.java:890)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.io.ProgramClassReader.visitFullFrame(ProgramClassReader.java:659)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.io.ProgramClassReader.visitStackMapTableAttribute(ProgramClassReader.java:452)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.io.ProgramClassReader.visitCodeAttribute(ProgramClassReader.java:422)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:200)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] at proguard.io.ClassReader.read(ClassReader.java:91)
[2014-05-03 14:33:41 - FBUnityPlayerActivity] ... 12 more
我已经试过使用
-libraryjars /libs/unity-classes.jar
-keep class com.unity3d.** { *; }
-dontwarn com.unity3d.**
在proguard-project.txt中,还是一样的,如何修复?谢谢你的帮助
甚至尝试
-keep class .com。** {*;}
还是原来的
参见之前关于unity-classes.jar的Proguard错误的问题。
这是Unity库中类的一个问题:一些预验证元数据是损坏的。您应该检查一下是否有更新的版本。否则,您可以修改ProGuard以接受损坏的类,就像在其问题跟踪器中讨论的那样。
注意,您不应该在配置中添加-libraryjars或-injars。Android构建过程(Ant, Eclipse, Gradle)已经为你指定了这些选项。
试着把它添加到你的proguard-project.txt:
-keep class com.unity3d.** { *; }
-keep class org.fmod.** { *; }