Android Jetpack 集合了一系列的開發庫,旨在幫助開發者更容易地創做高質量的應用,同時也更好地兼容老舊版本的 Android 系統。在正式發佈 Jetpack 兩年後的今天,咱們已經看到大量的應用開發開始採用 Jetpack 中的開發庫,這其中既包括大型開發團隊的產品,也有那些剛起步的應用。而這一切僅僅是開始,由於近期咱們發佈了一系列新的開發庫,以及過去一年咱們對於現有開發庫的重要更新。java
在今年的谷歌開發者大會上,咱們也爲你們介紹了 Jetpack 的重要更新,視頻以下:android
https://www.qq.com/video/o320...git
您也能夠 查看這裏 到大會官網查看本視頻和更多視頻分享。github
Hilt 是一個新的 Android 開發庫,它能夠幫助應用開發更容易地實現 依賴注入。Hilt 讓您只需考慮聲明和注入綁定中的重要部分,而沒必要擔憂管理依賴注入的初始化和鏈接等部分。web
Hilt 是基於 Dagger 開發的,也一樣受益於其編譯期錯誤診斷、改良的運行時性能以及良好的可擴展性。Hilt 已經集成了對 Jetpack 開發庫和 Android 系統類庫的支持。舉個例子,爲了注入 ViewModel 參數,可使用 @ViewModelInject 註解 ViewModel 的構造函數,而後使用 @AndroidEntryPoint 來註解 Fragment:數據庫
<!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 --> class SearchViewModel @ViewModelInject constructor( private val repository: SearchRepository ): ViewModel() { … } @AndroidEntryPoint class SearchFragment : Fragment() { val viewModel: SearchViewModel by viewModels() }
請從咱們 發佈的博客文章 中瞭解更多關於 Hilt 以及其相關資源。c#
Paging 開發庫能夠幫助分頁加載顯示數據內容。咱們發佈了使用 Kotlin 的協程 重寫的 Paging 3。新版本添加了一些呼聲較高的新功能,好比分隔符、標頭和頁腳,以及數據轉換。此外,新版本還添加了用來監控列表加載狀態的一系列的 API,以及重試和刷新的方法等。api
舉個例子,使用 Paging 3,咱們能夠經過繼承 PagingSource 類來定義數據源,並實現 load 這個掛起函數,該函數能夠直接執行其餘的掛起函數:緩存
<!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 --> class MyPagingSource : PagingSource<Key, Value>() { override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> { try { val result = api.requestPage(params.key) return Page( data = result.items, nextKey = result.nextKey ) } catch(error: IOException) { return Error(error) } } }
點擊 此處 獲取更多 Paging 3 的相關信息。安全
App Startup 開發庫提供了一種至關直接且高效的方式,來幫助程序在啓動過程當中初始化組件。不一樣於以往須要單獨爲每一個須要初始化的組件定義 ContentProvider,App Startup 能夠利用一個共享的 ContentProvider 來同時定義多個組件的初始化操做,這樣能夠有效加快應用啓動速度。
下面的例子展現瞭如何利用 App Startup 來優化 WorkManager 的初始化時間,底層的實現是 App Startup 使用了一個共用的 ContentProvider,並代替了 WorkManager 自有的 ContentProvider:
<!-- Copyright 2019 Google LLC. SPDX-License-Identifier: Apache-2.0 --> // Initializes WorkManager. class WorkManagerInitializer : Initializer<WorkManager> { override fun create(context: Context): WorkManager { val configuration = Configuration.Builder().build() WorkManager.initialize(context, configuration) return WorkManager.getInstance(context) } override fun dependencies(): List<Class<out Initializer<*>>> { return emptyList() } }
點擊 此處 獲取更多有關 App Startup 的信息。
Android 11 爲軟鍵盤引入了一系列系統 API 來顯示自動填充內容,而且提示內容能夠來自其餘應用,好比密碼管理器。Jetpack 的 Autofill API 經過其 InlineSuggestionUi 類,讓鍵盤和自動填充服務能夠更好地利用新特性。其中自動填充服務能夠利用這個類建立更合適的提示內容,而鍵盤能夠利用這個類更好地定製自動填充的外觀。
△ 軟鍵盤顯示信用卡號碼自動填充內容
爲了更輕鬆地實現和測試動畫,咱們增長了兩個新的開發庫,分別是 androidx.core:core-animation 和 androidx.core:core-animation-testing。同時咱們也引入了一個新的 API SeekableAnimatedVectorDrawable 做爲 androidx.vectordrawable 開發庫的一部分。
core-animation 兼容全部自 Android 4.0 以後的新 Animator API,包括 pause (暫停)、resume (恢復) 和 seek (查找)。
SeekableAnimatedVectorDrawable 基於 core-animation 開發,它是 AnimatedVectorDrawable (AVD) 可替代方案。它使用與 AVD 一樣的文件格式,而且新增了 seek (查找)、pause (暫停) 和 resume (恢復) 的功能。Seekable AVD 暫時不能夠利用渲染線程,因此只有當急需該類新特性的時候才推薦使用。
△ 在 Android Studio 中使用數據庫檢查器
有了 Android Studio 4.1 新增的 Database Inspector,數據庫調試變得十分簡單。這個工具能夠在正在運行的應用中查看、檢索以及修改數據庫的內容。不管是使用 Room 仍是直接使用 SQLite,您均可以經過菜單欄中的 View > Tool Windows > Database Inspector 開始調試數據庫。請經過咱們的文章《期待已久的動態數據庫工具終於來了!》瞭解更多關於這個工具的內容以及如何使用它。
WindowManager 是一個新加入到 Android Jetpack 中的開發庫,其旨在幫助開發者更好地支持新的屏幕類型,好比摺疊屏、多分屏等。該庫爲新老版本不一樣的 WindowManager 功能提供了一個統一的 API 接口。
初始的發佈版本提供了對於市面上已有以及即將上市的不一樣可摺疊設備的支持,開發者能夠利用其適配全部不一樣類型的硬件配置。瞭解更多相關內容,請查閱 博客文章 和 示例工程。
MotionLayout API 在 ConstraintLayout 豐富功能的基礎上,能夠幫助 Android 開發者開發複雜的動畫效果。使用 MotionLayout,開發者既能夠輕鬆地在 ConstraintSets 之間設置過渡動畫,也能夠方便地將動畫集成到經常使用的視圖組件中,好比 RecyclerView、ViewPager 等。Android Studio 4.0 還包含了一個可視化的動效編輯器,它能夠用來建立和預覽基於 MotionLayout 的動畫。
△ 在動效編輯器中建立、編輯和預覽 MotionLayout 動畫
Navigation 2.3 新增了對於 Dynamic Delivery 功能模塊 的支持,該功能可讓用戶只下載須要的部分,從而大大下降應用的初始下載體積。另外,您能夠像導航到基礎模塊同樣導航到動態功能模塊。除此以外,深層連接如今既支持檢索參數,也支持自定義的 action 和 mime 類型。
同時新增了一個能夠 返回結果 的 API,經過它能夠在 SavedStateHandle 中查詢和設置全部回退棧的入口。新增的 TestNavHostController 可讓您訪問 Navigation 回退棧,而且在測試中設置當前的目的地。
最新發布的 WorkManager 支持了那些須要長時間運行的 Worker 或者應被操做系統保持運行在前臺的服務。
爲了讓 WorkManager 任務調試更簡單,咱們新增了一個診斷 API。這個 API 可讓開發者監控WorkManager 的內部狀態,而且在 logcat 中打印出該狀態的具體信息:
Recently completed work: Id Class Name Job Id State Unique Name Tags 88e31476–50d5–4a3a-855a-7c158d61543e com.example.DiagnosticsWorker null SUCCEEDED com.example.DiagnosticsWorker 939d3d81–4a24–4920-ab6a-2a5b850f377b com.example.ToastWorker null SUCCEEDED com.example.ToastWorker 59ab8eb1–2645–446d-8811–1e7b887ab5bc com.example.ForegroundWorker null CANCELLED com.example.ForegroundWorker 7a6c23d2-a1f9–4477-af77–1f16b45cd765 com.example.ForegroundWorker 0 SUCCEEDED com.example.ForegroundWorker Running work: Id Class Name Job Id State Unique Name Tags 7c8bc01f-a60c-4b63-a6aa-2055d4d9d88e com.example.DiagnosticsWorker 4 RUNNING com.example.DiagnosticsWorker
△ WorkManager 診斷結果示例
爲了幫助您避免在使用 WorkManager 時遇到一些常見錯誤,咱們同時還新增了 Lint 規則來標識它們。另外還有一些 API 的更新,包括支持設置和觀察 Worker 的中間進度、一些對於當前 Worker 查詢 API 的優化、一些對於進行中的工做器的調度優化。
△ 在 Android Studio 中查看抽樣的堆棧信息
Benchmark 庫發佈的 alpha release: 1.1.0-alpha01 版本中集成了 CPU 性能剖析工具,該工具能夠幫助開發者分析應用性能基準測試結果,而且能夠在 Android Studio 中直接查看相關方法和抽樣的堆棧信息。咱們同時還添加了對於內存分配的追蹤,以便於開發者能夠優化內存分配和垃圾回收所消耗的時間。
爲了更方便地管理權限,咱們引入了一系列新的 ActivityResult API。這些 API 能夠用 RequestPermission contract 來替換 requestPermissions),以簡化權限請求的開發。除此以外,這些 API 還爲一些常見的 intent 提供了類型安全的 contract,好比 選取圖片 和提示用戶 打開一個文件。
今年初剛發佈的 Android 遊戲 SDK 現在也做爲 Jetpack 的一部分在 Google Maven 倉庫上線。該 SDK 提供一個 幀同步 API 和 Android 性能調優器。請經過 官方文檔 獲取更多有關遊戲 SDK 的內容。
因爲 Android 設備的多樣性,市面上有太多的不一樣種類的相機硬件,而 CameraX 能夠兼容市面上 90% 的設備。從二月份 CameraX 發佈 Beta 版本 至今,咱們一直致力於提高可靠性,以確保 API 在各類設備上都擁有更好的行爲。咱們的 CameraX 測試實驗室也在不斷地針對不一樣機型進行自動化測試,以最大程度地兼容市面上超過 4 億臺的設備。
在 最近的版本 中,CameraX 引入了對於 PreviewView 組件的優化。該組件現在能夠更好地處理應用生命週期和 ViewPager。該組件底層會在支持的設備上自動使用 SurfaceView 以最大程度地獲取性能上的優化,這也幫助其使用更少的緩存以及更低電量的消耗。
要了解更多關於 CameraX 的內容,請參閱咱們詳盡的 CameraX 文檔 和 示例工程,以及咱們過去推送的文章《[使用 PreviewView 來展現相機預覽]()》。
Jetpack 的 Security 庫爲 基於文件加密抽象層的使用提供了安全簡便的方法,好比 EncryptedFile 和 EncryptedSharedPreferences。Jetpack 的 Security 開發庫利用 Android 的 Keystore,以提供基於硬件存儲空間和相關操做的安全。Jetpack 的 Security 開發庫 現在爲 Android 6.0 之後的系統發佈了 RC 版本(最新版本爲 RC3),而且爲 Android 5.0 之後的系統提供了 1.1.0 alpha 版本。
AppCompat 庫提供了大量向前兼容的 UI 組件和系統功能,從 Material 主題到 Toolbar 等組件,再到深色主題。在 最新的發佈 中,咱們新增了 Lint 規則,這有利於開發者辨別哪些屬性來自於 AppCompat 以及哪些來自於系統框架,並保證您使用了正確的屬性。此外,咱們還針對 AppCompat 中深色主題實現的穩定性進行了大量優化。
Jetpack 的 Webkit 開發庫在 1.2.0 版本(最新版爲 1.4.0-rc01) 中新增了一個強制使用深色主題顯示內容的 API。使用這個 API 的時候,若是網站支持深色主題,WebView 會自動地使用深色主題渲染該站點。若是網站不支持深色主題,這個 API 會強制轉換其中的一些顏色。
Jetpack Compose 是全新的現代 Android UI 開發框架,目前發佈了開發者預覽第二版。新版本添加了許多新功能,包括視圖組件的互通性、更多的 Material UI 組件、支持深色主題、新的 UI 測試和動畫 API、對於 ConstraintLayout 的支持、優化狀態管理、集成可觀察的數據流和 RTL 支持。Android Studio 預覽如今是可交互的,而且還有不少編譯器方面的優化。 您能夠查閱咱們的 Alpha 版本發佈文章、深刻詳解 Jetpack Compose 之 優化 UI 構建 和 實現原理 等文章瞭解更多。
獲取更多的更新內容,請觀看視頻下面視頻瞭解 Jetpack Compose,歡迎你們嘗試這些新的更新並 向咱們反饋。
https://www.bilibili.com/vide...
本文歸納了 Jetpack 過去幾個月的更新。因爲其包括了超過 90 個開發庫,咱們知道想找到您所關心的內容並不是易事。爲了幫助開發者,咱們 從新設計了 Jetpack 網站,而且在大量更新之餘新增了一個便捷的 API 選取器,能夠幫助開發者更快捷的找到 Jetpack 中合適的開發庫來解決問題。