解决微信分享SDK,混淆报错Can't process class [com/tencent/wxop/stat/al.class] 以及 proguard.jar版本不匹配的问题 proguar

由于项目约来越大,今天打包的时候报错

Conversion to Dalvik format failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536,

于是决定使用multidex,方法如下:


首先让自己项目中的build.gradle文件添加

multiDexEnabled true

以及添加依赖

compile 'com.android.support:multidex:1.0.0'

然后让自己的application继承MultiDexApplication

public class IBoxingApplication extends MultiDexApplication {


接下来可以打包测试了,没有特殊情况,应该可以成功。

-----------------------------------------------------------------------

然而我遇到了特殊情况,打包的时候报如下错误

Can't process class [com/tencent/wxop/stat/al.class]

引用的微信的jar包在混淆时报错了,于是继续查资料解决问题,

参考这位哥们的解决方法http://blog.csdn.net/qq_25412055/article/details/52798764

如下:

在project的build.gradle中加入混淆包的关联:
buildscript {
    repositories {
        flatDir { dirs 'proguard' }//依赖库类目录
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'proguard.io:proguard:4.11'//依赖的库类
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

然后在项目的根目录下创建proguard文件夹,在文件下加入proguard.jar包就可以了。
 
 
proguard.jar的下载地址如下:
http://download.csdn.net/detail/qq_25412055/9652014
-------------------------------------------------------------------------------------------------------------------
 
 
按照上面这位哥们的说法应该可以了,可是好事多磨啊,又报了如下错误:
Error:Execution failed for task ':app:transformClassesWithMultidexlistForTmbjDebug'.
> proguard.KeepClassSpecification.<init>(ZZZZZZLproguard/ClassSpecification;)V
于是继续寻找解决办法
 
 

发现了下面这个哥们的博客

http://bbs.csdn.net/topics/392084419?list=lz

我也顺手复制过来,算是整理了,如下:

接手上个人的项目,发现升级AS后运行不了,出现了这样的错误
Error:Execution failed for task ':transformClassesWithMultidexlistForDebug'.
> java.io.IOException: Can't read [D:\workspace\project2\haocaimao2\build\intermediates\transforms\jarMerging\debug\jars\1\1f\combined.jar] (Can't process class [com/tencent/wxop/stat/al.class] (Unknown verification type [95] in stack map frame))


后来查了查是混淆的原因,根据网上提供的思路解决了,但是教程上有点细节问题,所以重新写一遍,让各位少走弯路!
1.查看AndroidStudio所使用的proguard的版本,每个人的地址不同,是在androidstudio安装目录下的
   路径为D:\Program Files\Android\Android Studio\gradle\m2repository\net\sf\proguard\proguard-base

根据AndroidStudio所使用的proguard版本去官网上下载源码,
地址为:https://sourceforge.net/projects/proguard/files/proguard/

2.下载好proguard后,解压,在src\proguard\classfile文件当中找到源码的ClassConstant.java类,
然后将ATTR_StackMapTable 的值修改成 "dummy"(原值为StackMapTable),

3.下载的proguard源码里面没有ant文件、proguard-android.txt、proguard-android-optimize.txt、proguard-project.txt文件,到自己下载sdk文件夹里面复制过来,

     sdk的路径为D:\AndroidSDK\tools\proguard

4.使用ant 进行重新打包
(一)安装ant
到官方主页http://ant.apache.org下载新版(目前为Ant1.9.9)的ant,得到的是一个apache-ant-1.9.4-bin.zip的压缩包。将其解压到你的硬盘上。
下载地址如图

(二)配置环境变量
window中设置ant环境变量:
ANT_HOME    C:/ apache-ant-1.9.9
path             %apache-ant-1.9.9%\bin;%JAVA_HOME%\bin;
classpath    %apache-ant-1.9.9%\lib;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
注意:
配置环境变量:我的电脑----属性-----高级----环境变量
由于path和classpath都有可能已经配置了jdk,所以我们要找到path和classpath添加上去,而不要新建,否者会覆盖,导致无法找到jdk,如果变量找不到,就不要用变量,直接贴上地址就行了,不懂留言

(三)验证ant
为了验证ant是否成功安装,可以进行如下操作:
依次选择:开始->运行->cmd,输入如下命令:ant
如果出现如下内容,说明安装成功:
Buildfile: build.xml does not exist!
Build failed

(四)、运行ant打包proguard
cmd进入proguard目录下的build.xml所在目录,如我的:
D:\Program Files\adt-bundle-windows-x86_64-20130729\sdk\tools\proguard\build
或者直接进去build目录下,摁着Shift+右键,会有在此处运行命令窗口的选项
然后运行ant便会在lib目录下重新生成新的的proguard.jar文件。

在lib里面找到jar文件,覆盖到sdk里面的proguard里面的jar包
注意:这里可能有人发现新版下载proguard没有build文件夹,是buildspcrit文件夹,这时只要把它改成build的名字就行了,再进去里面打包,不改的话打包会报错,提示过时的api等等

5.将打包好的文件覆盖掉原来的文件,注意还要在覆盖缓存当中的文件,路径为
 C:\Users\A\.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-base\4.11\76730af417bb42da22b16e49f49e67863382b9bd
 如果有多个版本,则多个版本均覆盖。
注意:第五步可做可不做,我的问题是做到第四步就行了,第5步找不到文件,估计是改版的原因

6,进到as里面重新运行,成功
如果有其他问题请留言
参考博客:
http://www.cnblogs.com/huangbei1990/p/6097782.html

---------------------------------------------------------------------------------------------------------------------------------------------------------------

按照这个步骤走了一遍也是不行,于是我结合了一下,按照上面这个哥们的方法,用anr自己生成了一个5.3.2版本proguard.jar包,然后按照第一个哥们的方法,在项目操作,

我靠,终于跑通了,我这边整理了下,希望对后面的朋友有帮助。

参考这两个链接是:

http://blog.csdn.net/qq_25412055/article/details/52798764

http://bbs.csdn.net/topics/392084419?list=lz

 

猜你喜欢

转载自blog.csdn.net/gulihui890411/article/details/64128520