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
。
怎样办?怎样办?怎样办?
学!怎样学?看官网!官网给咱们提供了十分丰富的比如,不管你的项目是 Java 的,仍是 Kotlin 的,常见的问题,比如第三方库怎样引证,NDK 项目怎样装备等,都能找到依葫芦画瓢的答案。
这几年拥抱开源和新技能最积极的微软,上一年就写过一篇文章,手把手教咱们怎样写 BUILD
文件,也是一个十分棒的参阅。
Settings:Kotlin 和 Jetpack Compose 都来了
开端迁移到 Kotlin
Google 在 2017 年的 IO 大会大将 Kotlin 界说为 Google 官方支撑的开发言语,时至今年,大部分 App 开发者都现已切过来了。但是,Android 结构开发者许多好像还对这门言语不以为然,或者换句话说,平常用不到,再加上 Google 好像一向没在结构里过多运用,所以暂时也没有学的必要。
很”惋惜“,在 android 14 的 Settings 模块,咱们开端看到了 Kotlin 的影子。自此,搞结构 App 开发的同学失去了终究一个不学 Kotlin 的借口。
事实上,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 也是这么考虑的?
除此之外,还有3个主页面也进行了重写,这三个页面本质上也是列表页:
出于稳健考虑,Google 没有默许使能这些页面。假如你想提早吃螃蟹,能够运用以下命令来敞开:
adb shell settings put global settings_enable_spa true
通过查找代码,也能够轻松找到这个开关在哪里被运用:
然后咱们能够去到相关页面看一下前后比照:
原生完成
Jetpack Compose 完成
由于 Jetpack Compose
的各个组件一向都在很好地践行 Material Design 3,能够看到后者的视觉复原要更好,也不会出现前者那样 MenuItem
背景色彩不正确的问题。
好了,让咱们回到技能自身。其实我知道许多小伙伴回绝学习 Jetpack Compose
,本质上是回绝学习声明性编程,一看到那种款式的代码就脑阔疼。而我完全了解你痛苦。就像最初学习 RxJava
,好不容易从函数式编程过渡到了呼应式编程,这次又来了一个新概念,的确心里是回绝的。
其实编程思维的改变,说难也难,说简略也简略。回过头想一下,最初你看着他人写的 RxJava
代码,趁热打铁,感觉很厉害的样子,其实本质上仍是由于那个时分你没学会,看不懂 lambda
,看不懂那些运算符是啥意思。等你后面学会了,再回过头来看,那种感觉跟初学的时分就完全不一样了。事实上,学习声明式编程也是如此。
怎样办?怎样办?怎样办?
学!幸运的是,Google 给咱们提供了详细的辅导,咱们能够参阅 developer.android.com/jetpack/com… 来快速入门上手。而且,这波 Google 自己带节奏,不学看起来是真的不行了。
SystemUI:运用架构最佳实践(Best Practise)重写
当看到这个标题的时分,你一定会觉得很晦涩,但我相信看到下面这张图,你一定不会感到生疏。
没错,这便是 Google 这几年一向在 App 开发层推重的架构最佳实践。从 Android 14 开端,这套架构被引进 SystemUI
模块,用来解决之前状况栏各 item 的 Controller
和状况之间混乱不堪的问题。
关于 SystemUI
而言,状况栏的每一个 item,无外乎都相关着一个个回调,而回调进来的数据,往往都是外部对象,而 item 自身或许更关怀的是自己的内部对象,并且状况一旦变了, UI 是一定要跟着变的,而这个需求恰好是这套架构最佳的运用场景。来看 Google 是怎样重构的:
近年来,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
。
从现在放出的预览图来看,全体应该至少是根据 IDEA 2022.3,由于默许启用了 NEW UI,然后渠道开发会用到的应该都会支撑,但何时能放出下载官方暂时还没有说,希望 Google 能好好搞,求别弃坑。
总结
写到这里,我想回到本文的标题,细心的读者会发现,我给”新技能栈的”新“字打了引号,为什么?由于关于那些注重技能发展,同时在 Android 运用层和结构层之间作业的同学来讲,这些其实早就不是新技能了,有些甚至能够说是运用层”玩剩下的“。为什么这些技能时至今日才被引进 Android 结构?我想无外乎仍是为了追求安稳,就像当年 Kotlin 也是在社区,在 App 开发层火了好多年,Google 后面才参加进来,并终究引进结构一样,许多东西的可行性和安稳性也需求时刻去验证。我个人很赏识国外大厂在技能上的务实,不像国内许多厂商弄东西,还没安稳,或者还没通过时刻验证,总是拿出来先吹为敬,或许也是大环境导致吧。
咱们学起来吧!