mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
594 字
2 分钟
📦 安卓 APK 打包超过 4GB 或超过 65535 个文件无法打包的坑
2026-06-23

把一个体量庞大的 H5 游戏(7G 资源、25 万个文件)打成安卓 APK 时,撞上了两条很多人没听过、却绕不过去的硬限制——根本打不出包。记录一下这个坑。

现象#

打包时直接报错,两种死法:

Zip32 cannot place CD entry ... (MAX=4294967295)
Too many zip entries 250000 (MAX=65535)

坑:APK 是 ZIP32,有两条硬死线#

APK 本质就是一个 ZIP 包(ZIP32 格式),有两条硬上限,而且必须同时满足,缺一条都打不出来:

限制上限原因
总大小≤ 4 GBZIP32 用 32 位记录中央目录偏移,最大 2^32-1
文件条目数≤ 65535中央目录里”总条目数”字段只有 16 位,2^16-1

体积好理解;真正阴的是文件数——现代游戏的散图集、地图切片动辄十几万个小文件,往往体积还没到 4G,先撞的就是 65535 这条

APK 的两条 ZIP 死线

为什么硬扛不行#

撞线后第一反应是绕过去,但常见的几条路都堵死:

  • ZIP64:能破两条限制,但 apksigner v2/v3 签名、安卓安装器、国产 ROM 都不认 ZIP64 的 APK,签不了、装不上。
  • AAB + Play Asset Delivery:官方大资源方案,但强绑 Google Play,不上架用不了。
  • 热更新插件:是为几十 MB 的 web bundle 设计的,扛不动几个 G 的游戏资源。

解决方向#

既然塞不进包,唯一可行的就是大头资源不进 APK,靠热更新/开局下载:把占大头的资源目录从首包移出去走 CDN,APP 启动时下载到本地,之后纯本地读。首包瘦身到 1.4 万文件 / 0.6G——两条死线同时过关。

大资源移出首包,走热更下载

注意:两条线得一起看。只把体积最大的目录移出去,体积是降了,但剩下的小文件目录可能仍然超 65535,照样打不出来。

结论#

APK = ZIP32,4GB65535 文件两条硬线必须同时满足,撞线时常常是文件数先爆。ZIP64 / AAB / 热更插件在”大体量游戏 + 国内分发”下都不可行,只能走大资源不进包、热更新下载到本地这条路。

部分信息可能已经过时