`
vase
  • 浏览: 422285 次
  • 性别: 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

    eclipse打jar包,unity微信登录,方便高效

    打包完成后,将这个APK安装到Android设备上,测试微信登录功能是否正常工作。如果一切顺利,用户应该能在游戏中看到微信登录按钮,点击后能够通过微信账户进行授权并登录。 总的来说,这个过程涉及到Unity游戏开发...

    Android编程之微信SDK分享功能过程步骤详细分析

    审核通过后,开发者会得到一个AppId,可以在代码中使用这个AppId初始化微信SDK。在测试阶段,使用debug签名的应用可以正常分享到微信。但在正式发布应用时,需要使用正式签名(例如`xxx.keystore`)进行打包。此时,...

    Unity2020版的安卓微信登录接入,Unity打安卓包

    1. 使用Android Studio打开微信SDK中的示例项目。 2. 在项目设置中,找到"Build Variants"选项,选择用于生产的Release模式。 3. 接着,点击"Build"菜单,选择"Generate Signed Bundle / APK"。如果你还没有签名文件...

    微信获取签名工程

    在进行微信SDK的集成时,一个关键步骤是获取到应用的签名。签名用于验证应用的身份,确保请求来自合法且授权的来源。在Android系统中,应用的签名是通过使用开发者私钥对APK文件进行数字签名来生成的。 1. **微信...

    利用百度地图Android sdk高仿微信发送位置功能

    附带的资源中,`JavaApk源码说明.txt`可能包含了关于源码的详细解释,`可执行程序.apk`是已经编译好的应用示例,你可以安装运行以查看具体效果,而`下载更多打包源码~.url`则可能是指向更多示例代码或教程的链接。...

    cocos系列安卓sdk接入.zip

    3. **微信SDK**:微信SDK是微信官方提供的开发包,允许开发者在自己的应用中集成微信的相关功能。在这个项目中,主要涉及的是微信登录和分享功能。 - **微信登录**:通过调用微信SDK接口,用户可以在游戏中直接...

    查看APK备案信息,用于备案及申请微信APP支付

    在移动应用开发领域,尤其是Android应用,APK文件是应用程序的打包形式,它包含了所有运行应用所需的代码、资源和配置文件。"查看APK备案信息,用于备案及申请微信APP支付"这一主题主要涉及到两个核心步骤:一是APK...

    分享到微信

    4. **OAuth授权**:在分享之前,用户可能需要授权应用访问微信账户,这是微信SDK的一部分,确保用户隐私的安全。 5. **微信分享接口**:微信SDK提供了一系列的API,如WXApi接口,用于创建和发送分享内容。这些接口...

    Eclipse插件-Android项目APK渠道号批量打包工具兰贝

    通过自动化流程,可以显著提高工作效率,减少人为错误,使得APK打包过程变得更加智能化和规范化。 使用该插件,你可以: 1. **批量设置渠道号**:无需手动修改代码或配置文件,只需在插件中输入或导入渠道名称,...

    delphi XE 调用使用百度移动统计SDK演示

    6. **打包和部署**:最后,将集成了SDK的项目打包成APK(Android)或IPA(iOS),并部署到目标设备进行测试和发布。 在这个项目中,我们看到的文件如`MTJTest.deployproj`是Delphi的部署项目文件,用于配置应用程序...

    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' }}# 不...

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

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

    uni-app离线打包100%学会

    uni-app 是一个使用 Vue.js 开发的多端框架,它允许开发者编写一次代码,同时发布到iOS、Android、Web(H5、微信小程序、支付宝小程序、百度小程序、QQ小程序、字节跳动小程序、快应用等平台。在开发过程中,有时...

    最新微信支付demo

    它可能解释了如何在Android应用中实现微信支付功能,包括初始化微信支付SDK、处理支付回调、订单验证等步骤。阅读这个文件将有助于理解代码结构和实现原理。 3. **下载更多打包源码~.url** 这个文件是一个链接,...

    Android-SDK@3.1.18.80859_20210610.zip

    uni-app的构建过程可能会使用到如Gradle、Webpack等工具,它们将源代码打包成可运行的APK文件。Gradle是Android的官方构建系统,负责处理依赖管理和构建流程。Webpack则用于处理JavaScript、CSS、图片等资源的打包和...

    微信群聊生成九宫格形式的头像

    至于提供的源码,"JavaApk源码说明.txt"可能是对源代码的简单说明,"下载更多打包源码~.url"可能是指向更多相关源码的链接,而"防微信群聊九宫格头像"可能是包含具体实现的Java源文件,可以从中学习到上述技术的具体...

    安卓微信相关相关-微信6.0主界面.zip

    开发者可以从中学习到如何使用Android SDK来创建复杂的界面,如何实现动态加载、数据绑定,以及如何处理用户的触摸事件等。 在源码分析中,我们可以关注以下几个方面: 1. **UI设计**:微信的界面设计遵循了安卓...

    仿微信源码

    【标题】"仿微信源码"所涉及的知识点主要集中在移动应用开发领域,特别是针对Android平台,因为通常 APK 文件是 Android 应用程序的打包格式。这个项目旨在创建一个类似于微信的应用程序,它包含了基本的微信功能,...

Global site tag (gtag.js) - Google Analytics