最近在Android studio下打包文件,设置混淆后,打包出现
* What went wrong:
Execution failed for task ':unionpaylib:transformClassesAndResourcesWithProguardForDebug'.
> java.io.IOException: Can't read [D:\MPos\unionpaylib\libs\ZCSComboV2.6.1.2.jar(;;;;;;**/*.class)] (Can't process class [com/imagpay/bP.class] (Unknown verification type [25] in stack map frame))
取消混淆,打包OK。判断是混淆j程序Proguard哪里处理有问题。通过网络资料查找发现有很多类似问题。
Proguard网站上也有提供解决方法。 https://sourceforge.net/p/proguard/bugs/420/
主要是要修改Proguard源码中ClassConstants.java文件。
把 public static final String ATTR_StackMapTable = "StackMapTable";
改为 public static final String ATTR_StackMapTable = "dummy";
这里做下记录:
1、下载Proguard源码:https://sourceforge.net/projects/proguard/files/ 找到最新Proguard源码。
2、解压下载的源码包,我的是 proguard5.3.1.zip,目录结构如下:
3、修改源码,保存,然后进入buildscripts目录,阅读README文件。里面记录多个编译方式。我用的是ant方式。
在命令行下输入 ant就行。
由于没有安装java移动设备套件wtk,故报错,不理它,生成的jar在lib目录中。
4、把生成的proguard.jar放到gradle指定的目录中。
方法一、直接修改.gradle中的文件。C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.proguard
在这个目录下是Proguard的一些文件,找到自己要用的,我的是C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\net.sf.proguard\proguard-base\5.2.1\4f61348b4e7c943b85679dcb697f3a5fc3101921\proguard-base-5.2.1.jar。用刚编译好的jar替换它,并修改为一样的名字。然后as重编译通过。
方法二、在as项目根目录中指定jar目录。如proguard,然后把新proguard.jar复制到那个目录。然后在build.gradle中配置
然后编译自己的项目,没有报错。搞定。。。。。。