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 编译强相关,只不过它可巧支撑构建 JavaC++GoKotlin 等言语,而 Android 开发也根本运用上述这些言语。其他,对 Rust, Python 的支撑也在逐渐被加入,Google 对 Bazel 的开发仍是十分积极的。

转到结构这边,截止到 Android 13,你写的大部分装备文件应该仍是 Android.bp,它通过 Soong 解析成 Ninja,而偏底层装备相关的逻辑,则依然由 Android.mk 界说,并通过 Kati 解析成 Ninja,一个典型的编译流程图如下:

劝学:Android 14 Framework 引入了哪些“新”技术栈

而来到 Android 14,Bazel 的解析流程会被加入进来,流程图如下:

劝学:Android 14 Framework 引入了哪些“新”技术栈

从现在 Google 发布的道路图来看,从 Android 14 开端,一切迁移后的 C++ 模块将默许运用 Bazel 编译,从 Android 15 开端,一切 Mainline 的模块将默许运用 Bazel 编译。

看到这,估量你仍是不慌,反正老的还兼容着呢,不急。但是 Google 对这块仍是有决心的,假如问题不大,再加上官方自己不弃坑的话(老实说 Google 弃的坑不少了,懂得都懂),等到了 Android 16,整个编译体系应该都会切到 Bazel

怎样办?怎样办?怎样办?

学!怎样学?看官网!官网给咱们提供了十分丰富的比如,不管你的项目是 Java 的,仍是 Kotlin 的,常见的问题,比如第三方库怎样引证,NDK 项目怎样装备等,都能找到依葫芦画瓢的答案。

这几年拥抱开源和新技能最积极的微软,上一年就写过一篇文章,手把手教咱们怎样写 BUILD 文件,也是一个十分棒的参阅。

Settings:Kotlin 和 Jetpack Compose 都来了

开端迁移到 Kotlin

Google 在 2017 年的 IO 大会大将 Kotlin 界说为 Google 官方支撑的开发言语,时至今年,大部分 App 开发者都现已切过来了。但是,Android 结构开发者许多好像还对这门言语不以为然,或者换句话说,平常用不到,再加上 Google 好像一向没在结构里过多运用,所以暂时也没有学的必要。

很”惋惜“,在 android 14 的 Settings 模块,咱们开端看到了 Kotlin 的影子。自此,搞结构 App 开发的同学失去了终究一个不学 Kotlin 的借口。

劝学:Android 14 Framework 引入了哪些“新”技术栈

事实上,Settings 模块并不是第一个吃螃蟹的,头部的 SystemUI 模块,早在 2018 年就开端用 Kotlin 改写部分模块了,而且这次 android 14 上还有进一步的演进,这个后面会说到。

咱们许多搞结构开发的小伙伴,关于新技能好像有种本能的排挤,咱们的心里 OS 无外乎:

  • 这玩意儿都是折腾 App 用的,结构要的是安稳,完全用不到
  • Google 自己都没咋在模块里边用到,我干嘛折腾呢?
  • 天然生成骄傲,觉得自己是搞结构的,比近邻那些搞 App 的高到不知道哪里去了…

希望看到这篇文章的小伙伴,平常千万不要有以上这些主意。咱们的认知永远都是有限的,许多时分你这样想,很或许仅仅由于没有看过其他模块罢了,其他模块说不定早就卷入新的技能栈了,就等着弯道超车呢。

怎样办?怎样办?怎样办?

学!Kotlin 怎样学,这个……这么多年了,网上太多教程了,不说了。

引进 Jetpack Compose

说起来这又是一个新的坑,Google 是在 2019 年的 IO 大会宣告了把 Jetpack Compose 界说为 Android’s recommended modern toolkit for building native UI。但是,写惯了 findViewById 的咱们,有或许刚刚学会用 ViewBinding,怎样这次直接上 Jetpack Compose 了?

从 Android 14 现在释放的代码来看,Google 新建了一个 spa 包,这个包里边测验把“运用办理”、“运用告诉办理”,还有“运用情况”页用 Jetpack Compose 重写了,这些页面简直都是纯列表页面,拿它们优先下手理论上不会有太多坑,我猜 Google 也是这么考虑的?

劝学:Android 14 Framework 引入了哪些“新”技术栈

除此之外,还有3个主页面也进行了重写,这三个页面本质上也是列表页:

劝学:Android 14 Framework 引入了哪些“新”技术栈

出于稳健考虑,Google 没有默许使能这些页面。假如你想提早吃螃蟹,能够运用以下命令来敞开: adb shell settings put global settings_enable_spa true 通过查找代码,也能够轻松找到这个开关在哪里被运用:

劝学:Android 14 Framework 引入了哪些“新”技术栈

然后咱们能够去到相关页面看一下前后比照:

劝学:Android 14 Framework 引入了哪些“新”技术栈
原生完成

劝学:Android 14 Framework 引入了哪些“新”技术栈
Jetpack Compose 完成

由于 Jetpack Compose 的各个组件一向都在很好地践行 Material Design 3,能够看到后者的视觉复原要更好,也不会出现前者那样 MenuItem 背景色彩不正确的问题。

好了,让咱们回到技能自身。其实我知道许多小伙伴回绝学习 Jetpack Compose,本质上是回绝学习声明性编程,一看到那种款式的代码就脑阔疼。而我完全了解你痛苦。就像最初学习 RxJava,好不容易从函数式编程过渡到了呼应式编程,这次又来了一个新概念,的确心里是回绝的。

劝学:Android 14 Framework 引入了哪些“新”技术栈

其实编程思维的改变,说难也难,说简略也简略。回过头想一下,最初你看着他人写的 RxJava 代码,趁热打铁,感觉很厉害的样子,其实本质上仍是由于那个时分你没学会,看不懂 lambda,看不懂那些运算符是啥意思。等你后面学会了,再回过头来看,那种感觉跟初学的时分就完全不一样了。事实上,学习声明式编程也是如此。

怎样办?怎样办?怎样办?

学!幸运的是,Google 给咱们提供了详细的辅导,咱们能够参阅 developer.android.com/jetpack/com… 来快速入门上手。而且,这波 Google 自己带节奏,不学看起来是真的不行了。

SystemUI:运用架构最佳实践(Best Practise)重写

当看到这个标题的时分,你一定会觉得很晦涩,但我相信看到下面这张图,你一定不会感到生疏。

劝学:Android 14 Framework 引入了哪些“新”技术栈

没错,这便是 Google 这几年一向在 App 开发层推重的架构最佳实践。从 Android 14 开端,这套架构被引进 SystemUI 模块,用来解决之前状况栏各 item 的 Controller 和状况之间混乱不堪的问题。

劝学:Android 14 Framework 引入了哪些“新”技术栈

关于 SystemUI 而言,状况栏的每一个 item,无外乎都相关着一个个回调,而回调进来的数据,往往都是外部对象,而 item 自身或许更关怀的是自己的内部对象,并且状况一旦变了, UI 是一定要跟着变的,而这个需求恰好是这套架构最佳的运用场景。来看 Google 是怎样重构的:

劝学:Android 14 Framework 引入了哪些“新”技术栈

劝学:Android 14 Framework 引入了哪些“新”技术栈

劝学:Android 14 Framework 引入了哪些“新”技术栈

近年来,Android App 运用开发现已从最开端那种混乱不安的时代,慢慢过渡到咱们都开端注重运用架构了。从最开端的啥都往 Activity/Fragment 里塞,慢慢到后来有了 MVC,再后来到 MVP,现在又流行的 MVVM,Google 好像终究也站稳了立场。

怎样办?怎样办?怎样办?

学!关于 app 架构最佳实践 的详细内容,能够参阅 Google 官网的这篇介绍。需求留意的是,要想更方便地运用这套结构,依靠 注入 (DI) 往往是必不可少的,SystemUI 其实很早就在用依靠注入了,现在依然是 Dagger,而其实 Google 这几年一向在推进他们根据 Dagger 演变的 Hilt,这是一套更适合 Android 渠道的依靠注入结构,咱们能够从这里了解到详细概况。其他,Kotlin 协程,和对数据流(Flow)的了解也是必不可少的,这部分咱们也能够参阅官网。

我的个人主张是,咱们先学习依靠注入(DI),再学习 Kotlin Flow,终究再回过头来入门这套架构,这套学习道路应该是比较正确的。

福利: Android Studio for Platform 要来了

文章终究带来一个好消息,那便是 Google 在今年总算良心发现,想起了咱们这帮苦巴巴的搞 Android 结构的渠道开发者,在继 AIDEGEN 之后,他们正在搞 Android Studio for Platform

劝学:Android 14 Framework 引入了哪些“新”技术栈

从现在放出的预览图来看,全体应该至少是根据 IDEA 2022.3,由于默许启用了 NEW UI,然后渠道开发会用到的应该都会支撑,但何时能放出下载官方暂时还没有说,希望 Google 能好好搞,求别弃坑。

总结

写到这里,我想回到本文的标题,细心的读者会发现,我给”新技能栈的”新“字打了引号,为什么?由于关于那些注重技能发展,同时在 Android 运用层和结构层之间作业的同学来讲,这些其实早就不是新技能了,有些甚至能够说是运用层”玩剩下的“。为什么这些技能时至今日才被引进 Android 结构?我想无外乎仍是为了追求安稳,就像当年 Kotlin 也是在社区,在 App 开发层火了好多年,Google 后面才参加进来,并终究引进结构一样,许多东西的可行性和安稳性也需求时刻去验证。我个人很赏识国外大厂在技能上的务实,不像国内许多厂商弄东西,还没安稳,或者还没通过时刻验证,总是拿出来先吹为敬,或许也是大环境导致吧。

咱们学起来吧!