9102年最後一篇文章:作為一個Android程式設計師你還不會JetPack?

android高級架構師 發佈 2020-01-02T06:59:39+00:00

annotationProcessor "android.arch.persistence.room:compiler:1.1.1 "


一、Android JetPack——Google多麼痛的領悟

最近好幾個小夥伴問我什麼是Android JetPack,聽說這個包好像有點牛,蕭哥你會不?

我心想什麼鬼!Android JetPack這貨不是一個庫,是一整套的庫,是一種信仰一種態度好麼。從前,Android開發者基本都是被放養的。生態基本全靠自建,代表有Square全家桶,Glide,Google自己也肯定是出力的,但是並沒有明確Android開發的幾個大方向,所以安卓的開發生態一直是百花齊放百家爭鳴。帶來的問題就是經常出現包引用莫名報錯。

事情從2017年發生了轉機,在Google IO 2017,官方終於正視了這個問題開始嘗試管理這個混亂的Android開發環境,並推出了Architecture Component,主要有以下幾項:

Room: 官方的ORM庫(個人認為比GreenDao好用)ViewModel/LiveData:生命周期管理工具,自此Android才真正的應用上了MVVM(BTW,DataBinding也歸到了JetPack里)

在2018年,AndroidX橫空出世,並且從1開始,意圖取代經常自己打自己臉的Support Lib。

一張圖來看看Google對JetPack有多看重

那JetPack到底是啥呢?

Jetpack is a suite of libraries, tools, and guidance to help developers write high-quality apps easier. These components help you follow best practices, free you from writing boilerplate code, and simplify complex tasks, so you can focus on the code you care about.

Jetpack 是一套庫、工具和指南,可幫助開發者更輕鬆地編寫優質應用。這些組件可幫助您遵循最佳做法、讓您擺脫編寫樣板代碼的工作並簡化複雜任務,以便您將精力集中放在所需的代碼上。

二、JetPack里的組件

上圖就是JetPack中包含的組件列表,每個組件都是相對獨立的,可以被單獨使用和構建。其中像被介紹的最多,也是最常被使用的LiveData, ViewModel, Room, Navigation, WorkManager之類的都發布了正式版,而CameraX, Compose之類的還處在Alpha版本,未正式發布,官方並不建議在生產環境中使用。

然後說下,JetPack所有的組件都是基於AndroidX構建的,如果想在項目中使用JetPack需要先將項目中對Support Lib的依賴全部換成AndroidX

Android目前已經發展了11年,可以說是比較成熟的技術了,一開始時框架很少,也沒有什麼規範,所有的代碼都是要自己寫,比如網絡請求,資料庫請求,數據解析等等。後來出現了一些框架來幫助開發者快速進行開發,比如XUtils、Volley、OKHttp、EventBus等,隨著框架越來越多,一個應用可以有多種技術選型,直接導致應用開發越來越不規範,導致做出來的應用質量參差不齊,這顯然不是谷歌想看到的。谷歌隨後推出了MVP和MVVM相關的官方例子,效果很一般,而且覆蓋面只是在架構上,Goole I/O 2018大會上推出的Android Jetpack有望解決以上的問題。

三、Android Jetpack簡介

Jetpack並不是一個框架或者組件,它是一套庫、工具和指南的集合,可幫助開發者更輕鬆地編寫優質應用。這些組件可幫助開發者遵循最佳做法、擺脫編寫樣板代碼的工作並簡化複雜任務,以便將精力集中放在所需的代碼上。

Android Jetpack中的很多組件並不都是新開發的,而是很早就有了,比如在Goole I/O 2017大會時推出了 Android Architecture Component(AAC),它包括了LifeCycle、LiveData、ViewModel、Room。在Goole I/O 2018大會上,
用AndroidX替代了Android Support Library,並在Android Architecture Component的基礎上發布了Android Jetpack,AndroidX也是屬於Android Jetpack。

Jetpack主要特性有以下三點:

1.加速開發
組件可單獨使用,也可以協同工作,當使用kotlin語言特性時,可以提高效率。

2.消除樣板代碼
Android Jetpack可管理繁瑣的Activity(如後台任務、導航和生命周期管理)。

3.構建高質量的強大應用

Android Jetpack組件圍繞現代化設計實踐構建而成,具有向後兼容性,可以減少崩潰和內存泄漏。

四、Android Jetpack分類

下圖是Jetpack的分類。

谷歌仍舊不斷的完善Android Jetpack,截至到2019年8月已經有很多新加的組件並沒有顯示在上圖中,比如CameraX等。Android Jetpack分類有4種,分別是Architecture、Foundationy、Behavior、UI,下面分別介紹下。

1. Architecture(架構組件)

Architecture指的是架構組件,幫助開發者設計穩健、可測試且易維護的應用。架構組件可以說是對應用開發幫助最大的組件,本系列也是圍繞著架構組件進行講解。

DataBinding:以聲明方式將可觀察數據綁定到介面元素,通常和ViewModel配合使用。

Lifecycle:用於管理Activity和Fragment的生命周期,可幫助開發者生成更易於維護的輕量級代碼。

LiveData: 在底層資料庫更改時通知視圖。它是一個可觀察的數據持有者,與常規observable不同,LiveData是生命周期感知的。
Navigation:處理應用內導航。

Paging:可以幫助開發者一次加載和顯示小塊數據,按需加載部分數據可減少網絡帶寬和系統資源的使用。

Room:友好、流暢的訪問SQLite資料庫。它在SQLite的基礎上提供了一個抽象層,允許更強大的資料庫訪問。

ViewModel: 以生命周期的方式管理介面相關的數據,通常和DataBinding配合使用,為開發者實現MVVM架構提供了強有力的支持。

WorkManager: 管理Android的後台的作業,即使應用程式退出或設備重新啟動也可以運行可延遲的異步任務。

官方推薦的Android應用架構如下圖所示。

這些架構組件既可以配合使用,也可以單獨使用,這裡建議還是儘量按照官方推薦的來。

2. Foundationy(基礎組件)

基礎組件提供橫向功能,例如向後兼容性、測試、安全、Kotlin 語言支持,並包括多個多個平台開發的組件。

Android KTX:優化了供Kotlin使用的Jetpack和Android平台API。幫助開發者以更簡潔、更愉悅、更慣用的方式使用Kotlin進行Android開發。
AppCompat:幫助較低版本的Android系統進行兼容。
Auto: 開發Android Auto應用的組件,提供了適用於所有車輛的標準化介面和用戶交互。
檢測:從AndroidStudio中快速檢測基於Kotlin或Java的代碼。
多Dex處理:為具有多個Dex文件應用提供支持。
安全:安全的讀寫加密文件和共享偏好設置。
測試:用於單元和運行時介面測試的Android 測試框架。
TV: 構建可讓用戶在大螢幕上體驗沉浸式內容的應用。
Wear OS:開發Wear應用的組件。

3. Behavior(行為組件)

行為組件可幫助開發者的應用與標準Android服務(如通知、權限、分享)相集成。

CameraX:幫助開發簡化相機應用的開發工作。它提供一致且易於使用的介面,適用於大多數Android。 設備,並可向後兼容至Android 5.0(API 21)。
DownloadManager:處理長時間運行的HTTP下載的系統服務。
媒體和播放:用於媒體播放和路由(包括Google Cast)的向後兼容API。
通知:提供向後兼容的通知API,支持Wear和Auto。
權限:用於檢查和請求應用權限的兼容性API。
設置:創建交互式設置,建議使用AndroidX Preference Library庫將用戶可配置設置集成到應用中。
分享操作:可以更輕鬆地實現友好的用戶分享操作。
切片:切片是一種UI模板,創建可在應用外部顯示應用數據的靈活介面元素。

4. UI(介面組件)

Animation and Transition:該框架包含用於常見效果的內置動畫,並允許開發者創建自定義動畫和生命周期回調。
Emoji Compatibility:即便用戶沒有更新Android系統也可以獲取最新的表情符號。
Fragment:組件化介面的基本單位。
布局:用XML中聲明UI元素或者在代碼中實例化UI元素。
調色板:從調色板中提取出有用的信息。

五、在應用中引入Jetpack相關組件

在項目build.gradle中添加google() 庫,如下所示。

  allprojects {
        repositories {
            google()
            jcenter()
        }
    }
】、

如果想引入Room,可以在模塊build.gradle中這麼寫:

    implementation   "android.arch.persistence.room:runtime:1.1.1"
    annotationProcessor   "android.arch.persistence.room:compiler:1.1.1 "
    androidTestImplementation  "android.arch.persistence.room:testing:1.1.1"

總結

這篇文章內部不多,旨在讓大家了解Android Jetpack是什麼,包括什麼,如何引用,從下一篇開始,就開始學習Android Jetpack的架構組件。

最後對於程式設計師來說,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提升自己,從來都是我們去適應環境,而不是環境來適應我們!

這裡附上上述的技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司19年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裡以圖片的形式給大家展示一部分。

相信它會給大家帶來很多收穫:

【Android進階學習視頻】、【全套Android面試秘籍PDF】、【Android開發核心知識點筆記】可以 私信我【面試】免費獲取!

當程式設計師容易,當一個優秀的程式設計師是需要不斷學習的,從初級程式設計師到高級程式設計師,從初級架構師到資深架構師,或者走向管理,從技術經理到技術總監,每個階段都需要掌握不同的能力。早早確定自己的職業方向,才能在工作和能力提升中甩開同齡人。

關鍵字: