android打包release导致java.lang.NoClassDefFoundError

来源:互联网 发布:淘宝系统供应商 编辑:程序博客网 时间:2024/05/17 00:10

由于今天要和深圳和版本,简单演示小半年的成果,为了将App是速度发挥到极致,所以要打release版

本,这个时候问题出现了。


既然抛出java.lang.NoClassDefFoundError,不对啊!平时run as 和 打包debug版本都无问题,为什么release会出现

问题呢?问题出现了,就要分析原因,根据报错的行数469行点进去。


这里也没什么问题,只是正常的dagger注入。既然dagger注入报错,那尝试注释这里的,结果发现

MaiDianManager(这里是自定义类)同样抛出NoClassDefFoundError。这里就会发现一些端倪,是不是release没有

将类打包到apk里,有想法就要尝试,反编译自己的apk查看刚刚未找到的Preconditions类,结果果然未打包到apk里,如图



前者反编译后的目录,后者android studio jar文件的目录


可以看到这里只有两个文件,对比android studio的jar可以看到只有注解类型的被引入了,其余的接口和抽象类都没有

导入,这个时候就没有思路了,因为不明白产生的原因,毕竟放弃是不可能呢,硬着头也要上,谷歌吧!无意间看到

这篇博客 Android导包导致java.lang.NoClassDefFoundError,才让我想起我们的项目中也用到了MultiDex,查看初始

化MultiDex的位置,发现

            if(DEBUG) {                MultiDex.install(this);                refWatcher = LeakCanary.install(this);                Log.i(TAG,"refWatcher is "+refWatcher);            }


到这里恍然大悟,又是给自己挖的坑,到这里就告一段落了,这里想跟大家分享笔者的解决问题思路,如有错误欢迎指正。

1.谷歌 百度都找不到的问题,证明绝大多数人都未曾遇到过,若你碰到,首先要怀疑的是:这是不是自己挖的坑。

2:只要有问题的现象,就跟着此问题一直追溯,例如上面的类找不到异常,无非就2种情况,第一种:jvm找不到,但类存在,第二种:类确实不存在。先确认类是否存在,然后再猜测为什么不存在。那些原因会造成类的缺失,为什么会造成类的缺失,总结一句话:多问问自己为什么。


1 0
原创粉丝点击