android 解决multidex打包失败的坑

这个问题要从android的65535的限制开始说起,由于公司项目需求越来越多,东西也越来越复杂,

再加上加入了rxjava和tinker热更新,在项目中引入了好多第三方库,这就是导致项目总体method超过了65535

百度了一番,通过multidex分包可以突破这个限制,于是笔者便尝试着按照博客上说的添加了各种配置,

所有的设置修改完成之后,信心满满地进行了编译,结果一编译就报错了,错误如下

Error:Execution failed for task ':app:transformClassesWithMultidexlistForTmbjDebug'.
> java.io.IOException: Can't read [D:\code\android_studio\CarClient\tag\newclient\app\build\intermediates\transforms\jarMerging\tmbj\debug\jars\1\1f\combined.jar] (Can't process class [com/xxxx/xxxx/xxxx/e.class] (Unknown verification type [82] in stack map frame))

从信息中笔者看到,是项目中的一个第三方的jar包在分包的过程中产生了异常,在一番思考之后,决定反编译这个jar

找到对应的com/xxxx/xxxx/xxxx/e.class,发现这个类似乎在jar中没有被引用到,于是出于侥幸心理,把这个类给删掉了,然后再编译,就正常了,而且项目并没有crash。但是自己心里清楚,这并不是治本的解决方案。。。

果不其然,今天再一次测试,就发现了有问题,而且就出在这个jar中,于是便下决心去解决这个问题

结果意外的看到了另一篇博客,才知道这个问题是proguard二次混淆导致的

通过这篇博文(http://bbs.csdn.net/topics/392084419?list=lz)的指引,自己也去尝试了一番,问题终于解决

再次感谢这位博主的无私分享!

关于这个过程,博主已经写的很详细了,就不再赘述,这里主要说说我遇到的问题:

1、studio 默认去加载proguard并不是加载最新的版本,笔者的studio中,proguard有三个版本

5.1、5.2.1、5.3.1,但是studio加载的却是5.2.1,这个应该和studio的版本有关系

2、如果要替换proguard.jar,下载的源码版本,必须和studio的proguard版本一致,否则会报如下异常

Error:Execution failed for task ':app:transformClassesWithMultidexlistForTmbjDebug'.
> proguard.KeepClassSpecification.<init>(ZZZZZZLproguard/ClassSpecification;)V

如果你也遇到了,肯定是你的版本对不上

站在巨人的肩膀上问题解决了心情不错,把自己的问题写出来和大家分享一下,希望大家少走弯路。。。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值