原文作者:Florina Muntenescu
原文位址:https://medium.com/androiddevelopers/whats-new-in-jetpack-1891d205e136
Android Jetpack 是一套幫助你輕松建構高品質應用,相容舊版本系統的類庫套件。在 Jetpack 釋出兩年之後的現在,我們已經看到了很多 app 的廣泛采用,并且更多的開發者開始使用了。這隻是一個開始:今天,我們将釋出過去一年的工作成果,一些新的類庫以及現有類庫的重大更新。
下面是 Jetpack 最近更新彙總的視訊版本:What’s new in Jetpack talk!:
https://www.youtube.com/watch?v=R3caBPj-6Sg&feature=youtu.be
New in Alpha
Hilt - Jetpack 推薦的依賴注入類庫
Hilt 是一個幫助你簡化 依賴注入 操作的 Android 類庫,它讓你可以專注于定義和注入的重要部分, 而無需擔心管理所有的 DI 設定。
基于 Dagger 之上,Hilt 繼承了它的編譯期正确性,也提升了運作時性能和可擴充性。Hilt 增加了對 Jetpack 類庫和 Android Framework 類的內建。例如,要注入
ViewModel
的參數的話,你可以在
ViewModel
的構造函數上添加
@ViewModelInject
注解,并在
Fragment
上添加
@AndroidEntryPoint
注解。
在我們釋出的部落格 Dependency Injection on Android with Hilt 中,可以了解 Hilt 的更多資訊。
Paging3 - 逐漸加載和顯示資料
Paging 是一個幫助你逐漸分塊加載和顯示資料的類庫。今天我們釋出了 Paging3 ,使用 Kotlin Coroutines 完全重寫。這個版本添加了呼聲很高的新特性,例如分隔符,header,footer,清單轉換,用于重試和重新整理的觀察清單加載狀态的 API 。
通過 Paging3 ,資料源可以繼承
PagingSource
,并實作
suspend load
方法,在其中可以直接調用其他挂起函數。
關于 Paging3 的更新資訊,請檢視 文檔 和 codelab 。
譯者注:視訊裡有提到,Paging3 是相容 Paging2 的,大家可以放心更新(我不負責。。) 。
App Startup - 在應用啟動時初始化元件
App Startup 類庫提供了一種簡單高效的方法在應用啟動時初始化元件,而不是為每個需要初始化的元件定義單獨的 ContentProvider 。App Startup 允許你定義共享同一個 ContentProvider 的元件初始化器。這可以顯著優化應用啟動時間。
關于 AppStart 的更多資訊,請檢視 官方文檔 。
Auto-fill IME
Android 11 引入了鍵盤相關的平台 API ,用于展示自動填充建議,例如密碼管理。Jetpack 的 AutoFill API 通過
InlineSuggestionUi
使得鍵盤和自動填充服務更簡單的使用這一特性。AutoFill 服務通過它可以提供可靠的建議,鍵盤通過它可以自定義建議的樣式。

更簡單的動畫 — core-animation 和 SeekableAnimatedVectorDrawable
為了更簡單的實作和測試動畫,我們添加了兩個新類庫: androidx.core:core-animation 和 androidx.core:core-animation-testing .
我們還在
androidx.vectordrawable
庫中引入了新的 API SeekableAnimatedVectorDrawable 。
core-animation
移植了
Animator
自 Ice Cream Sandwich 依賴的所有特性,例如 暫停/恢複,拖動。
SeekableAnimatedVectorDrawable
是一個基于
core-animation
的全新的,可拖動的,
AnimatedVectorDrawable(AVD)
的替代方案。它和 AVD 使用同樣的格式,并添加了 拖動,暫停,恢複的功能。
使用 Database Inspector 調試資料庫
這塊我就不翻譯了,我兩個月前的文章就介紹過了,可以檢視一下 資料庫還能這麼看 ?
官方部落格也有相關介紹: Database Inspector
WindowManger - 更好的裝置支援
WindowManager 是 Jetpack 新增加的類庫,旨在幫助開發者适配各種不同的裝置,例如折疊屏。 它為新舊平台版本的 WindowManger 特性提供了統一的 API 支援。
支援不同類型的可折疊裝置的初始版本已經投入市場,是以開發者可以進行适配了。更多資訊可以檢視這篇部落格 Support New Form Factors with the new Jetpack WindowManager Library, 示例代碼: github.com/android/use…
譯者注:掘金上也有一篇相關文章,可以參考:Jetpack WindowManager,Android 折疊屏官方适配方案!
MotionLayout,建構流暢的互動式動畫
MotionLayout 繼承了
ConstraintLayout
的豐富特性,幫助 Android 開發者管理複雜的運動和視窗元件動畫。 通過
MotionLayout
,你可以在
ConstraintSets
之間構造過渡動畫,并且可以輕易的內建通用 View 的動畫,像
RecyclerView
和
ViewPager
。Android Studio 4.0 支援了 Motion Editor, 用于建立和預覽 MotionLayout 動畫的圖形工具。
更新現有類庫
Navigation
Navigation 2.3 增加了對 dynamic feature modules(動态功能子產品) 的支援,允許使用者僅下載下傳應用中需要的子產品,大大降低了首次下載下傳的 Apk 大小。現在,你可以導航到這些子產品,就好像本身就是 base apk 的一部分一樣。除了允許查詢參數之外,Deep link 現在還支援自定義 action 和 mime type 。
傳回結果 有了新的 API,Navigation 使用
SavedStateHandle
在目标之間傳遞資料。你可以使用先前的
BackStackEntry
并在上面設定傳回值。
新的 TestNavHostController 幫助你在測試中通路回退棧并設定目前 destination 。
WorkManager
最新版本的 WorkManager 通過前台服務增加了對需要保持存活的耗時和重要任務的支援。
為了更輕松地診斷 WorkManager 任務中的問題,我們新增了 Diagnostics API 借助 adb 你檢視内部工作狀态并輸出到 logcat 。
adb shell am broadcast \
-a "android.work.diagnostics.REQUEST_DIAGNOSTICS" \
-p "<your_app_package_name>"
為了幫助你避免 WorkManager 使用過程中的常見錯誤,我們已經添加了一些 Lint 規則來标記他們。其他的一些 API 更新包括:支援設定和觀察 工作進度 ;優化對目前工作的查詢 API;改進正在運作的 scheduler 。
Benchmark
Benchmark 庫的最新 alpha 版本與 CPU profiling 整合在了一起,這樣就可以對基準測試進行分析,然後直接在 Android Studio 中檢視方法或采樣的 trace 。我們還增加了對記憶體配置設定跟蹤的支援,這樣你就可以優化配置設定所花的時間并減少了很多垃圾回收。
Permissions
我們引入了新的 ActivityResult API ,使得權限請求更加簡單。新的 API 使用 RequestPermission Contract 代替原來的
requestPermissions
方法,大大簡化了權限申請流程。同時對一般的 intent 提供了類型安全的協定,例如 拍照 和 打開文檔 。
Game SDK
今年早些時候推出的 Android Game SDK 現在也是 Jetpack 的一部分,在 Google Maven 倉庫已可使用。
它包含兩個重要的子產品,
Frame pacing API
是遊戲能夠保持穩定的幀率,并可以降低輸入的延遲。
Performance Tuner
使你能夠大規模的測量和優化幀率。
更多相關資訊可以檢視 官方文檔 。
CameraX
安卓裝置上的相機有很大差異,CameraX 相容了 90% 的裝置。自從去年 2月份 CameraX 進入 Beta 以來,我們專注于可靠性以確定 API 在大量裝置上具有良好表現。CameraX 測試實驗室在超過 4 億活躍裝置上運作了我們的自動測試套件。
最新版本的 CameraX 帶來了
PreviewView
元件的優化。現在它可以可靠的處理與應用生命周期的互動以及頁面的互動。它還透明的優化了你的裝置,在裝置底層使用
SurfaceView
,有益于提升性能表現,減少緩沖和提供電源效率。
更多内容請檢視 官方文檔 和 代碼示例 。
Security
Jetpack Security 類庫提供了安全易用的基于檔案的加密接口,例如 EncryptedFile 和 EncryptedSharedPreferences 。
Jetpack Security 利用 Android KeyStore 的優勢,提供硬體支援的存儲和操作安全性。Release Candidate 2 版本現在支援 Marshmallow+ 版本,1.1.0 alpha 版本支援 Lollipop+ 以上版本。
AppCompat
AppCompat 移植了大量 UI 元素和平台特性,如 Material 主題, Toolbar,Dark Theme 。在最新版本中,我們添加了一些 Lint 規則,讓你更好的區分屬性是來自 Appcompat 還是原本的 framework ,確定你使用正确的一個。我們還對 AppCompat 深色主題進行了實質性的穩定性改進。
Webkit
Jetpack WebKit 在 1.2 release 版本新增了一個 API,強制支援暗黑模式。當這個 API 啟動時,如果網站支援深色主題,WebView 會進行渲染。如果不支援,API 将會強制修改相應的顔色。
Jetpack Compose - 全新的 UI 工具包
最新的現代化 UI 工具包 Jetpack Compose 現在已經到達 Developer Preview 2 版本。這個版本添加了許多新特性:與 View 的互互動性,更多的 Material UI 元件,支援深色主題,新的 UI 測試和動畫 API ,ConstraintLayout 基本支援,優化狀态管理,內建可觀察流,RTL 支援。Android Studio 的預覽現在可以互動,并且還有大量的編譯優化。
更多資訊可以觀看視訊 What’s new in Compose?
最後
前面快速介紹了 Jetpack 在之前幾個月的更新。擁有 90+ 可用類庫,我們也知道你很難找到你需要的,是以我們重新設計了 Jetpack 網站 ,并添加了一個友善的 API 選擇器, 以快速幫您找到可以解決問題的 Jetpack 庫。
更多 Jetpack 的資訊,請關注 Jetpack 周(7 月 20 日這一周)即将放出的視訊,部落格和 codelab 。
譯者: 秉心說
位址:https://juejin.im/post/5ee1d438518825434566cf4f