今天编译一个android的Eclipse项目,不开启代码混淆能成功导出apk包,开启代码混淆后报错:

      

[2016-12-26 23:45:51 - test] Proguard returned with error code 1. See console [2016-12-26 23:45:51 - test] java.io.IOException: Can't read [D:\xxx\test\code\android\libs\libammsdk.jar] (Can't process class [com/tencent/wxop/stat/al.class] (Unknown verification type [95] in stack map frame)) [2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:230) [2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:200) [2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:178) [2016-12-26 23:45:51 - test] at proguard.InputReader.execute(InputReader.java:78) [2016-12-26 23:45:51 - test] at proguard.ProGuard.readInput(ProGuard.java:196) [2016-12-26 23:45:51 - test] at proguard.ProGuard.execute(ProGuard.java:78) [2016-12-26 23:45:51 - test] at proguard.ProGuard.main(ProGuard.java:492) [2016-12-26 23:45:51 - test] Caused by: java.io.IOException: Can't process class [com/tencent/wxop/stat/al.class] (Unknown verification type [95] in stack map frame) [2016-12-26 23:45:51 - test] at proguard.io.ClassReader.read(ClassReader.java:112) [2016-12-26 23:45:51 - test] at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87) [2016-12-26 23:45:51 - test] at proguard.io.JarReader.read(JarReader.java:65) [2016-12-26 23:45:51 - test] at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65) [2016-12-26 23:45:51 - test] at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53) [2016-12-26 23:45:51 - test] at proguard.InputReader.readInput(InputReader.java:226) [2016-12-26 23:45:51 - test] ... 6 more [2016-12-26 23:45:51 - test] Caused by: java.lang.RuntimeException: Unknown verification type [95] in stack map frame [2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.createVerificationType(ProgramClassReader.java:890) [2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitFullFrame(ProgramClassReader.java:659) [2016-12-26 23:45:51 - test] at proguard.classfile.attribute.preverification.FullFrame.accept(FullFrame.java:114) [2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitStackMapTableAttribute(ProgramClassReader.java:452) [2016-12-26 23:45:51 - test] at proguard.classfile.attribute.preverification.StackMapTableAttribute.accept(StackMapTableAttribute.java:71) [2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitCodeAttribute(ProgramClassReader.java:422) [2016-12-26 23:45:51 - test] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101) [2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:200) [2016-12-26 23:45:51 - test] at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:142) [2016-12-26 23:45:51 - test] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) [2016-12-26 23:45:51 - test] at proguard.io.ClassReader.read(ClassReader.java:91) [2016-12-26 23:45:51 - test] ... 11 more


在网上查了很久资料,proguard-project.txt等文件都是正确配置的: -libraryjars libs/libammsdk.jar ..... -dontwarn com.tencent.** -keep class com.tencent.** {*;} 事实上我能确定项目绝对没问题:因为这个项目是很久以前的,当时发版本有代码混淆,而且没任何问题,之后项目完全没有任何改动。而我最近电脑重装系统,Eclipse开发环境和sdk目录是重新弄的,所以肯定是开发环境的问题。 网上查了资料后,能判断是proguard版本的问题,于是我下载了proguard5.3,用5.3中的lib文件夹中的proguard.jar等三个jar文件替换掉 sdk\tools\proguard\lib 下的三个jar文件,结果报另外的错:

The same input jar is specified twice

然后根据 http://blog.csdn.net/ylbf_dev/article/details/50448727的解释,把proguard-project.txt中的 -libraryjars依次注释掉,这个新问题是解决了,但之前的那个问题又出现了,看来还是行不通。 后来还下载过较老的版本proguard4.11替换lib文件夹中的三个jar文件,问题依然存在! 再后来找到这个帖子: http://bbs.csdn.net/topics/390659813?page=1,是这样说的:
这个问题一般都是jar包内部做了较为高级的防破解或者有问题导致的,我们需要弱化proguard对引用第三方jar包的检查,当然也有可能是proguard不够新导致。以下是弱化检查的办法。 首先下载最新版本的proguard文件,找到~/src/proguard/classfile中的ClassConstants.java,修改174行附近的ATTR_StackMapTable值为“dummy”,保存。 在linux环境下运行~/build下的build.sh文件(mac下可运行),重新生成在lib下的三个jar包proguard.jar,proguardgui.jar,retrace.jar,将这三个包替换到你的安卓sdk下的,tools的proguard的lib下,~//sdk/tools/proguard/lib
在CSDN上下载了一个热心网友上传的,基于proguard4.11的修改编译后的版本,替换sdk\tools\proguard\lib目录下proguard.jar等三个文件后,终于成功export代码混淆版本了!

更多相关文章

  1. Android(安卓)安装apk时,报错 Failure [INSTALL_FAILED_TEST_ONLY
  2. android数据库操作之直接读取db文件
  3. Android中JNI调用
  4. pAdTy_-5 保存数据
  5. 设置布局默认为LinearLayout,却成了RelativeLayout
  6. Android比较特殊的错误或警告集锦
  7. AndroidStudio4.0 3.0等高版本利用gradle打jar包笔记
  8. android 侦听文件变化
  9. debug.keystore文件不存在解决办法

随机推荐

  1. android 时间同步
  2. apk,task,android:process与android:shared
  3. EditText横屏时,弹出软件盘时不进行全屏
  4. android EditText中的几大坑
  5. Android之Rxjava2.X 10————Rxjava源
  6. Android的历史:起源、命名方式
  7. Android(安卓)三级缓存 LruCache缓存机制
  8. Robotium 一款Android自动化测试框架
  9. :Handler方法小结(在线程中更新UI和了解Han
  10. Android(安卓)动画框架详解