欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用微信SDK后APK打包失败

程序员文章站 2022-06-04 15:30:49
...

        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后应该就可用了。
 
 
 
 
 
 
  • 4-11.zip (3.3 MB)
  • 描述: proguard-4.11
  • 下载次数: 423