2020 年需要關(guān)注的 5 大 Android 開發(fā)技術(shù)

雖然編程環(huán)境每天都有新變化娇未,但 Android 無疑是其中更新迭代最頻繁的懂衩,每年甚至每個(gè)月都有新東西腕铸。本文介紹了 2020 年開發(fā)者最需要關(guān)注的 5 大 Android 開發(fā)技術(shù)办悟。

在眾多 Android 開發(fā)團(tuán)隊(duì)參加的 Droidcon London 2019 大會(huì)上驾凶,一系列新技術(shù)令人眼花繚亂牙甫。從 Joe Birch 介紹的無障礙智能吉他到即將到來的 Jetpack Compose 庫,創(chuàng)新內(nèi)容實(shí)在太多了调违,主流社區(qū)需要找到幾項(xiàng)核心技術(shù)才不至于迷失方向窟哺。

2020年需要關(guān)注的5大Android開發(fā)技術(shù)

這篇文章就帶著大家一起看看需要重點(diǎn)關(guān)注的一些核心技術(shù),同時(shí)本文會(huì)解釋為什么應(yīng)該優(yōu)先實(shí)現(xiàn)這些技術(shù)技肩,以及實(shí)現(xiàn)的一些初始途徑脏答。需要特別強(qiáng)調(diào)一下,實(shí)現(xiàn)這些技術(shù)雖然不會(huì)讓你的終端用戶發(fā)出驚嘆亩鬼,但它們能幫助開發(fā)者打造震撼人心的特性殖告,并為開發(fā)人員帶來更賞心悅目的代碼庫!

1. Kotlin

Kotlin 通常被視為下一個(gè) Java雳锋,它是由谷歌和 JetBrains(Android Studio 開發(fā)者)贊助的黄绩。Java 從一開始就一直是 Android 應(yīng)用的首選開發(fā)語言,但近年來 Kotlin 迅速普及玷过,如今在 10,000 種 Google Play 應(yīng)用中有近 60%使用了 Kotlin 爽丹。雖說在少數(shù)需要訪問底層原生代碼的情況下,仍會(huì)繼續(xù)使用 C++辛蚊;但在其他情況下粤蝎,Kotlin 都可以代替 Java。

Kotlin 的主要優(yōu)勢是與 Java 的完全互操作性袋马,這意味著開發(fā)人員可以盡可能遷移舊代碼初澎,而不用完全重寫整個(gè)應(yīng)用程序。這兩種語言兼容得很好虑凛,Android Studio 甚至可以自動(dòng)從 Java 轉(zhuǎn)換為 Kotlin碑宴。

這種兼容性,加上更簡潔的語法和數(shù)百項(xiàng)細(xì)小改進(jìn)桑谍,使 Kotlin 在 StackOverflow 的 2019 年開發(fā)人員調(diào)查中成為第四大“最受歡迎”和第五大“想要”的編程語言延柠,在所有移動(dòng)編程語言中排名最高。

遷移現(xiàn)有應(yīng)用有一個(gè)好方法锣披,就是在修改現(xiàn)有 Java 文件時(shí)將其轉(zhuǎn)換為 Kotlin贞间。雖然這意味著你要把經(jīng)常編輯的文件轉(zhuǎn)換過去贿条,會(huì)增加代碼審查的復(fù)雜度(比如會(huì)面臨潛在的沖突),但由于轉(zhuǎn)換后的區(qū)域能得到審查增热,因此可以確保任何問題都能被發(fā)現(xiàn)整以。

目前 Candyspace 中使用的 Kotlin 代碼占 86%(并且一直在增長),其余的 14%是實(shí)用工具 / 轉(zhuǎn)換代碼钓葫,這些代碼已經(jīng)有些年頭沒改動(dòng)過了悄蕾。

2. Jetpack

谷歌的 AndroidX/Jetpack 庫是一組實(shí)用工具票顾,旨在簡化常見的應(yīng)用需求础浮。例如用于設(shè)備上數(shù)據(jù)庫的 Room ,或用來在底層數(shù)據(jù)更改時(shí)更新顯示內(nèi)容的 LiveData 奠骄。

有了 Jetpack 庫豆同,新項(xiàng)目就省掉了重新發(fā)明輪子的麻煩,也不必等待其他開發(fā)人員來開源他們的實(shí)現(xiàn)方式含鳞,現(xiàn)在每位開發(fā)者都能獲取到那些基礎(chǔ)要素了影锈。這些庫更新非常頻繁,新功能不斷推出蝉绷,錯(cuò)誤修復(fù)也會(huì)及時(shí)發(fā)布鸭廷。由于這些庫是為了協(xié)同工作而構(gòu)建的,因此多使用 AndroidX 庫有助于最大程度地減少應(yīng)用中出現(xiàn)意外熔吗。

2020年需要關(guān)注的5大Android開發(fā)技術(shù)

從開發(fā)工作起步開始就使用 Jetpack 庫可以節(jié)省數(shù)百小時(shí)的時(shí)間辆床,但我們也可以將已有的應(yīng)用遷移到 Jetpack 庫上面。雖然看起來很麻煩桅狠,但由于這些庫非常流行讼载,針對遷移工作的指南也很容易找到。至少中跌,底層 Android 元素(視圖咨堤、片段等)可以自動(dòng)轉(zhuǎn)換

在 Candyspace漩符,我們使用了 Data Binding 和 ViewModel一喘,并可能很快加入 Room 和 Navigation。

3. 模塊化設(shè)計(jì)

一直以來嗜暴,應(yīng)用都被構(gòu)建為一個(gè)巨大的“應(yīng)用”模塊津滞,其中包含整個(gè)應(yīng)用所需的一切。盡管這樣做確實(shí)能讓資源共享起來更容易灼伤,但也意味著這個(gè)應(yīng)用的某些部分無法為其他應(yīng)用 / 開源項(xiàng)目所重用触徐;更重要的是,對應(yīng)用做出更改時(shí)必須重新編譯整個(gè)代碼庫狐赡。

相反撞鹉,如果應(yīng)用由許多較小的模塊組成,則只需重新編譯做出更改的代碼即可,從而大大縮短了構(gòu)建時(shí)間鸟雏。此外享郊,模塊化設(shè)計(jì)還為高級 Android 特性(例如即時(shí)應(yīng)用——用戶無需安裝任何內(nèi)容即可使用你的應(yīng)用的部分功能,和動(dòng)態(tài)特性——按需安裝應(yīng)用的各個(gè)部分)的應(yīng)用打開了大門孝鹊。

將一款現(xiàn)有應(yīng)用拆分為多個(gè)模塊可能會(huì)是一個(gè)很復(fù)雜的工作炊琉,因?yàn)闀?huì)因此而發(fā)現(xiàn)之前隱藏的問題(“DateUtility 是什么東西?為什么每個(gè)類都需要它S只睢苔咪?”);但是一旦改造完成柳骄,代碼庫就會(huì)進(jìn)入一種更加健康的狀態(tài)团赏。另外,如果一款新的應(yīng)用需要類似的功能耐薯,則可以快速重用已有模塊舔清,從而大大節(jié)省時(shí)間!

2020年需要關(guān)注的5大Android開發(fā)技術(shù)

模塊化應(yīng)用架構(gòu)的一個(gè)示例(來源:本文作者創(chuàng)建G酢)

雖然設(shè)計(jì)一個(gè)模塊化架構(gòu)可能是很復(fù)雜的任務(wù)体谒,但我之前已經(jīng)寫過一些指導(dǎo)性原則,這些原則受到了 Nikits Kozlov 關(guān)于模塊化和構(gòu)建時(shí)間的文章的啟發(fā)臼婆。Plaid 也寫了一篇介紹他們向模塊化設(shè)計(jì)遷移經(jīng)驗(yàn)的文章抒痒。

在 Candyspace,我們的應(yīng)用設(shè)計(jì)都是完全模塊化的目锭,以盡量減少構(gòu)建時(shí)間對開發(fā)工作的中斷影響评汰。

4. App Bundle

使用傳統(tǒng)的 APK 將應(yīng)用分發(fā)到用戶的設(shè)備時(shí),必須安裝針對所有設(shè)備準(zhǔn)備的所有資源痢虹。這意味著每張位圖圖像可能會(huì)有 5 個(gè)副本(用于不同的屏幕精度)被去,還要安裝針對不同設(shè)備架構(gòu)的多個(gè)庫版本,甚至還得安裝多組邊距和填充值奖唯。

使用 App Bundle 分發(fā)一款應(yīng)用時(shí)惨缆,用戶下載的 APK 只包含他們實(shí)際所需要的資源。這樣一來丰捷,平均的應(yīng)用大小就會(huì)減少 20%坯墨,而未經(jīng)優(yōu)化的應(yīng)用改換格式后應(yīng)用大小將會(huì)得到更顯著的縮減。

2020年需要關(guān)注的5大Android開發(fā)技術(shù)

縮減應(yīng)用大小的示例(資料來源: https://events.google.com/io2018/)

App Bundles 是 18 個(gè)月前剛剛誕生的病往,但已經(jīng)有超過 25%的應(yīng)用安裝時(shí)使用了這種格式捣染!這是谷歌推薦使用的格式,并且大多數(shù)應(yīng)用幾乎無需改動(dòng)就能使用這種格式停巷,只需在 Play 商店上處理一下 App Bundle 的簽名即可耍攘。

在 Candyspace榕栏,我們正在遷移到 App Bundles 上,同時(shí)盡量避免破壞我們現(xiàn)有的工作流程(Slack蕾各、QAing 構(gòu)建扒磁、非 Google Play 安裝)。Alistair Sykes 的文章是一份很棒的遷移參考資料式曲,文章考慮到了 CI 服務(wù)器妨托、Slack 和 Google Play 內(nèi)部應(yīng)用共享等事項(xiàng)。

5. 測試

是的吝羞,測試兰伤。當(dāng)然,測試并不是什么閃亮的新特性脆贵,也不是用戶能看到的內(nèi)容医清,但想要確保一款已有一定用戶基礎(chǔ)的應(yīng)用的可靠性起暮,就必須要徹底測試你的應(yīng)用程序才行卖氨。由于崩潰率會(huì)直接影響你的 Play 商店評分(并且肯定會(huì)拖累評分!)负懦,因此應(yīng)該設(shè)法將其保持在較低水平上筒捺。

2020年需要關(guān)注的5大Android開發(fā)技術(shù)

測試金字塔(來源:developer.android.com)

Android 的三種最常見的測試類型分別是(降序排列):

  • 單元測試,例如:我的平方根函數(shù)會(huì)返回平方根嗎纸厉?

這些測試將構(gòu)成你測試流程的大部分內(nèi)容系吭,它們用來確保特定的代碼段(例如一個(gè)函數(shù))能按預(yù)期正常運(yùn)行。當(dāng)你對一個(gè)部件建立起信心后颗品,就可以將其用于…

  • 集成測試肯尺。例如:我的數(shù)學(xué)模塊可以與位置模塊協(xié)同工作嗎?

這些測試可確保你的各個(gè)代碼區(qū)域(模塊或?qū)樱┛梢哉f(xié)同工作躯枢。知道應(yīng)用的組件可以正確相互通信后则吟,你就可以添加…

  • 自動(dòng)化的 UI 測試,例如:用戶可以在應(yīng)用上標(biāo)記一個(gè)位置嗎锄蹂?

在設(shè)備或仿真器上只會(huì)運(yùn)行這些測試氓仲,它們能確保應(yīng)用按預(yù)期提供完整的用戶體驗(yàn)。這些測試通常比其他類型的測試要慢得多(并且運(yùn)行起來更加不便)得糜。

谷歌建議將測試的分布定為 70%的單元測試敬扛、20%的集成測試和 10%的大型測試,占比較小的部分需要更長的執(zhí)行時(shí)間朝抖、維護(hù)時(shí)間和實(shí)施時(shí)間啥箭。

最好的測試資源是官方文檔,因?yàn)樗峁┝怂袦y試類型的介紹治宣,以及如何將其實(shí)現(xiàn)到項(xiàng)目中的教程急侥。

在 Candyspace抬驴,我們將重點(diǎn)放在單元測試上,其占比要比谷歌建議的比例更大缆巧,以確保所有新類的行為都是可預(yù)測的布持。我們目前還在改進(jìn)自動(dòng) UI 測試,以減少對手動(dòng)測試的依賴陕悬。

在編程的任何領(lǐng)域题暖,關(guān)于解決問題的最佳方法都會(huì)有一百種不同的意見;但 Android 有絕對優(yōu)勢:Android 擁有一個(gè)龐大的開發(fā)者社區(qū)捉超,這意味著一個(gè)十分優(yōu)秀的新技術(shù)會(huì)迅速在開發(fā)者中普及胧卤。當(dāng)你在互聯(lián)網(wǎng)上向陌生人尋求幫助時(shí),如果你找的是“Jetpack LiveData”而不是“之前的開發(fā)人員從 Web 開發(fā)者朋友那里復(fù)制并轉(zhuǎn)換的庫”拼岳,成功獲得答案的可能性就會(huì)大得多枝誊!

維持一個(gè)健康的代碼庫的關(guān)鍵,就是能夠適應(yīng)這些不斷變化的標(biāo)準(zhǔn)并重構(gòu)現(xiàn)有項(xiàng)目惜纸。為了了解最新的 Android 開發(fā)實(shí)踐和最佳做法叶撒,我推薦大家關(guān)注 Android 開發(fā)者博客 /r/AndroidDev subreddit Fragmented 播客耐版。

原文鏈接:

https://blog.candyspace.com/5-essential-android-techniques-for-2020

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祠够,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粪牲,更是在濱河造成了極大的恐慌古瓤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腺阳,死亡現(xiàn)場離奇詭異落君,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)亭引,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绎速,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痛侍,你說我怎么就攤上這事朝氓。” “怎么了主届?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵赵哲,是天一觀的道長。 經(jīng)常有香客問我君丁,道長枫夺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任绘闷,我火速辦了婚禮橡庞,結(jié)果婚禮上较坛,老公的妹妹穿的比我還像新娘。我一直安慰自己扒最,他們只是感情好丑勤,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吧趣,像睡著了一般法竞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上强挫,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天岔霸,我揣著相機(jī)與錄音,去河邊找鬼俯渤。 笑死呆细,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的八匠。 我是一名探鬼主播絮爷,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼臀叙!你這毒婦竟也來了略水?” 一聲冷哼從身側(cè)響起价卤,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤劝萤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后慎璧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體床嫌,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年胸私,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厌处。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岁疼,死狀恐怖阔涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捷绒,我是刑警寧澤瑰排,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站暖侨,受9級特大地震影響椭住,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜字逗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一京郑、第九天 我趴在偏房一處隱蔽的房頂上張望宅广。 院中可真熱鬧,春花似錦些举、人聲如沸跟狱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽肤。三九已至,卻和暖如春绪抛,著一層夾襖步出監(jiān)牢的瞬間资铡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工幢码, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留笤休,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓症副,卻偏偏與公主長得像店雅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子贞铣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容