淺談 2022 Android 端技術(shù)趨勢(shì),什么值得學(xué)!
引言
回頭去看 2021,過(guò)的似乎那么快,不敢相信我已經(jīng)從事 Android 開(kāi)發(fā)兩年了,不免生出一些感嘆。

那么 2022 ,Android 端會(huì)有什么技術(shù)趨勢(shì)嗎?或者什么 [新] 技術(shù)值得去學(xué)? 又或者對(duì)我來(lái)說(shuō),現(xiàn)在什么 [值得] 去學(xué)?
本文將通過(guò)我個(gè)人的技術(shù)學(xué)習(xí)經(jīng)歷去分析我們應(yīng)該怎么選用某個(gè)技術(shù),希望對(duì)大家能有所幫助。
回頭看
讓我們把時(shí)間切回過(guò)去,最近幾年我都給自己加了哪些技術(shù)點(diǎn)?
2019-2020
Kotlin,協(xié)程MVP,Hilt,MVVM,JetPack相關(guān)熱修復(fù) Flutter淺試自動(dòng)化、持續(xù)集成相關(guān)
2021-2022
JetPack ComposeEpoxy+Mvrx,MVI
看完這個(gè)表,是不是驚嘆于,我靠,你小子 2021 等于啥都沒(méi)學(xué)???
說(shuō)來(lái)尷尬,當(dāng)我自己從博客記錄從翻閱時(shí),也有這份感嘆,對(duì)于 [新技術(shù)] ,真的好像沒(méi)怎么看了,所以在年終總結(jié)上,我發(fā)出了這樣一句感嘆,今年用的組件都是以前學(xué)過(guò)的,只不過(guò)忘了,又翻出筆記看了一眼。
但仔細(xì)又想了下,2021新技術(shù)真的好像沒(méi)有多少,對(duì)于 Android 端而言,Compose 算一擊重拳,而 MVI 又是最近因?yàn)?nbsp;Compose 被正式啟用為 Google 推薦 [新] 架構(gòu)標(biāo)準(zhǔn),其他的好像真的沒(méi)有。
Google今年推過(guò)的技術(shù)
如果我們只將技術(shù)定義為 [技術(shù)組件] ,那就可能太狹義,所以那就細(xì)細(xì)列舉一下今年 Google 推過(guò)的那些技術(shù)文章:
如何找到呢,那么 Android開(kāi)發(fā)者 公眾號(hào)就是最優(yōu)先的。所以我們就通過(guò)其發(fā)布過(guò)的文章,大致統(tǒng)計(jì)一下,Android 官方給我們的建議及 [開(kāi)發(fā)指南] ,我排了一個(gè)表,大致如下:
JetPack
Navigation、Hilt、WorkManager、ActivityResultCompose、Wear OS-Compose、Wear Os-卡片庫(kù)WindowsManager、Room、Paging3.0、Glance - Alpha折疊屏,大屏適配
推薦了很多次,
Android12上也推了幾次Kotlin
Flow、協(xié)程Android12
行為變更、隱私安全更新、新的 小組件widget
安全方面
數(shù)據(jù)加密與生物特征、App
合規(guī)Android 啟動(dòng)相關(guān)
App Startup、延遲初始化CameraX
Material Desgin
按照推薦頻率,我將它們分別列在了上面,總共上面這幾大類(lèi)。不難發(fā)現(xiàn),JetPack 仍然是 Android 官方 首推 ,然后就是 折疊屏以及不同屏幕 的適配,接著就是 Kotlin 與 Android12 ,當(dāng)然今年因?yàn)?nbsp;合規(guī) 方面的各種問(wèn)題,Android團(tuán)隊(duì) 對(duì)于安全方面也提到了,最后就是和性能以及 UI 相關(guān)的一些推薦。
趨勢(shì)預(yù)測(cè)
折疊屏與大屏適配
嚴(yán)格上這個(gè)其實(shí)不算是一項(xiàng)技術(shù),而是一項(xiàng)適配工作。但是一直以來(lái),對(duì)于大屏的適配,Android 上基本做的很少。自從三星推出第一個(gè)折疊屏之后,這個(gè)適配就開(kāi)始被重視起來(lái)了。
廠(chǎng)商方面,目前 oppo,華為,小米 也都紛紛推出自己的折疊屏手機(jī),以滿(mǎn)足先行市場(chǎng)。
官方支持度 方面,如果看過(guò)今年的 IO 大會(huì),就會(huì)發(fā)現(xiàn),折疊屏適配已經(jīng)被專(zhuān)門(mén)放到了一個(gè)欄目,而且專(zhuān)門(mén)講解,官方公眾號(hào)也已經(jīng)推了多次。
所以我們姑且可以認(rèn)為,折疊屏適配應(yīng)該是2022的一個(gè)趨勢(shì),但目前對(duì)于折疊屏的適配的主流App其實(shí)還沒(méi)有多少,更多的也都是廠(chǎng)商做了相關(guān)適配,app開(kāi)發(fā)方面專(zhuān)門(mén)針對(duì)改動(dòng)做的其實(shí)并不多。
所以可見(jiàn)在2022隨著折疊屏手機(jī)機(jī)型的愈來(lái)愈多,某些關(guān)鍵業(yè)務(wù)的全面適配工作也將隨之展開(kāi),而不是現(xiàn)在僅僅只是在折疊的時(shí)候,同時(shí)存在兩個(gè)APP,或者某個(gè)頁(yè)面展示在另一個(gè)屏幕。
技術(shù)支持方面,Android團(tuán)隊(duì) 為此專(zhuān)門(mén)準(zhǔn)備了一個(gè)新的 JetPack 組件,JetPack WindowManager,其主要功能就是監(jiān)聽(tīng)屏幕的折疊狀態(tài),以及當(dāng)前相應(yīng)的屏幕信息,目前主要以可折疊設(shè)備為目標(biāo),不過(guò)未來(lái)將支持更多屏幕類(lèi)型及窗口功能,現(xiàn)在處于 rc 版本,當(dāng)然今年也肯定會(huì)推出穩(wěn)定版。
JetPack Compose
Compose 自從發(fā)布第一個(gè)穩(wěn)定版本后,在今年的 IO 大會(huì)上也有專(zhuān)門(mén)的分區(qū)去講。
其是用于構(gòu)建 原生Android 的一個(gè) 工具包 ,以 聲明式 寫(xiě)法,搭配 Kotlin,可大大簡(jiǎn)化并加快原生的 UI 開(kāi)發(fā)工作。
目前 Compose 已經(jīng)對(duì)如下幾個(gè)方面做了支持:
Android UI 支持 Wear 可穿戴設(shè)備支持 Android Widget 小組件支持
非官方方面,jetbrains 也對(duì)桌面版,以及網(wǎng)頁(yè)做了相關(guān)支持,具體見(jiàn):Compose Multiplatform
桌面版 目前已經(jīng)發(fā)布了正式版本1.0.1
得益于 Compose 的聲明式開(kāi)發(fā),使得其做折疊屏適配也是較為簡(jiǎn)單。在與原生 View 的交互上,Compose 支持的也非常不錯(cuò)。
所以我們可以認(rèn)為,2022,如果從事原生開(kāi)發(fā),那么
Compose勢(shì)必是一個(gè)比較適合你學(xué)習(xí)的新技術(shù),它的上手難度并不大,只要你熟悉Kotlin,也就能很快上手,只不過(guò)目前其在ide上的 預(yù)覽 功能比較慢,還有待后續(xù)優(yōu)化。
Kotlin
協(xié)程
協(xié)程其實(shí)在前幾年已經(jīng)被廣泛使用,我第一次使用協(xié)程是在2020年,也見(jiàn)證了其逐漸替代 AsyncTask 及相關(guān)線(xiàn)程池工具的過(guò)程。
Flow
Flow 今年來(lái)被 Android團(tuán)隊(duì) 推薦了多次,其主要以協(xié)程為基礎(chǔ)構(gòu)建,某種意義上而言,我個(gè)人覺(jué)得其似乎有點(diǎn)替代 RxJava 的意思。得益于 Kotlin 的強(qiáng)大與簡(jiǎn)潔,Flow 今年出現(xiàn)最多的場(chǎng)景反而是 Android團(tuán)隊(duì) 推薦其用于替代 LiveData ,以增強(qiáng)部分情況下的使用。
當(dāng)然 Flow 不止于此,如果你正在使用 Kotlin ,并且協(xié)程用的也比較多,那么 Flow 肯定是繞不開(kāi)的一個(gè)話(huà)題。
所以我們可以預(yù)估,在2022,協(xié)程 與
Flow依然值得學(xué)習(xí),并且也是能很快感受到效益的組件。但是相比協(xié)程,
Flow其實(shí)還有很長(zhǎng)一段時(shí)間要走,畢竟常見(jiàn)開(kāi)發(fā)場(chǎng)景里,LiveData 就可以滿(mǎn)足,而Flow卻顯得不是那么必需。
ASM
這項(xiàng)技術(shù)其實(shí)并不新奇,但是因?yàn)槠浔旧硇枰那皞渲R(shí)挺多,比如 Android打包流程 ,APK打包流程,字節(jié)碼,自定義 Gradle 插件,Transform API ,導(dǎo)致細(xì)分為了好多領(lǐng)域,大佬們依然在熱追,而像我這樣的菜鳥(niǎo)其實(shí)還是一臉吃瓜。
那為什么我認(rèn)為其是一個(gè)技術(shù)趨勢(shì)呢?
主要是 合規(guī) 帶來(lái)的影響,大的環(huán)境下,可能以后打包時(shí),我們都會(huì)監(jiān)測(cè)相應(yīng)的權(quán)限聲明與隱私調(diào)用,否則如何確保后續(xù)的改動(dòng)不會(huì)導(dǎo)致違規(guī)呢?但如何確定某個(gè) sdk 沒(méi)有調(diào)用?而且我們也不可能每次都讓相關(guān)第三方去檢測(cè)。
所以,維護(hù)一個(gè)相應(yīng)的監(jiān)測(cè)組件,是大環(huán)境下的必需。而實(shí)現(xiàn)上述插件最好的方式就是 Hook 或者 ASM ,所以如果你目前階段比較高,ASM 依然是你避不開(kāi)的技術(shù)選題。
什么[值得]你去學(xué)?
這個(gè)副標(biāo)題其實(shí)有一點(diǎn)夸張,但仔細(xì)想想,其實(shí)就是這樣,我們應(yīng)該明白,到底什么是更適合自己當(dāng)下學(xué)習(xí)的。
以我個(gè)人為例,大家可以從中體會(huì)一下,自己應(yīng)該關(guān)注哪些技術(shù),當(dāng)然,我個(gè)人的僅只能作為和我一樣的同學(xué)做參考:
就像最開(kāi)始說(shuō)的,其實(shí)這些新組件,很多我都已經(jīng)用過(guò)或者記錄過(guò),在最開(kāi)始的兩年,我一直在追尋組件越新越好的道路上,所以每當(dāng)新出一個(gè)組件,總會(huì)在項(xiàng)目中進(jìn)行實(shí)踐,去嘗試。
但是我也逐漸發(fā)現(xiàn)了一些問(wèn)題,當(dāng)經(jīng)歷了[使用工具]的這個(gè)階段,當(dāng)我要去解決某些特定情況下問(wèn)題時(shí),突然發(fā)現(xiàn),自己似乎什么都不會(huì),或者就只會(huì)基礎(chǔ),比如:
在集成某些 gradle插件時(shí),如果要滿(mǎn)足CI下的一些便捷,要去寫(xiě)一些Task去滿(mǎn)足動(dòng)態(tài)集成,而自己對(duì)Gradle僅僅處于Android常見(jiàn)使用階段,這時(shí)候就需要去學(xué)相關(guān);我自己也會(huì)維護(hù)一些組件庫(kù),當(dāng)使用的同學(xué)逐漸增多,大家提到的問(wèn)題也越來(lái)越多,那如何解決這些問(wèn)題,如何優(yōu)雅的兼容,組件的組合方式,如何運(yùn)用合適的設(shè)計(jì)模式去優(yōu)化,這些又是我需要考慮的問(wèn)題; 當(dāng)我們開(kāi)始對(duì)音視頻組件進(jìn)行相關(guān)優(yōu)化時(shí),此時(shí)又出現(xiàn)了很多方向,最終的方案選型也是需要你再次進(jìn)入一個(gè)未知領(lǐng)域,從0到0.1;
新技術(shù)會(huì)讓我當(dāng)前編碼變得開(kāi)心,能節(jié)省我很多事,但其不能解決一些非編碼或者復(fù)雜問(wèn)題,而這些問(wèn)題,是每個(gè)同學(xué)前進(jìn)道路上也都會(huì)遇到的,所以我們常常會(huì)看到,做 Android 真難,啥都要會(huì)。
總體對(duì)我而言,今年會(huì)主要將一些精力放在如下幾個(gè)方面:
Gradle相關(guān)設(shè)計(jì)模式在三方庫(kù)中的運(yùn)用 Android 相關(guān) 源碼 理解
總結(jié)
技術(shù)在不斷變化與迭代,有些技術(shù)我們會(huì)發(fā)現(xiàn)為什么好幾年了,今年似乎特別受人關(guān)注,其實(shí)也是因?yàn)樵谀撤N環(huán)境下,其的作用逐漸顯現(xiàn)。而這些技術(shù)正是成為一名優(yōu)秀的 Android工程師 所必須具備的基礎(chǔ)技能。
我們?cè)谧穼?nbsp;[新] 技術(shù)的,享受快捷的同時(shí),也別忘了 [停] 下來(lái)看看身邊風(fēng)景。
來(lái)源:Petterp
https://juejin.cn/post/7053831595576426504
-End-
全棧架構(gòu)社區(qū)交流群
「全棧架構(gòu)社區(qū)」建立了讀者架構(gòu)師交流群,大家可以添加小編微信進(jìn)行加群。歡迎有想法、樂(lè)于分享的朋友們一起交流學(xué)習(xí)。
