今天解决的重大的问题 Android开发过程中,碰到了一个crash bug,照理说,程序开发碰到crash没什么大不了,看堆栈定位原因,然后解决即可但是这个堆栈刚看到的时候,还是愣了一下,如下:
java.lang.VerifyError 日志表明是一个类找不到
找到了看到了一条比较有价值的提示,unable to find class referenced in signature ,后面的类名涉及公司程序,去掉了。
看来应该是在dex里没找到对应的那个类,这个时候,我想起来了,最近项目新增加了一个比较大的第三方sdk,导致程序又庞大了不少,原来程序就因为API数超过了64K,而分成了两个dex, 用的是MultiDex,自动打包成class.dex和class2.dex.
逆向解压编译的APK,发现提示那个找不到的class,果然不在class.dex中,而是在class2.dex中。原因是我虽然分包了但是一些依赖包,和配置没有配好导致的.
解决办法:https://developer.android.com/studio/build/multidex.html
-
添加依赖:
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.1.1' compile 'com.android.support:design:24.1.1' compile 'com.android.support:multidex:1.0.0' }
2.配置Application类
<application
android:name="android.support.multidex.MultiDexApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
-
改变Application的继承关系
/** * Created by J_X on 2016/8/9. * Break 65K methods limits */ public class MyApplication extends MultiDexApplication{ @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
简单暴力搞定