Android MultiDex
2018-11-30 本文已影响14人
主音King
在项目中遇到:华为手机HUAWEI-PE-TL104.4.2 API19手机安装后启动不了,即使启动在试用工程中无故异常停止运行。
发现在问题:apk时多进程,在Application的attachBaseContex中为了优化运行速度,对主进程执行了如下代码:
MultiDex.install(base)
解决:不做进程限制都执行这句代码,解决问题。
在我们项目中用的bugly文档中也说过:
MultiDex注意事项
如果使用了MultiDex,建议通过Gradle的“multiDexKeepFile”配置等方式把Bugly的类放到主Dex,另外建议在Application类的"attachBaseContext"方法中主动加载非主dex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(context);
Multidex.install(this);
}
}
Android API21之前Dalvik,DexOpt把类的方法id检索成链表长度是short类型,id数超过65536个。使用multidex兼容。
在Android API21(包括)之后ART运行时,安装时执行预编译,扫描classesN.dex文件,编译成单个.oat文件。则不需要Dalvik可执行文件分宝支持库。
所以在Android API21之前才会有65536问题。解决这个问题需要引入库
compile 'com.android.support:multidex:1.0.1'
在app的build中添加
defaultConfig {
、、、
multiDexEnabled true
}
在application中添加
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
if (!isAppMainProcess(this, false)) {
//do something for init
return;
}
LogUtils.d(TAG, "attachBaseContext-初始化");
MultiDex.install(base);
}