2023 年 Google I/O 已于 2023 年 5 月 10 日 拉开帷幕,Android 14 Beta 版本近期也已经 释放 到 Google partners,本文主要分析 Google 在 Android 14 框架代码中引入了哪些新的技术栈,而对于新功能和 API Change,则并不在本文的讨论范围之内。
编译系统:Bazel 使用范围进一步扩大
说到编译,对于独立应用而言,大家接触最多的应该是build.gradle
,这个不在此赘述。事实上,Bazel
已经不能说是在 Android 14 首次亮相了,这一点大部分 Java
开发者应该感知不到,因为我们几乎都被 Gradle
还有 Make
宠坏了(虽然也不是那么好用),比较关注新技术的搞浏览器或者偏底层的小伙伴,倒是可能早就在用了。
需要首先说明的是,Bazel
并不跟 Android
编译强相关,只不过它碰巧支持构建 Java
、C++
、Go
,Kotlin
等语言,而 Android 开发也基本使用上述这些语言。另外,对 Rust
, Python
的支持也在逐渐被加入,Google 对 Bazel
的开发还是十分积极的。
转到框架这边,截止到 Android 13,你写的大部分配置文件应该还是 Android.bp
,它经过 Soong
解析成 Ninja
,而偏底层配置相关的逻辑,则依然由 Android.mk
定义,并经过 Kati
解析成 Ninja
,一个典型的编译流程图如下:
而来到 Android 14,Bazel
的解析流程会被加入进来,流程图如下:
从目前 Google 公布的路线图来看,从 Android 14 开始,所有迁移后的 C++
模块将默认使用 Bazel
编译,从 Android 15 开始,所有 Mainline
的模块将默认使用 Bazel
编译。
看到这,估计你还是不慌,反正老的还兼容着呢,不急。然而 Google 对这块还是有信心的,如果问题不大,再加上官方自己不弃坑的话(老实说 Google 弃的坑不少了,懂得都懂),等到了 Android 16,整个编译系统应该都会切到 Bazel
。