Android Jetpack架構組件簡介

概述

自2008年9月22日谷歌發佈Android 1.0版本到前不久Android 12版本到發佈,Android已經陪伴咱們走過了12個年頭。能夠說,通過12年的打磨和沉澱,Android的技術體系已經很是的成熟了。好比說,一開始時框架不多,也沒有什麼規範,全部的代碼都是要本身寫,可是如今,咱們不多會關係這種基礎代碼,由於一些框架和工具的出現正在幫助開發者完成這方面的工做。javascript

不過,雖然咱們可使用這些框架和技術來達到快速迭代的目的,可是愈來愈雜的技術選型也讓Android開發者無從選擇,最終致使作出來的應用質量良莠不齊。長久以來,Android一直沒有制定一個規範來姐姐這一問題,只要可以實現功能,代碼怎麼編寫都是能夠的。雖然Android官方沒有推出開發標準,可是一些技術社區出於更高效的進行協同開發,逐漸引入了MVP和MVVM等應用開發架構,使用這些框架開發出來的應用,不管從項目質量仍是代碼的可讀性和可維護性來講,都更加出色,因而這些框架和技術逐漸流行起來。java

這些狀況被谷歌發現後,最終在Goole I/O 2018大會上推出了全新的Android Jetpack應用開發架構。或許稱Android Jetpack爲一個架構有點不許確,更多的地方將它稱爲Android應用開發的工具集,Jetpack是一套庫、工具和指南的集合,旨在幫助開發者更輕鬆地編寫優質應用。事實上,Android Jetpack所包含的內容是比較龐大的,主要由基礎組件、架構組件、行爲組件和UI組件構成,以下圖所示。
在這裏插入圖片描述
而且, 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等架構組件。android

Android Jetpack有以下一些特色:數據庫

1.加速開發
組件可單獨使用,也能夠協同工做,當使用kotlin語言特性時,能夠提升效率,而且具備很是好的向下兼容性。後端

2.消除樣板代碼
Android Jetpack能夠很方便的管理繁瑣的Activity(如後臺任務、導航和生命週期管理)。安全

3.構建高質量的強大應用
Android Jetpack組件圍繞現代化設計實踐構建而成,具備向後兼容性,能夠有效減小崩潰和內存泄漏。架構

Jetpack分類

Android Jetpack組件主要分爲四大類:app

  • 基礎 - Foundation
  • 架構 - Architecture
  • 行爲 - Behavior
  • 界面 - UI

Architecture(架構組件)

Architecture指的是架構組件,旨在幫助開發者設計穩健、可測試且易維護的應用。架構組件能夠說是對應用開發幫助最大的組件,具體包含以下一些基礎組件。框架

  • Data Binding(數據綁定):屬於支持庫可以使用聲明式將佈局中的界面組件綁定到應用中的數據源
  • Lifecycles:管理 Activity 和 Fragment 生命週期
  • LiveData:是一個可觀察的數據持有者類。與常規observable不一樣,LiveData是有生命週期感知的。
  • Navigation:處理應用內導航所需的一切
  • Paging:一次加載 or 按需加載 & 顯示小塊數據
  • Room:幫助開發者更友好、流暢的訪問SQLite數據庫。
  • ViewModel:以生命週期感知的方式存儲和管理與UI相關的數據。
  • WorkManager:管理Android的後臺的做業,即便應用程序退出或設備從新啓動也能夠運行可延遲的異步任務。

下面是Google官方推薦的Android應用架構示意圖。
在這裏插入圖片描述
每一個組件僅依賴於其下一級的組件。例如,Activity 和 Fragment 僅依賴於視圖模型ViewModwl。存儲區是惟一依賴於其餘多個類的類,在本例中存儲區依賴於持久性數據模型和遠程後端數據源。而且,這些架構組件既能夠配合使用,也能夠單獨使用,能夠根據須要合理選擇。異步

Foundationy(基礎組件)

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應用的組件。

Behavior(行爲組件)

行爲組件能夠幫助開發者的應用與標準Android服務(如通知、權限、分享)進行集成,行爲組件包含。

  • CameraX(相機) :簡化相機應用的開發工做,可向後兼容至 Android 5.0(API 級別 21)
  • DownloadManager(下載):可處理長時間運行的HTTP下載 & 超時重連
  • Media & playback(多媒體) :用於媒體播放,以及路由的向後兼容 API。
  • Notifications(通知):提供向後兼容的通知 API,支持 Wear 和 Auto。
  • Permissions(權限):用於檢查和請求應用權限的兼容性 API。
  • Preferences(偏好設置):提供了可以改變應用的功能和行爲能力。
  • Sharing(共享):提供適合應用操做欄的共享操做。
  • Slices(切片):建立可在應用外部顯示應用數據的靈活界面元素。

UI(界面組件)

界面組件主要提供各類輔助繪製界面的View類 和各類輔助組件,具體包含。

  • Animation & Transitions(動畫):提供各種內置動畫以及自定義動畫效果。
  • Emoji(表情):使用戶在未更新系統版本的狀況下也可使用表情符號。
  • Layout(佈局):xml書寫的界面佈局或者使用Compose完成的界面。
  • Palette(調試板):從調色板中提取出有用的信息。

在項目中引入JetPack組件

在項目中引入JetPack組件須要在項目build.gradle中添加google() 庫,默認狀況下會添加google() 庫的,以下所示。

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

接下來,咱們就可使用具體的組件庫了,如咱們想引入Room持久化庫,那麼只須要app的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"

AndroidX

AndroidX簡介

AndroidX是谷歌在 2018 I/O 大會上推出的用於替換android.support.library的 Android擴展庫,按照官方文檔說明,android.support.library在Android 28版本以後就再也不更新,將來的版本更新都在AndroidX中進行。不只如此,AAC(Android Architecture Components架構縮寫)中的組件也被 合併到AndroidX中,因此在使用JetPack組件時常常會看到AndroidX相關的包。

而且,爲了方便開發者遷移到AndroidX版本,谷歌官方給出了很詳細的遷移文檔(如何遷移到Android)。對於一些新組件和老組件,能夠參加下面的表。
在這裏插入圖片描述

遷移到AndroidX

若是你從未在Android項目中使用AndroidX,如今但願將項目遷移到AndroidX,那麼能夠在菜單欄中依次選擇【ReFactor】→【Migrate to AndroidX... 】便可將你的Android項目遷移到AndroidX,以下圖所示。
在這裏插入圖片描述
而後帶你【Migrate】按鈕確認,遷移完成以後,打開項目的gradle.properties文件,能夠看到以下腳本代碼。

android.useAndroidX=true      //是否使用AndroidX
android.enableJetifier=true   //是否將第三方庫遷移到AndroidX

而後再打開Android項目的app的build.gradle文件,發現一些第三方庫也被AndroidX的庫所替換。

implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'com.google.android.material:material:1.3.0-alpha03'
...

若是是新建項目,那麼默認會添加AndroidX支持。

相關文章
相關標籤/搜索