落後就要捱打!2020最需關注5大 Android 開發技術!
雖然程式設計環境每天都有新變化,但 Android 無疑是其中更新迭代最頻繁的,每年甚至每個月都有新東西。本文介紹了 2020 年開發者最需要關注的 5 大 Android 開發技術。
在眾多 Android 開發團隊參加的 Droidcon London 2019 大會上,一系列新技術令人眼花繚亂。從 Joe Birch 介紹的無障礙智慧吉他 [1] 到即將到來的 Jetpack Compose 庫 [2],創新內容實在太多了,主流社群需要找到幾項核心技術才不至於迷失方向。
這篇文章就帶著大家一起看看需要重點關注的一些核心技術,同時本文會解釋為什麼應該優先實現這些技術,以及實現的一些初始途徑。需要特別強調一下,實現這些技術雖然不會讓你的終端使用者發出驚歎,但它們能幫助開發者打造震撼人心的特性,併為開發人員帶來更賞心悅目的程式碼庫!
1. Kotlin
Kotlin 通常被視為下一個 Java,它是由谷歌和 JetBrains(Android Studio 開發者)贊助的。Java 從一開始就一直是 Android 應用的首選開發語言,但近年來 Kotlin 迅速普及,如今在 10,000 種 Google Play 應用中有近 60%使用了 Kotlin[3]。雖說在少數需要訪問底層原生程式碼的情況下,仍會繼續使用 C++;但在其他情況下,Kotlin 都可以代替 Java。
Kotlin 的主要優勢是與 Java 的完全互操作性,這意味著開發人員可以儘可能遷移舊程式碼,而不用完全重寫整個應用程式。這兩種語言相容得很好,Android Studio 甚至可以自動從 Java 轉換為 Kotlin。
這種相容性,加上更簡潔的語法和數百項細小改進,使 Kotlin 在 StackOverflow 的 2019 年開發人員調查 [4] 中成為第四大“最受歡迎”和第五大“想要”的程式語言,在所有移動程式語言中排名最高。
遷移現有應用有一個好方法,就是在修改現有 Java 檔案時將其轉換為 Kotlin。雖然這意味著你要把經常編輯的檔案轉換過去,會增加程式碼審查的複雜度(比如會面臨潛在的衝突),但由於轉換後的區域能得到審查,因此可以確保任何問題都能被發現。
目前 Candyspace 中使用的 Kotlin 程式碼佔 86%(並且一直在增長),其餘的 14%是實用工具 / 轉換程式碼,這些程式碼已經有些年頭沒改動過了。
2. Jetpack
谷歌的 AndroidX/Jetpack 庫是一組實用工具,旨在簡化常見的應用需求。例如用於裝置上資料庫的 Room[5],或用來在底層資料更改時更新顯示內容的 LiveData[6]。
有了 Jetpack 庫,新專案就省掉了重新發明輪子的麻煩,也不必等待其他開發人員來開源他們的實現方式,現在每位開發者都能獲取到那些基礎要素了。這些庫更新非常頻繁,新功能不斷推出,錯誤修復也會及時釋出。由於這些庫是為了協同工作而構建的,因此多使用 AndroidX 庫有助於最大程度地減少應用中出現意外。
從開發工作起步開始就使用 Jetpack 庫可以節省數百小時的時間,但我們也可以將已有的應用遷移到 Jetpack 庫上面。雖然看起來很麻煩,但由於這些庫非常流行,針對遷移工作的指南也很容易找到。至少,底層 Android 元素(檢視、片段等)可以自動轉換 [7]。
在 Candyspace,我們使用了 Data Binding 和 ViewModel,並可能很快加入 Room 和 Navigation。
3. 模組化設計
一直以來,應用都被構建為一個巨大的“應用”模組,其中包含整個應用所需的一切。儘管這樣做確實能讓資源共享起來更容易,但也意味著這個應用的某些部分無法為其他應用 / 開源專案所重用;更重要的是,對應用做出更改時必須重新編譯整個程式碼庫。
相反,如果應用由許多較小的模組組成,則只需重新編譯做出更改的程式碼即可,從而大大縮短了構建時間。此外,模組化設計還為高階 Android 特性(例如即時應用——使用者無需安裝任何內容即可使用你的應用的部分功能,和動態特性——按需安裝應用的各個部分)的應用開啟了大門。
將一款現有應用拆分為多個模組可能會是一個很複雜的工作,因為會因此而發現之前隱藏的問題(“DateUtility 是什麼東西?為什麼每個類都需要它!?”);但是一旦改造完成,程式碼庫就會進入一種更加健康的狀態。另外,如果一款新的應用需要類似的功能,則可以快速重用已有模組,從而大大節省時間!
模組化應用架構的一個示例(來源:本文作者建立)
雖然設計一個模組化架構可能是很複雜的任務,但我之前已經寫過一些指導性原則 [8],這些原則受到了 Nikits Kozlov 關於模組化和構建時間的文章 [9] 的啟發。Plaid 也寫了一篇介紹他們向模組化設計遷移經驗的文章 [10]。
在 Candyspace,我們的應用設計都是完全模組化的,以儘量減少構建時間對開發工作的中斷影響。
4. App Bundle
使用傳統的 APK 將應用分發到使用者的裝置時,必須安裝針對所有裝置準備的所有資源。這意味著每張點陣圖影像可能會有 5 個副本(用於不同的螢幕精度),還要安裝針對不同裝置架構的多個庫版本,甚至還得安裝多組邊距和填充值。
使用 App Bundle 分發一款應用時,使用者下載的 APK 只包含他們實際所需要的資源。這樣一來,平均的應用大小就會減少 20%,而未經最佳化的應用改換格式後應用大小將會得到更顯著的縮減。
縮減應用大小的示例(資料來源於Google I/O 2018)
App Bundles 是 18 個月前剛剛誕生的,但已經有超過 25%的應用安裝時使用了這種格式!這是谷歌推薦使用的格式 [11],並且大多數應用幾乎無需改動就能使用這種格式,只需在 Play 商店上處理一下 App Bundle 的簽名即可。
在 Candyspace,我們正在遷移到 App Bundles 上,同時儘量避免破壞我們現有的工作流程(Slack、QAing 構建、非 Google Play 安裝)。Alistair Sykes 的文章是一份很棒的遷移參考資料 [12],文章考慮到了 CI 伺服器、Slack 和 Google Play 內部應用共享等事項。
5. 測試
是的,測試。當然,測試並不是什麼閃亮的新特性,也不是使用者能看到的內容,但想要確保一款已有一定使用者基礎的應用的可靠性,就必須要徹底測試你的應用程式才行。由於崩潰率會直接影響你的 Play 商店評分(並且肯定會拖累評分!),因此應該設法將其保持在較低水平上。
測試金字塔(來源:developer.android.com)
Android 的三種最常見的測試型別分別是(降序排列):
- 單元測試,例如:我的平方根函式會返回平方根嗎?
這些測試將構成你測試流程的大部分內容,它們用來確保特定的程式碼段(例如一個函式)能按預期正常執行。當你對一個部件建立起信心後,就可以將其用於…
- 整合測試。例如:我的數學模組可以與位置模組協同工作嗎?
這些測試可確保你的各個程式碼區域(模組或層)可以正常協同工作。知道應用的元件可以正確相互通訊後,你就可以新增...
- 自動化的 UI 測試,例如:使用者可以在應用上標記一個位置嗎?
在裝置或模擬器上只會執行這些測試,它們能確保應用按預期提供完整的使用者體驗。這些測試通常比其他型別的測試要慢得多(並且執行起來更加不便)。
谷歌建議將測試的分佈定為 70%的單元測試、20%的整合測試和 10%的大型測試,佔比較小的部分需要更長的執行時間、維護時間和實施時間。
最好的測試資源是官方文件 [13],因為它提供了所有測試型別的介紹,以及如何將其實現到專案中的教程。
在 Candyspace,我們將重點放在單元測試上,其佔比要比谷歌建議的比例更大,以確保所有新類的行為都是可預測的。我們目前還在改進自動 UI 測試,以減少對手動測試的依賴。
在程式設計的任何領域,關於解決問題的最佳方法都會有一百種不同的意見;但 Android 有絕對優勢:Android 擁有一個龐大的開發者社群,這意味著一個十分優秀的新技術會迅速在開發者中普及。當你在網際網路上向陌生人尋求幫助時,如果你找的是“Jetpack LiveData”而不是“之前的開發人員從 Web 開發者朋友那裡複製並轉換的庫”,成功獲得答案的可能性就會大得多!
總結
作為一個程式設計師,要學的東西有很多,而學到的知識點,都是錢(因為技術人員大部分情況是根據你的能力來定級、來發薪水的),技多不壓身。
為了很好的生活,我們要多多學習,增加我們手裡的金錢。尤其經歷了這一疫情,我深深的感受到金錢的重要,所以,我們一定不能停下學習的腳步!
附上我的Android核心技術大綱,獲取相關內容來GitHub:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2676695/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java後端開發需具備什麼技術?這幾個部分你需要關注Java後端
- 2020 年值得關注的十大技術趨勢
- android 開發之 APT 技術AndroidAPT
- 2018 年,學習WEB前端開發應該關注哪些新技術?Web前端
- Android開發技術面總結Android
- 2020下半年前端技術發展趨勢,值得每個前端人關注前端
- 區塊鏈技術開發公司 企業主鏈才是落實市場的關鍵?區塊鏈
- OPPO Android開發技術面總結Android
- 進了錢多技術落後的公司,想跑路
- 技術簡介——後端開發後端
- 認為值得重點關注的技術
- Microsoft Build 釋出丨開發者關注的7大方向技術更新ROSUI
- 2020年一定要關注的技術趨勢和選型建議
- Android 開發技術週報 Issue#269Android
- Android開發工程師(雲技術方向)--急聘Android工程師
- Android 開發技術週報 Issue#288Android
- Android 開發技術週報 Issue#279Android
- 阿里巴巴資深技術專家雷卷:值得開發者關注的 Java 8 後時代的語言特性阿里Java
- VR全景技術備受關注的原因分析VR
- 製造業技術 ─ 2021年值得關注的發展趨勢
- 聊聊真實的 Android TV 開發技術棧Android
- 技術硬核、體驗新穎……HarmonyOS開發者日最值得關注的點都在這裡
- 短視訊技術詳解:Android端的短視訊開發技術Android
- Android技術分享| 視訊通話開發流程(一)Android
- Android技術分享| 視訊通話開發流程(二)Android
- 後端開發者需要掌握的技術棧後端
- golang 後端技術開發必備總結Golang後端
- 大會資料下載|熱門技術風口下開發者應該關注些什麼?
- 就要技術範!2019TechWorld技術嘉年華•黑客馬拉松完美落幕黑客
- Android開發掌握什麼技術才不會被淘汰Android
- 後臺開發 -- 核心技術與應用實踐
- 7 天開發後臺系統技術小結
- CA週記 - Build 2022 上開發者最應關注的七大方向主要技術更新UI
- 51CTO技術公開課:Android技術體系(上)Android
- 區塊鏈(BlockChain)技術開發相關資料區塊鏈Blockchain
- 開發美顏SDK的關鍵技術有哪些?
- jQuery的沒落和技術發展的一般規律jQuery
- 用最新技術不斷完善影像世界 | Android 開發者故事Android