天天看點

回顧 | Android Jetpack 重要更新

回顧 | Android Jetpack 重要更新

android jetpack 集合了一系列的開發庫,旨在幫助開發者更容易地創作高品質的應用,同時也更好地相容老舊版本的 android 系統。在正式釋出 jetpack 兩年後的今天,我們已經看到大量的應用開發開始采用 jetpack 中的開發庫,這其中既包括大型開發團隊的産品,也有那些剛起步的應用。而這一切僅僅是開始,因為近期我們釋出了一系列新的開發庫,以及過去一年我們對于現有開發庫的重要更新。

在今年的谷歌開發者大會上,我們也為大家介紹了 jetpack 的重要更新,您也可以 點選此處 到大會官網觀看相關視訊。

hilt 是一個新的 android 開發庫,它可以幫助應用開發更容易地實作 依賴注入。hilt 讓您隻需考慮聲明和注入綁定中的重要部分,而不必擔心管理依賴注入的初始化和連接配接等部分。

hilt 是基于 dagger 開發的,也同樣受益于其編譯期錯誤診斷、改良的運作時性能以及良好的可擴充性。hilt 已經內建了對 jetpack 開發庫和 android 系統類庫的支援。舉個例子,為了注入 viewmodel 參數,可以使用 @viewmodelinject 注解 viewmodel 的構造函數,然後使用 @androidentrypoint 來注解 fragment:

請從我們 釋出的部落格文章 中了解更多關于 hilt 以及其相關資源。

paging 開發庫可以幫助分頁加載顯示資料内容。我們釋出了使用 kotlin 的協程 重寫的 paging 3。新版本添加了一些呼聲較高的新功能,比如分隔符、标頭和頁腳,以及資料轉換。此外,新版本還添加了用來監控清單加載狀态的一系列的 api,以及重試和重新整理的方法等。

舉個例子,使用 paging 3,我們可以通過繼承 pagingsource 類來定義資料源,并實作 load 這個挂起函數,該函數可以直接執行其他的挂起函數:

點選 此處 擷取更多 paging 3 的相關資訊。

app startup 開發庫提供了一種相當直接且高效的方式,來幫助程式在啟動過程中初始化元件。不同于以往需要單獨為每個需要初始化的元件定義 contentprovider,app startup 可以利用一個共享的 contentprovider 來同時定義多個元件的初始化操作,這樣可以有效加快應用啟動速度。

下面的例子展示了如何利用 app startup 來優化 workmanager 的初始化時間,底層的實作是 app startup 使用了一個共用的 contentprovider,并代替了 workmanager 自有的 contentprovider:

點選 此處 擷取更多有關 app startup 的資訊。

android 11 為軟鍵盤引入了一系列系統 api 來顯示自動填充内容,并且提示内容可以來自其他應用,比如密碼管理器。jetpack 的 autofill api 通過其 inlinesuggestionui 類,讓鍵盤和自動填充服務可以更好地利用新特性。其中自動填充服務可以利用這個類建立更合适的提示内容,而鍵盤可以利用這個類更好地定制自動填充的外觀。

回顧 | Android Jetpack 重要更新

△ 軟鍵盤顯示信用卡号碼自動填充内容

為了更輕松地實作和測試動畫,我們增加了兩個新的開發庫,分别是 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 Jetpack 重要更新

△ 在 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 的動畫。

回顧 | Android Jetpack 重要更新

△ 在動效編輯器中建立、編輯和預覽 motionlayout 動畫

navigation 2.3 新增了對于 dynamic delivery 功能子產品 的支援,該功能可以讓使用者隻下載下傳需要的部分,進而大大降低應用的初始下載下傳體積。另外,您可以像導航到基礎子產品一樣導航到動态功能子產品。除此之外,深層連結現在既支援檢索參數,也支援自定義的 action 和 mime 類型。

同時新增了一個可以 傳回結果 的 api,通過它可以在 savedstatehandle 中查詢和設定所有回退棧的入口。新增的 testnavhostcontroller 可以讓您通路 navigation 回退棧,并且在測試中設定目前的目的地。

最新釋出的 workmanager 支援了那些需要長時間運作的 worker 或者應被作業系統保持運作在前台的服務。

為了讓 workmanager 任務調試更簡單,我們新增了一個診斷 api。這個 api 可以讓開發者監控workmanager 的内部狀态,并且在 logcat 中列印出該狀态的具體資訊:

△ workmanager 診斷結果示例

為了幫助您避免在使用 workmanager 時遇到一些常見錯誤,我們同時還新增了 lint 規則來辨別它們。另外還有一些 api 的更新,包括支援設定和觀察 worker 的中間進度、一些對于目前 worker 查詢 api 的優化、一些對于進行中的工作器的排程優化。

回顧 | Android Jetpack 重要更新

△ 在 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 更新速遞,歡迎大家嘗鮮這些新的更新并積極 向我們回報。

本文概括了 jetpack 過去幾個月的更新。由于其包括了超過 90 個開發庫,我們知道想找到您所關心的内容并非易事。為了幫助開發者,我們 重新設計了 jetpack 網站,并且在大量更新之餘新增了一個便捷的 api 選取器,可以幫助開發者更快捷的找到 jetpack 中合适的開發庫來解決問題。

繼續閱讀