勸學:Android 14 Framework 引入了哪些“新”技術棧

作者:Mr_萬能膠

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 項目怎么配置等,都能找到依葫蘆畫瓢的答案。

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 后面才參與進來,并最終引入框架一樣,很多東西的可行性和穩定性也需要時間去驗證。我個人很欣賞國外大廠在技術上的務實,不像國內很多廠商弄東西,還沒穩定,或者還沒經過時間驗證,總是拿出來先吹為敬,可能也是大環境導致吧。

Android 學習筆錄

Android 性能優化篇:https://qr18.cn/FVlo89
Android 車載篇:https://qr18.cn/F05ZCM
Android 逆向安全學習筆記:https://qr18.cn/CQ5TcL
Android Framework底層原理篇:https://qr18.cn/AQpN4J
Android 音視頻篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(內含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源碼解析筆記:https://qr18.cn/Cw0pBD
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知識體:https://qr18.cn/CyxarU
Android 核心筆記:https://qr21.cn/CaZQLo
Android 往年面試題錦:https://qr18.cn/CKV8OZ
2023年最新Android 面試題集https://qr18.cn/CgxrRy
Android 車載開發崗位面試習題:https://qr18.cn/FTlyCJ
音視頻面試題錦:https://qr18.cn/AcV6Ap

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,412評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,514評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,373評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,975評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,743評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,199評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,262評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,414評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,951評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,780評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,527評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,218評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,649評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,889評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,673評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容