使用微信SDK后APK打包失败

        APP集成了微信分享功能,但是打包时出现错误,仔细检查了proguard配置,感觉配置正确,深表微信sdk自身问题;跑官方找反馈链接未果,只好自己上网查。

        ProGuard官网bug反馈中有记载同类错误(http://sourceforge.net/p/proguard/bugs/420/),有人给出解决方案,将ClassConstants.java中StackMapTable属性改为dummy,重新编译即可。

        另外在CSDN上发现有好心人前几天已遇到类似问题,并已将ProGuard编译好,那我们就省事了,拿来直接用好了。经测试可用,感谢Gavin_Mirror同学的无私奉献! 原址在这http://blog.csdn.net/jiguangcanhen/article/details/41806599, 解释的很详细,我就不重复了。

 

鉴于sourceforge.net国内访问不便,以及csdn现在的网页搞的很不友好,初始化js加载了好多国内无法访问的第三方链接(如acs86.com、google-analytics.com、gstatic.com等等等等),打开灰常慢,我在这里分享下Gavin_Mirror同学的ProGuard包

 

最后附错误信息如下:

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

 ========================= 接着再补充点内容 2015-01-17 ============================
        因为初学android不久,为了赶个项目,代码组织管理方面没放太多时间关心;最近随着工期接近尾声,有了些时间考虑这些问题。起初想用Maven来管理,折腾了两天发现eclipse各种插件安装在国内就是个坑,以后团队再扩大维护起步就是个大问题;后而又扑倒Gradle上断断续续倒腾了几天,勉强算成功,具体步骤有空再另起文章总结。废话了这些,接着总结记录下在使用Gradle打包时遇到同样问题的思路和解决办法。
        在边学习Gradle边打包尝试,前边还算顺利,到做打签名混淆包时,又遇到了以上提到的错误;因为之前尝试Maven和Gradle,本地有了两套ADT环境,起初怀疑是环境变量问题,gradle用了老的proguard;检查了一圈环境变量和代码中的local.properties中的android sdk路径,是用的同一个。怀疑gradle用了自己的proguard插件,于是从网上搜了搜如何指定proguard目录,有人说通过flatDirs来设置,尝试了下,在我这也没成功。得,于是起了强改gradle中proguard配置的念头。
进入gradle的目录  cd ~/.gradle
搜索proguard的路径有哪些 find . -name '*proguard*'
回车后发现有不少,其中有jar、pom、4.10、4.11的,筛选下 find . -name '*proguard*'|grep 4.11|grep jar
发现有两个 caches/modules-2/files-2.1/net.sf.proguard/proguard-base/4.11/76730af417bb42da22b16e49f49e67863382b9bd/proguard-base-4.11.jar
caches/modules-2/files-2.1/net.sf.proguard/proguard-gradle/4.11/da875d4b67a8be6c770b11d894434843714ac69d/proguard-gradle-4.11.jar
显然proguard-gradle-4.11.jar应该是gradle的插件,proguard-base-4.11.jar应该是proguard.jar;把proguard-base-4.11.jar拷贝出来备份,然后从上文提到的proguard4.11中把proguard.jar拷贝到caches/modules-2/files-2.1/net.sf.proguard/proguard-base/4.11/76730af417bb42da22b16e49f49e67863382b9bd/ 下,并重命名为proguard-base-4.11.jar
再次执行gradle build 后,看到期盼已久的 BUILD SUCCESSFUL!
前两天有人短信问我Android Studio中按我上面替换sdk中proguard还是报错,新版Android Studio是用Gradle打包的吧,因为我没用AS,不过同理猜测应该也是同样问题,替换当前用户目录下.gradle中的proguard-base.jar后应该就可用了。
 
 
 
 
 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值