Android 是全球最流行的移动操作系统,有数百家厂商的设备使用了Android系统。谷歌每年都会发布新版本的 Android 系统,但只有自家的 Pixel 设备才能立即获得更新。荣耀等手机厂商通常会在三个月后才向其设备推送更新。2013年左右,这个等待时间长达 7个月——许多中端或入门级设备甚至从未收到过系统更新。

    这自然引出了一个问题:Android 是否有可能达到像苹果那样的水平,即所有支持的设备都能同时发布新版本?

    本文将探讨谷歌如何一步步重构 Android 系统,以缩短更新延迟、减少对设备制造商的依赖,并最终实现无需等待新操作系统版本即可直接发布新功能。这一历时数年的历程催生了 Android 历史上最重要的项目之一:Project Mainline。

 

碎片化问题

    Android 系统最初推出时,谷歌将自己定位为操作系统开发商,向制造商授权其服务,而不是自行研发硬件。每个厂商都会使用谷歌提供的 Android 基础版本,并对其进行大量定制:

    1.用他们自己的应用程序替换默认应用程序

    2.改变UX设计

    3.添加定制功能特性

   4.而且往往还会修改安卓核心机制。

    虽然这种策略使安卓系统迅速普及,但也造成了系统碎片化。市场上充斥着运行不同操作系统版本、定制界面和预装应用的设备。

 

为什么早期更新需要这么长时间?

    多年来,厂商一直掌控着旗下设备何时以及如何获得新的安卓版本更新,更新过程通常需要6 到 18 个月不等。事实上,新版安卓系统可能在厂商仍在努力适配旧版本时就已经发布了。而这还是旗舰机型的最佳情况。价格较低的设备往往要晚得多才能获得更新,甚至根本无法获得更新。

    为什么速度这么慢?主要有三个原因:

1. 整体式架构

    Android 被设计成一个庞大且紧密耦合的系统。更新它意味着供应商必须:

     1>.等待谷歌发布稳定的操作系统版本。

     2>.将其与他们自己的修改合并。

     3>.将厂商特有的功能适配到新的操作系统。

     4>.测试并分发新固件。

这个过程复杂、容易出错且成本高昂。

 

2. 硬件销售经济学

    大多数智能手机制造商主要通过销售设备和预装应用来盈利。而谷歌则主要依靠应用销售、订阅和服务来盈利。这种利益冲突意味着厂商缺乏快速更新旧款机型的动力——他们更倾向于推动用户购买更新、更昂贵的手机。

 

3. 缺乏模块化

    没有模块化设计,供应商无法发布增量更新。这也就意味着,手机新版本涉及到的各种硬件供应商的所有更新都需要发布完整的固件版本,这进一步延误了流程。

 

谷歌的首次回应:Project Treble

    谷歌对这种情况并不满意。大约在2017年,他们推出了Android 8的Project Treble项目。其理念是将Android操作系统框架与厂商实现(例如驱动程序和底层组件)分离。

     借助 Treble 技术,设备制造商和芯片(各种硬件)供应商可以独立更新其组件,而无需修改 Android 内核。这极大地简化了操作系统适配流程,但仅适用于预装 Android 8 或更高版本的设备。因此,Treble 的普及耗时数年,且更新仍然很大程度上依赖于供应商。

Mainline项目:将 Android 系统拆分成模块

    为了更进一步,谷歌需要一种新的架构。随着Android 10 中引入的Project Mainline,操作系统被拆分成独立的、可更新的模块。

     现在,谷歌无需再依赖完整的固件更新,而是可以通过 Google Play 直接向用户提供关键组件。最初,Android 系统共有 9 个主线模块。而到了 Android 16,模块数量已超过 50 个,涵盖了核心系统功能。

 

交付方式:APK 与 APEX

Mainline模块有两种格式:

    APK模块的工作方式与常规应用更新相同。它们在运行时安装,无需重启。

    APEX 模块(Android Pony EXpress)——用于存放底层组件的特殊容器,这些组件在系统运行时无法更新。更新这些组件需要重启系统(例如,更新 ART 运行时)。

 

    Google 甚至还添加了直接启动和自动重启机制,以便 APEX 更新能够无缝应用,而不会对用户造成重大干扰。

SDK 扩展:将新 API 引入旧版本

    更新系统组件功能强大,但如果开发者需要访问最新 Android 版本中引入的新 API该怎么办?

    为此,谷歌创建了SDK 扩展,并以主线模块的形式发布。这些扩展允许开发者即使在较旧的操作系统版本上使用新的 API。

    例如,照片选择器 API最初是在 Android 13 中引入的。得益于 SDK 扩展,现在 Android 11 和 12 也提供了相同的功能。

    开发者可以通过在 build.gradle 文件中同时指定 compileSdk 和 compileSdkExtension 来启用此功能:

android { 

    compileSdk 36

    compileSdkExtension 15

 }

    现在,应用程序除了检查操作系统版本外,还可以通过以下方式查询扩展程序版本:

SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) 

实际示例:跨版本照片选择器

    如果没有 SDK 扩展,开发者需要检查设备是否运行 Android 13 或更高版本才能使用照片选择器:

fun isPhotoPickerAvailable () : Boolean {

   return Build.VERSION.SDK_INT >= 33

 }

    借助 SDK 扩展,只要安装了正确的扩展程序,同样的功能也可以在较旧的 Android 版本上使用:

fun isPhotoPickerAvailable () : Boolean {

  return SdkExtensions.getExtensionVersion

(Build.VERSION_CODES.R) >= 2

 }

    这大大提高了开发者和用户的体验一致性。

    Project Mainline 彻底改变了 Android 的更新方式。通过操作系统模块化,并引入 APEX 模块和 SDK 扩展,谷歌获得了直接推送新功能和安全更新的能力,而无需等待供应商。

    这一转变使得 Android 能够采用新的季度发布模式,从 Android 16 开始。谷歌现在可以更频繁地发布更新,而不是像以前那样每年发布一次大型版本:夏季发布新的平台版本,然后通过 Google Play 发布模块化更新。

    换句话说,Android 终于赶上了苹果的模式——确保用户更快地获得更新,设备保持更长时间的安全,开发者可以依靠更一致的平台。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐