先把结论放在前面:单个 dex 的方法数上限是 65536,这个数字来自 dex 文件里method_ids表用 16 位索引(最多 65536 项)。超过上限就要拆成多个 dex(multidex)。现代 Android(minSdk 21+)原生支持多 dex,不再需要MultiDex.install;真正需要关注的不是"能不能装下",而是"首屏依赖的类在不在主 dex 里"。
这题的骨架是"上限从哪来 + 三代加载方案 + 主 dex 规则 + 启动影响"。答得浅的是"方法数超了要分包";答得深的是能讲清索引位宽的来历、能区分 legacy MultiDex 与原生多 dex 的机制差异、并说明首屏类分布的检查方法。
65536 从哪来
答案在 dex 文件格式本身。dex文件里有几张索引表:
| 表 | 作用 | 索引位宽 | 上限 |
|---|---|---|---|
type_ids | 类型索引 | 16 位 | 65536 |
proto_ids | 原型索引 | 16 位 | 65536 |