Moosphan/Android-Daily-Interview

2019-09-23:有没有遇到64k问题,应该如何解决?

Moosphan opened this issue · 12 comments

2019-09-23:有没有遇到64k问题,应该如何解决?

分包(⊙o⊙)…

手机直接debug本身没有问题,但是打包的时候会出现Unable to execute dex: method ID not in[0, 0xffff]: 65536)这种问题导致打包失败,这是单个dex文件方法数超过64k导致的,基本上引入过多的依赖都会出现这个问题,解决方法:
1.导入依赖
'com.android.support:multidex:1.0.1'
2.defaultConfig增加这个设置
multiDexEnabled true
3.android下面增加这个设置
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
以上都是在app的buildl.gradle中设置的,编译。
4.打开自定义的Application,继承MultiDexApplication,并重写attachBaseContext方法

@OverRide
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

@zhaoerlei1989 继承MultiDexApplication 就不需要重写 attachBaseContext 了,你可以点进super.attachBaseContext(base); 里看看

@zhaoerlei1989 继承MultiDexApplication 就不需要重写 attachBaseContext 了,你可以点进super.attachBaseContext(base); 里看看

有些第三方的也要求继承他们的Application, 哪里继承的来那么多

单个dex文件方法超过64k,基本上都是引用过多的依赖才导致的。
解决方案:
1.导入依赖
'com.android.support:multidex:1.0.1'
2.defaultConfig增加这个设置
multiDexEnabled true
3.android下面增加这个设置
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
以上都是在app的buildl.gradle中设置的,编译。
4.打开自定义的Application,继承MultiDexApplication,并重写attachBaseContext方法

@OverRide
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}

突破65535 限制 实现三步走
1.导入依赖
‘com.android.support:multidex:1.0.3’
2.defaultConfig 增加设置
multiDexEnabled true
3.自定义Application 继承 MultiDexApplication

同步即可!
笔记在此可参考:https://www.jianshu.com/p/ade2e53b8ac2

继承 MultiDexApplication后不需要install了,他的父类实现这个方法

分包,多dex优化。

1、增加multidel依赖
2、gradle 增加multiDexEnabled true的配置
3、application继承multidexapplication
4、去掉无用的依赖

zlrab commented
  1. multidex分包处理(5.0以下需导入兼容库)
  2. 组件化
lix-b commented

现在的gradle都是默认配置multidex了,可以作为了解,新的开发者可能不会碰到这种问题

使用分包 把classdex分成多个