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