Android开发笔记(一百七十九)避免方法数过多的问题

一个大规模的App工程,往往引入了数量繁多的第三方开发库,其中既有官方的Jetpack库,也有第三方厂商的开源包。有时候运行这种App会报错“Cannot fit requested classes in a single dex file (# methods: 65894 > 65536)”,意思是App内部引用的方法数量超过了65536个,导致App异常退出。
原来Android的每个App代码都放在一个dex文件中,系统会把内部方法的索引保存在一个链表结构里,由于这个链表的长度变量是short类型(short类型的数字占两个字节共16位),使得链表的最大长度不能超过65536(2的16次方),因此App方法数超过65536的话,链表索引溢出就报错了。为了解决方法数过多的问题,Android推出了名叫MultiDex的解决方案,也就是在打包时把应用分成多个dex文件,每个dex的方法数量均不超过65536个,由此规避了方法数过多的限制。
若想让App工程支持MultiDex,需要对其略加改造,具体改造步骤说明如下。
首先要修改模块的build.gradle文件,往dependencies节点添加下面一行配置,表示导入指定版本的MultiDex库:

implementation 'androidx.multidex:multidex:2.0.1'

还要在defaultConfig节点下添加以下配置,表示开启多个dex功能:

    multiDexEnabled true // 避免方法数最多65536的问题

其次编写自定义的Application,注意该Application类必须继承MultiDexApplication,如下所示:

public class MainApplication extends MultiDexApplication {
    // 此处省略内部的方法与属性代码
}

再次打开AndroidManifest.xml,给application节点的android:name属性设置自定义的Application,示例如下:

    android:name=".MainApplication"

然后重新编译App工程,之后运行的App就不再出现方法数过多的问题了。


点此查看Android开发笔记的完整目录

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值