32 位 vs 64 位——为什么重要
性能差异
64 位应用可以:
- 访问超过 4GB 的内存空间(虽然单个进程的限制仍由系统决定)
- 使用更多的 CPU 寄存器,减少内存访问
- 利用 ARMv8+ 的新指令集(如加密加速)
- 在 64 位平台上避免 32 位兼容层的额外开销
安全差异
64 位架构默认开启地址空间布局随机化(ASLR),有效空间更大,攻击面更难预测。同时现代 ARM 平台的内存隔离特性(如 MTE、PAC)只在 64 位下可用。
生态驱动
Google Play 从 2019 年 8 月开始强制新应用必须支持 64 位。AppGallery Connect 同步跟进。不支持 64 位的新应用在这两大渠道无法上架。
为什么 64 位迁移这么慢
作者 Absinthe 在官方文档中分析了几点原因:
- 64 位 so 文件体积更大:64 位编译产物通常比 32 位大 20%~40%,而 App 体积与下载量呈负相关
- 上游 SDK 未提供 64 位版本:APK 中每种架构必须包含全部 .so 文件——只要一个 SDK 没提供 64 位版,其他都白搭
- 分区域分发策略:很多国内厂商的 APK 商店不强制 64 位要求,导致国内市场环境相对宽松
16KB 页面对齐
这是 2024 年开始流行的新话题。Android 15 起推荐所有原生库使用 16KB 页面对齐。LibChecker v2.5 起已经在原生库列表中标记了哪些文件已经完成 16KB 对齐、哪些是未压缩但未对齐的。