1.使用proguardgui混淆器对jar包进行混淆,出现EXCEPTIONFROMSIMULATION错误:

[2014-07-0814:29:55-Test024_HouseBox_v02_jar]DxEXCEPTIONFROMSIMULATION:[2014-07-0814:29:55-Test024_HouseBox_v02_jar]Dxlocalvariabletypemismatch:attempttosetoraccessavalueoftypejava.lang.Objectusingalocalvariableoftypeint.Thisissymptomaticof.classtransformationtoolsthatignorelocalvariableinformation.[2014-07-0814:29:55-Test024_HouseBox_v02_jar]Dx...atbytecodeoffset0000012flocals[0000]:Lcom/android/volley/toolbox/BasicNetwork;locals[0001]:Lcom/android/volley/Request;locals[0002]:Jlocals[0003]:<invalid>locals[0004]:Lorg/apache/http/HttpResponse;locals[0005]:[Blocals[0006]:Ljava/util/Map;locals[0007]:Ljava/io/IOException;locals[0008]:<invalid>locals[0009]:<invalid>locals[000a]:<invalid>stack[0001]:N012bLcom/android/volley/NoConnectionError;stack[top0]:N012bLcom/android/volley/NoConnectionError;...whileworkingonblock012e...whileworkingonmethodperformRequest:(Lcom/android/volley/Request;)Lcom/android/volley/NetworkResponse;...whileprocessingperformRequest(Lcom/android/volley/Request;)Lcom/android/volley/NetworkResponse;...whileprocessingcom/android/volley/toolbox/BasicNetwork.class[2014-07-0814:29:55-Test024_HouseBox_v02_jar]Dx1error;aborting[2014-07-0814:29:55-Test024_HouseBox_v02_jar]ConversiontoDalvikformatfailedwitherror1


解决方法:在配置文件中去掉-keepattributes LocalVariable*Table这个配置项。

参考资料:Android项目:自构框架、SDK包或者jar文件库的混淆及常见问题解决方法


2.引用库正常,对库的代码打成jar包混淆后运行报错Unable to execute dex: Multiple dex files define:

Unabletoexecutedex:MultipledexfilesdefineLcom/glblong/socshare/R$anim


解决方法:项目引用了不同版本的jar包导致的,如果libs中的jar包版本都是一致的,那么问题可能出现在使用proguradgui时引入的jar包版本不一致导致的。也就是在混淆过程中,引入的jar包要与项目中使用的jar文件一致。

参考资料:Android项目:自构框架、SDK包或者jar文件库的混淆及常见问题解决方法



3.在你依赖的外部jar包已经混淆的情况下再进行混淆打包有可能出现以下情况:

Can't read [***\***.jar] (Can't process class [**/a/f.class] (Unknown verification type [108] in stack map frame))

[2014-07-1710:51:15-Test025_HouseBox_v02_test10]Proguardreturnedwitherrorcode1.Seeconsole[2014-07-1710:51:15-Test025_HouseBox_v02_test10]java.io.IOException:Can'tread[F:\work_hb_v02_pbulish\Lib_SocShare_v237_0703\libs\untiy-classes.jar](Can'tprocessclass[com/unity3d/player/UnityPlayer.class](Unknownverificationtype[251]instackmapframe))[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.InputReader.readInput(InputReader.java:232)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.InputReader.readInput(InputReader.java:202)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.InputReader.readInput(InputReader.java:180)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.InputReader.execute(InputReader.java:78)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.ProGuard.readInput(ProGuard.java:196)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.ProGuard.execute(ProGuard.java:78)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.ProGuard.main(ProGuard.java:483)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]Causedby:java.io.IOException:Can'tprocessclass[com/unity3d/player/UnityPlayer.class](Unknownverificationtype[251]instackmapframe)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.Cla***eader.read(Cla***eader.java:112)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.JarReader.read(JarReader.java:65)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.InputReader.readInput(InputReader.java:228)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]...6more[2014-07-1710:51:15-Test025_HouseBox_v02_test10]Causedby:java.lang.RuntimeException:Unknownverificationtype[251]instackmapframe[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.io.ProgramCla***eader.createVerificationType(ProgramCla***eader.java:890)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.io.ProgramCla***eader.visitFullFrame(ProgramCla***eader.java:659)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.io.ProgramCla***eader.visitStackMapTableAttribute(ProgramCla***eader.java:452)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.io.ProgramCla***eader.visitCodeAttribute(ProgramCla***eader.java:422)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.io.ProgramCla***eader.visitProgramMethod(ProgramCla***eader.java:200)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.io.ProgramCla***eader.visitProgramClass(ProgramCla***eader.java:142)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.classfile.ProgramClass.accept(ProgramClass.java:346)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]atproguard.io.Cla***eader.read(Cla***eader.java:91)[2014-07-1710:51:15-Test025_HouseBox_v02_test10]...12more


解决方法:找到proguard源码中proguard\src\proguard\classfile\ClassConstants.java类,然后修改ATTR_StackMapTable的值,将原来的的StackMapTable改为dummy.

publicstaticfinalStringATTR_StackMapTable="dummy";//"StackMapTable";


然后重新ant打包proguard,使用新的proguard来混淆就不会出现上面的问题。

ant打包proguard方法见:Android项目:通过ant重新打包proguard混淆器jar文件


参考资料:

1.Proguard returned with error code 1. (Proguard errors with untiy-classes.jar)

2.ProGuard Java Optimizer and Obfuscator

3.Android项目:通过ant重新打包proguard混淆器jar文件












其他参考资料:

1.Android项目:proguard混淆之常见问题及解决方法汇总

2.Android项目:proguard混淆之常见开源项目混淆配置

3.Android项目:自构框架、SDK包或者jar文件库的混淆及常见问题解决方法