1. 动态分区背景:从传统分区到动态分区,为什么Google要推动态分区?

大家好,我是你们的老朋友。今天咱们来聊聊动态分区——这个在Android系统升级史上堪称里程碑式的设计。

说实话,我第一次接触动态分区时,心里也是犯嘀咕的。传统分区用了这么多年,不是好好的吗?Google干嘛非要折腾这一出?后来我在一个项目里被分区大小问题折磨得够呛,才真正理解了Google的良苦用心。

1.1 传统分区:那个"一刀切"的年代

先说说传统分区。在Android 10之前,系统分区基本是固定的。你买一台手机,system分区多大、vendor分区多大、product分区多大,出厂时就焊死了。

举个例子,一台手机出厂时system分区给了2GB,vendor给了1GB。结果系统升级时,新版本system需要2.5GB,vendor只需要0.5GB。你怎么办?

核心痛点:分区大小是静态的,但系统需求是动态的。这种"一刀切"的设计,在OTA升级时特别尴尬。

我遇到过这样一个项目:某款手机原本system分区是2.8GB,vendor是1.2GB。Android大版本升级后,system需要3.2GB,vendor反而降到0.8GB。你猜怎么着?我们只能硬着头皮重新做分区表,刷机——用户数据全没了。这种体验,你说用户能不骂娘吗?

1.2 传统分区的三大"死穴"

说白了,传统分区有三个绕不开的坑:

  1. 空间浪费严重——每个分区都得预留余量,但余量往往用不上。system分区剩500MB,vendor分区却不够用,这种"旱的旱死,涝的涝死"的情况太常见了。
  2. OTA升级风险高——升级时如果新镜像比分区大,直接升级失败。我见过最惨的一次,用户升级到一半卡住了,手机变砖,只能返厂。
  3. 厂商定制困难——每个厂商的分区布局都不一样,Google想推新功能(比如Treble、Mainline),得跟每家厂商单独沟通,效率极低。

注意:传统分区还有一个隐藏问题——AB分区机制下,每个槽位都得预留完整的分区空间。两个槽位加起来,光system就占了4GB以上,这还不算vendor、product等。对于低端机来说,这简直是灾难。

1.3 动态分区:把"死分区"变成"活分区"

动态分区的思路其实很简单:不再给每个分区固定大小,而是把所有分区放在一个"超级分区"(super分区)里。系统启动时,动态分区管理器会根据实际需求,从super分区里动态分配空间。

你想想看,这就像你原来有3个固定大小的抽屉,每个抽屉只能放特定东西。现在换成一个大柜子,想怎么隔就怎么隔,灵活多了。

具体来说,动态分区做了这几件事:

  • 合并分区空间——system、vendor、product等分区都放在super分区里,共享空间
  • 按需分配——升级时如果system需要更多空间,可以从vendor那里"借"
  • 支持逻辑卷——分区不再是物理分区,而是逻辑卷,可以随时调整大小

下面这张图可以帮你理解动态分区的整体架构:

动态分区核心架构图 传统分区(固定大小) system分区(固定2GB) vendor分区(固定1GB) product分区(固定0.5GB) 动态分区(灵活分配) super分区(4GB) system(动态分配,如2.5GB) vendor(动态分配,如0.8GB) product(动态分配,如0.7GB) 关键变化: • 分区不再是物理分区,而是super分区内的逻辑卷 • 升级时系统可以动态调整各分区大小,无需重新分区 • 空间利用率大幅提升,OTA升级成功率显著提高

1.4 Google为什么要推动态分区?

这个问题,我当年也问过Google的工程师。他们的回答很直接:为了OTA升级的可靠性和灵活性。

但我觉得,背后还有更深层的考量:

  • Project Treble的推进——Treble把vendor和system分离,但分区大小固定的话,分离的意义就大打折扣。动态分区让Treble真正落地。
  • Mainline模块化——Google想把更多系统组件放到Google Play系统更新里,这需要分区能灵活调整。动态分区正好满足这个需求。
  • 降低厂商适配成本——以前每家厂商的分区布局都不一样,Google推新功能得逐个适配。动态分区统一了分区管理,厂商只需要关注super分区的大小就行。

我的经验:曾经有个客户,他们的低端机只有4GB用户空间,还要做AB分区。传统分区方案下,两个槽位各占2GB,用户实际可用空间几乎为零。改用动态分区后,super分区只占3GB,用户空间恢复到1GB——虽然还是小,但至少能用了。

1.5 动态分区带来的变化

动态分区不是简单的技术升级,它改变了整个OTA升级的玩法:

对比项 传统分区 动态分区
分区大小 固定,出厂即定 灵活,可动态调整
空间利用率 低,每个分区需预留余量 高,共享super分区空间
OTA升级 容易因空间不足失败 可动态调整,成功率更高
厂商定制 每家分区布局不同 统一由super分区管理
AB分区支持 空间浪费严重 空间利用率优化

说白了,动态分区就是给Android系统装了一个"弹性存储"的能力。你不需要再为每个分区的大小发愁,系统自己会搞定。

注意:动态分区虽然好,但也不是银弹。super分区的大小仍然需要合理规划。如果super分区给得太小,动态分配的空间也有限。我建议super分区至少预留系统总空间的1.5倍,才能保证未来升级的灵活性。

1.6 小结

动态分区的出现,本质上是Android系统复杂度提升后的必然选择。从Android 10开始,Google强制要求新设备使用动态分区,这背后是对OTA升级体验的极致追求。

我个人觉得,动态分区最大的价值不是技术本身,而是它让Android系统有了"进化"的能力。你想想看,一个不能自我调整的系统,怎么应对未来几年的版本升级?

嗯,关于动态分区的背景就聊到这里。下一节我们会深入动态分区的技术实现,看看super分区到底是怎么工作的。


公众号:蓝海资料掘金营,微信deep3321