解决Android安卓65k问题


给公司的老项目做开发可能都会见到这个问题:

65k

出现这个问题的原因是由于在编译时,一个项目的class文件会被全部打包为一个classes.dex文件(玩过反编译的同学应该心有所感,哈哈),它会为每个方法赋予一个id而这个id的范围在0~0xffff,所以一个app的方法数最多为65536个,超过这个数就会出现传说中的65k错误。

那如何解决呢?

Google官方已经给出了一个很好的解决方案,就是分割dex文件,这样就不会超过限制了(怎么感觉官方也是治标不治本呢)。

好了,下面进入正题。首先,我们需要引入Google提供的multiDex支持库,在build.gradle中加入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//默认配置
defaultConfig {
...
//开启多Dex支持
multiDexEnabled true
...
}
...
//支持库依赖
dependencies {
...
compile 'com.android.support:multidex:1.0.1'
...
}

之后进入选择模式:

1
2
3
4
5
6
7
8
if(没有自己的Application类){
在AndroidManifest.xml的application中声明android.support.multidex.MultiDexApplication
android:name="android.support.multidex.MultiDexApplication"
}else if(你的Application类已经继承其他类){
重写attachBaseContext()
}else{
你的Application类继承MultiDexApplication
}

其实继承MultiDexApplication和直接重写attachBaseContext()没什么区别,MultiDexApplication内部也是重写了attachBaseContext()

MultiDexApplication源码如下:

MultiDexApplication

重写的内容:

1
2
3
4
5
6
@Override

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

OK。问题解决了,现在你的项目已经支持dex分割了!

最后,还是建议大家尽量别引入太多的外部框架和sdk,尽量精简程序。

-------------本文结束,感谢您的阅读-------------

本文标题:解决Android安卓65k问题

文章作者:饭饭君~

发布时间:2018年11月28日 - 13:34

最后更新:2019年04月23日 - 10:51

原始链接:https://yangcf.github.io/2018/11/28/解决Android安卓65k问题/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

如果我的文章有帮助到你,欢迎打赏~~
0%