`
vase
  • 浏览: 418107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用微信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后应该就可用了。
 
 
 
 
 
 
  • 4-11.zip (3.3 MB)
  • 描述: proguard-4.11
  • 下载次数: 423
分享到:
评论
6 楼 clybe 2015-01-13  
“打debug版本的multidex包还没想到好法子,只能在debug情况不载入微信sdk了。。代码做些放错处理。”

这句话收回,我这测下来用楼主的jar包在AndroidStudio下编译debug和release都ok

5 楼 clybe 2015-01-13  
duan10jun 写道
恩。按照你的方法在eclipse中是可以成功的,但是在android studio 中不可以,可以加你QQ么?


Android studio打release包可以指定下proguard.jar包的目录, 将楼主提供的proguard.jar放到自己工程的proguard目录
buildscript {
  repositories {
    flatDir { dirs 'proguard' }
    mavenCentral()
  }

  dependencies {
    classpath 'proguard.io:proguard:5.0'
    classpath 'com.android.tools.build:gradle:0.12.+'
  }
}

打debug版本的multidex包还没想到好法子,只能在debug情况不载入微信sdk了。。代码做些放错处理。
4 楼 vase 2015-01-12  
duan10jun 写道
恩。按照你的方法在eclipse中是可以成功的,但是在android studio 中不可以,可以加你QQ么?

android studio我就无法帮你了。前几天打算装个,但是下完200多M的安装包安装后,发现还要去google更新,国内网络原因,连不上就放弃了
3 楼 duan10jun 2015-01-12  
恩。按照你的方法在eclipse中是可以成功的,但是在android studio 中不可以,可以加你QQ么?
2 楼 vase 2015-01-12  
duan10jun 写道
你好,android studio也有这个问题,按照你说的方法,还是打包失败啊

刚才也有人小窗口我了,可能是微信官方给的那个过滤有问题,我改成了如下格式
# weixi
-keep class com.tencent.** {*;}

你可以试试这个
1 楼 duan10jun 2015-01-12  
你好,android studio也有这个问题,按照你说的方法,还是打包失败啊

相关推荐

    cocos2dx接入微信SDK实例(分享文本和图片)。c++代码。

    此上传的不是整个项目。此安装包包含了cocos2dx。c++项目的bin(打包apk)。classes(具体代码)。libs(微信工具包)。src(java代码)。Resources(资源)。AndroidManifest.xml

    微信小程序 高德地图SDK详解及简单实例(源码下载)

    主要介绍了微信小程序 高德地图详解及简单实例(源码下载)的相关资料,需要的朋友可以参考下

    wechat_kit:flutter版微信登录分享支付

    wechat_kitflutter版微信SDKflutter toolkitdart/flutter 私服docs微信支付Universal Linksandroidbuildscript { dependencies { // 3.5.4/3.6.4/4.x.x classpath 'com.android.tools.build:gradle:3.5.4' }}# 不...

    x5内核静态打包方案43500-43656.zip

    微信中打开http://debugtbs.qq.com,进入界面后点击拷贝内核按钮,会弹出保存的路径(参考顶上【图3】),打开这个路径后提取里面的core_private/x5.debug.tbs这个文件,其实这个是一个apk/zip文件,30多M,解压后...

    网狐荣耀版开发使用常见问题解答

    然后下一步,选择打包APK文件的存储路径。 第五步,点击finish等待程序签名与APK的生成,结束。 六、网狐荣耀版游戏启动时出现“正在初始化组件”启动失败 【 2017-11-10 08:35:33 】[ 游戏 ] 房间参数加载成功 ...

    ionic混合开发APP

    3.1.3.2 生产release版apk(签名后安装) 3.1.3.3 生成debug版apk 3.1.4 签名 3.1.4.1 生成签名文件 keytool -genkey -v -keystore testapp.keystore -alias testapp.keystore -keyalg RSA -validity ...

    weibo_kit:flutter版新浪微博登录分享

    # 混淆已打入 Library,随 Library 引用,自动添加到 apk 打包混淆 获取 android 微信签名信息 非官方方法 -> 反编译 app_signatures.apk 所得 命令: keytool -list -v -keystore ${your_keystore_path} -storepass...

    Android Studio中一套代码多渠道打包的实现方法

    不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能区分debug和release配置 使用到的功能:productFlavor和buildTypes 原理:优先级buildTypes大于productFlavor 示例:一套代码为两家银行打包apk 1...

    adb1.0.26包含fastboot.exe

    打包时不与 ROM 使用相同签名 INSTALL_FAILED_INVALID_INSTALL_LOCATION 1. 不能安装到指定位置; 2. 应用签名与 ROM 签名一致,被当作内置应用 1. 切换安装位置,添加或删除 -s 参数; 2. 打包时不与 ROM 使用相同...

    Android热更新开源项目Tinker集成实践总结

    2、第三方提供的服务,目前如原微信simsun大神的个人tinkerpatch平台,目前出于内测阶段,暂时免费。后期应该会按下发量对app进行收费。 3、腾讯Bugly提供的服务,提供了热更新的下发后台,集成到了bugly的升级sdk中...

Global site tag (gtag.js) - Google Analytics