一、Android JetPack——Google多么痛的領悟
最近好幾個小伙伴問我什么是Android JetPack,聽說這個包好像有點牛,帥哥你會不?
我心想什么鬼!Android JetPack這貨不是一個庫,是一整套的庫,是一種信仰一種態(tài)度好么。從前,Android開發(fā)者基本都是被放養(yǎng)的。生態(tài)基本全靠自建,代表有Square全家桶,Glide,Google自己也肯定是出力的,但是并沒有明確Android開發(fā)的幾個大方向,所以安卓的開發(fā)生態(tài)一直是百花齊放百家爭鳴。帶來的問題就是經常出現包引用莫名報錯。
事情從2017年發(fā)生了轉機,在Google IO 2017,官方終于正視了這個問題開始嘗試管理這個混亂的Android開發(fā)環(huán)境,并推出了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 是一套庫、工具和指南,可幫助開發(fā)者更輕松地編寫優(yōu)質應用。這些組件可幫助您遵循最佳做法、讓您擺脫編寫樣板代碼的工作并簡化復雜任務,以便您將精力集中放在所需的代碼上。
二、JetPack里的組件
上圖就是JetPack中包含的組件列表,每個組件都是相對獨立的,可以被單獨使用和構建。其中像被介紹的最多,也是最常被使用的LiveData, ViewModel, Room, Navigation, WorkManager之類的都發(fā)布了正式版,而CameraX, Compose之類的還處在Alpha版本,未正式發(fā)布,官方并不建議在生產環(huán)境中使用。
然后說下,JetPack所有的組件都是基于AndroidX構建的,如果想在項目中使用JetPack需要先將項目中對Support Lib的依賴全部換成AndroidX。
Android目前已經發(fā)展了11年,可以說是比較成熟的技術了,一開始時框架很少,也沒有什么規(guī)范,所有的代碼都是要自己寫,比如網絡請求,數據庫請求,數據解析等等。后來出現了一些框架來幫助開發(fā)者快速進行開發(fā),比如XUtils、Volley、OKHttp、EventBus等,隨著框架越來越多,一個應用可以有多種技術選型,直接導致應用開發(fā)越來越不規(guī)范,導致做出來的應用質量參差不齊,這顯然不是gu ge想看到的。guge隨后推出了MVP和MVVM相關的官方例子,效果很一般,而且覆蓋面只是在架構上,Goole I/O 2018大會上推出的Android Jetpack有望解決以上的問題。
三、Android Jetpack簡介
Jetpack并不是一個框架或者組件,它是一套庫、工具和指南的集合,可幫助開發(fā)者更輕松地編寫優(yōu)質應用。這些組件可幫助開發(fā)者遵循最佳做法、擺脫編寫樣板代碼的工作并簡化復雜任務,以便將精力集中放在所需的代碼上。
Android Jetpack中的很多組件并不都是新開發(fā)的,而是很早就有了,比如在Goole I/O 2017大會時推出了 Android Architecture Component(AAC),它包括了LifeCycle、LiveData、ViewModel、Room。在Goole I/O 2018大會上, 用AndroidX替代了Android Support Library,并在Android Architecture Component的基礎上發(fā)布了Android Jetpack,AndroidX也是屬于Android Jetpack。
Jetpack主要特性有以下三點:
1.加速開發(fā) 組件可單獨使用,也可以協(xié)同工作,當使用kotlin語言特性時,可以提高效率。
2.消除樣板代碼 Android Jetpack可管理繁瑣的Activity(如后臺任務、導航和生命周期管理)。
3.構建高質量的強大應用 Android Jetpack組件圍繞現代化設計實踐構建而成,具有向后兼容性,可以減少崩潰和內存泄漏。
四、Android Jetpack分類
下圖是Jetpack的分類。
gu ge仍舊不斷的完善Android Jetpack,截至到2019年8月已經有很多新加的組件并沒有顯示在上圖中,比如CameraX等。Android Jetpack分類有4種,分別是Architecture、Foundationy、Behavior、UI,下面分別介紹下。
1. Architecture(架構組件)
Architecture指的是架構組件,幫助開發(fā)者設計穩(wěn)健、可測試且易維護的應用。架構組件可以說是對應用開發(fā)幫助最大的組件,本系列也是圍繞著架構組件進行講解。
DataBinding:以聲明方式將可觀察數據綁定到界面元素,通常和ViewModel配合使用。
Lifecycle:用于管理Activity和Fragment的生命周期,可幫助開發(fā)者生成更易于維護的輕量級代碼。
LiveData: 在底層數據庫更改時通知視圖。它是一個可觀察的數據持有者,與常規(guī)observable不同,LiveData是生命周期感知的。 Navigation:處理應用內導航。
Paging:可以幫助開發(fā)者一次加載和顯示小塊數據,按需加載部分數據可減少網絡帶寬和系統(tǒng)資源的使用。
Room:友好、流暢的訪問SQLite數據庫。它在SQLite的基礎上提供了一個抽象層,允許更強大的數據庫訪問。
ViewModel: 以生命周期的方式管理界面相關的數據,通常和DataBinding配合使用,為開發(fā)者實現MVVM架構提供了強有力的支持。
WorkManager: 管理Android的后臺的作業(yè),即使應用程序退出或設備重新啟動也可以運行可延遲的異步任務。
官方推薦的Android應用架構如下圖所示。
這些架構組件既可以配合使用,也可以單獨使用,這里建議還是盡量按照官方推薦的來。
2. Foundationy(基礎組件)
基礎組件提供橫向功能,例如向后兼容性、測試、安全、Kotlin 語言支持,并包括多個多個平臺開發(fā)的組件。
Android KTX:優(yōu)化了供Kotlin使用的Jetpack和Android平臺API。幫助開發(fā)者以更簡潔、更愉悅、更慣用的方式使用Kotlin進行Android開發(fā)。 AppCompat:幫助較低版本的Android系統(tǒng)進行兼容。 Auto: 開發(fā)Android Auto應用的組件,提供了適用于所有車輛的標準化界面和用戶交互。 檢測:從AndroidStudio中快速檢測基于Kotlin或Java的代碼。 多Dex處理:為具有多個Dex文件應用提供支持。 安全:安全的讀寫加密文件和共享偏好設置。 測試:用于單元和運行時界面測試的Android 測試框架。 TV: 構建可讓用戶在大屏幕上體驗沉浸式內容的應用。 Wear OS:開發(fā)Wear應用的組件。
3. Behavior(行為組件)
行為組件可幫助開發(fā)者的應用與標準Android服務(如通知、權限、分享)相集成。 CameraX:幫助開發(fā)簡化相機應用的開發(fā)工作。它提供一致且易于使用的界面,適用于大多數Android。 設備,并可向后兼容至Android 5.0(API 21)。 DownloadManager:處理長時間運行的HTTP下載的系統(tǒng)服務。 媒體和播放:用于媒體播放和路由(包括Google Cast)的向后兼容API。 通知:提供向后兼容的通知API,支持Wear和Auto。 權限:用于檢查和請求應用權限的兼容性API。 設置:創(chuàng)建交互式設置,建議使用AndroidX Preference Library庫將用戶可配置設置集成到應用中。 分享操作:可以更輕松地實現友好的用戶分享操作。 切片:切片是一種UI模板,創(chuàng)建可在應用外部顯示應用數據的靈活界面元素。
4. UI(界面組件)
Animation and Transition:該框架包含用于常見效果的內置動畫,并允許開發(fā)者創(chuàng)建自定義動畫和生命周期回調。 Emoji Compatibility:即便用戶沒有更新Android系統(tǒng)也可以獲取最新的表情符號。 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的架構組件。
最后對于程序員來說,要學習的知識內容、技術有太多太多,要想不被環(huán)境淘汰就只有不斷提升自己,從來都是我們去適應環(huán)境,而不是環(huán)境來適應我們!
?
當程序員容易,當一個優(yōu)秀的程序員是需要不斷學習的,從初級程序員到高級程序員,從初級架構師到資深架構師,或者走向管理,從技術經理到技術總監(jiān),每個階段都需要掌握不同的能力。早早確定自己的職業(yè)方向,才能在工作和能力提升中甩開同齡人。
本文摘自 :https://blog.51cto.com/u