1.捕获应用的crash信息
原理:
当crash发生时,系统会回调UncaughtExceptionHandler的uncaughtException()方法;
Thread类中提供了一个设置系统默认的异常处理器方法;
使用multidex解决方法数越界
原因:在Android中单个dex文件所能够包含的最大的方法数为65536
范围:包含Android FrameWork、依赖的jar包以及应用本身的代码中的所有方法;
越界异常:
UNEXCEPTION TOP-LEVEL EXCEPTION
com.android.dex.DexIndexOverflowException:method ID not in{0,
0xfff}:65536
解决方法:
首先,删除无用的代码和第三方库;
其次,可考虑采用插件化的机制来动态加载部分的dex,但插件化是一套重量级的技术方案,并且需兼容性问题,不适合用来解决方法数越界;
推荐使用multidex (Google提出)
multidex:
Android5.0开始默认支持(之前版本需要引入支持库android-support-multidex.jar)
在defaultConfig设置multiDexEnabled true;引入multidex库;继承MultiDexApplication,并在attachBaseContext()中设置MultiDex.install(this);
可在build.gradle添加afterEvaluate,在它的区域内部采用了–main-dex-list选项来指定主dex中要包含的类。
注意:multidex的jar包中的类必须也要打包在主dex中
局限性:
- 应用启动速度降低,甚至出现ANR现象,避免生成较大的dex文件;
- 由于Dalvik LinearAlloc的bug,可能导致其应用无法在Android4.0以前的手机上运行,还可能出现产生大量内存消耗的情况(很少出现)
解决方法:做大量的兼容性测试