做者 / Florina Muntenescu, Android Developer Advocatehtml
Android Jetpack 是一套庫、工具和指導規範,幫助開發者遵循最佳實踐,減小模板代碼,以及編寫在不一樣的 Android 版本和設備上運行一致的代碼。今天,Google Play 上排名前 1,000 的應用中有 84% 在使用 Jetpack。java
下面讓咱們一塊兒看看 Jetpack 最新的更新狀況,若是您已觀看 ☟Jetpack 更新一覽☟ 演講的話,本文會作進一步的補充,請別錯過!android
https://www.bilibili.com/vide...git
△ Jetpack 更新一覽github
CameraX數據庫
CameraX 庫爲跨操做系統版本訪問攝像頭功能提供了統一的 API 界面,包括針對特定設備的兼容性修復和變通方案。該庫的一些最新改進解決了常見的功能需求,包括支持調整曝光補償和訪問有關攝像頭狀態和功能的更詳細信息。此外,如今能夠在攝像頭運行時經過 Camera2Interop 改變攝像頭設置,如 FPS 範圍。該庫還帶來了對最新設備和操做系統功能的支持,包括高動態範圍 (HDR) 預覽、變焦率控制,以及對 Android 勿擾模式的支持。但也許最重要的是,CameraX 庫在持續解決性能問題,使圖像捕捉和初始化速度更快,特別是在舊設備上。安全
Hilt網絡
Hilt 是 Jetpack 推薦的創建在 Dagger 之上的依賴注入解決方案。做爲向穩定版過渡的一部分,Hilt 的 ViewModel
支持已經上升到核心 Hilt Android API,SavedStateHandle
已經被添加爲 ViewModelComponent
中的默認依賴。此外,Hilt 如今已經與 Navigation 和 Compose 集成: 您能夠得到一個註釋的 Hilt ViewModel,其做用範圍是目的地或導航圖自己。開發者已經開始在他們的應用中使用 Hilt,請經過 這篇博文 看看他們取得了哪些經驗。app
Paging 3.0框架
Paging 庫讓您能夠加載和顯示小塊的數據以改善網絡和系統資源的消耗。這個版本的特色是使用 Kotlin 徹底重寫,對協程和 Flow 有一流的支持,用 RxJava 和 Guava 原語進行異步加載,並對存儲庫和表現層進行了全面改進。
與 Paging 2 相比,3.0 版本在可用性方面有了很大的改進,重寫時就考慮到了部分和分階段遷移的問題,以便開發者能夠按照本身的計劃進行過渡。請查看 Paging 3.0 文檔 和 Paging 3.0 codelab,以瞭解更多細節並上手實踐。
ConstraintLayout 和 MotionLayout
ConstraintLayout (Jetpack 中用於設計佈局的靈活系統) 和 MotionLayout (管理運動和 widget 動畫的 API) 如今已經發布了穩定版。MotionLayout 如今支持可摺疊設備、圖像濾鏡和動效。請 觀看這場 Google I/O 演講 瞭解更多關於設計工具的新內容。
Security Crypto
Security Crypto 庫讓您能夠安全、輕鬆地加密文件和 SharedPreferences
。若是您想要加密 SharedPreferences
,請用適當的密鑰和方案建立一個 EncryptedSharedPreferences
對象,而後像標準 SharedPreferences
對象同樣使用它便可。
val prefs: SharedPreferences = EncryptedSharedPreferences.create( context, "prefs_file_name", mainKey, prefKeyEncryptionScheme = AES256_SIV, prefValueEncryptionScheme = AES256_GCM, ) // Use the resulting SharedPreferences object as usual. prefs.edit() .putBoolean("show_completed", true) .apply()
Fragment
在過去的一年裏,咱們在 Fragment 庫上着力甚多,對其內部實現進行了清理並減小了未記錄的行爲,使開發者更容易在他們的應用中遵循最佳實踐,並編寫可靠的測試。這爲該庫將來的改進奠基了基礎,好比支持 Navigation 中的多個後退棧,這可能須要投入一些工做,來作到 API 合約的嚴格執行。具體來講,在更新庫以後,請仔細關注您的測試。您能夠查看 Fragment 的 發佈說明,瞭解須要注意的具體案例。
Fragment 最近的版本還引入了 ActivityResult
集成,使得從 fragment 中註冊 Activity
結果成爲可能。Fragment 還添加了一個新的 FragmentOnAttachListener
接口,以取代不太靈活的 onAttachFragment
方法。在 Fragment
或 FragmentActivity
中重寫這個方法的現有代碼仍然能夠正常運行,但咱們已經廢棄了 onAttachFragment
,以防止新代碼意外採用不太靈活的作法。
// Obtain the fragment manager. May be a childFragmentManager, // if in a fragment, to observe child attachment. val fm = supportFragmentManager val listener = FragmentOnAttachListener { fragmentManager, fragment -> // Respond to the fragment being attached. } fm.addFragmentOnAttachListener(listener)
開發庫的功能一旦完成開發,就會進入 Beta 版本以保持穩定。在這以後,只有發現重大問題或基於社區反饋纔會對 API 進行修改。
DataStore
DataStore 提供了穩健的數據存儲解決方案,解決了 SharedPreferences 的缺陷,同時讓 API 接口保持簡單且高度可用。DataStore 帶來了對最佳實踐的支持,如 Kotlin 協程與 Flow 和 RxJava。DataStore 容許您經過 Preference DataStore 存儲鍵值對,或者經過 Proto DataStore 存儲 protobuff 格式的類型對象。您還能夠 插入 本身的序列化解決方案,好比 Kotlin Serialization。
Alpha 版本的庫處於活躍的開發狀態: API 可能會被添加、改變或刪除,但庫中的內容是通過測試的,通常來講具有高度的可用性。
AppSearch
AppSearch 是一個新的設備上搜索庫,提供高性能且功能豐富的全文搜索功能。與 SQLite 相比,AppSearch 支持多種語言,簡化了查詢結果的排序,對大型數據集的索引和搜索也有更低的延遲。
AppSearch 1.0.0-alpha01 帶來了 LocalStorage 支持,它容許您的應用管理結構化的數據,稱爲 "文檔",而後對其進行查詢。您的應用使用 "模式類型" 來定義結構。例如,您能夠將一個消息 (Message) 建模爲一個模式類型,其中包括主題、正文和發件人等數據。
使用構建器來建立模式類型的文件,而後將它們添加到存儲中。查詢 "body:fruit" 將檢索全部在消息正文中帶有 "fruit" 一詞的文檔。
在 Android S 中,AppSearch 還將提供 PlatformStorage,使得您能夠與其餘應用安全地共享您的應用裏的數據,並且由於無需連接額外的原生庫,您的應用的二進制尺寸也將更小。請注意目前在 Jetpack 中還不能使用 AppSearch,由於其還沒有針對 Android S SDK 開發。
△ Android S+ 上的集中存儲,用於整合到全設備搜索中
Room
Room 是咱們推薦你們採用的數據持久層,在平臺上提供更多的可用性和安全性。
Room 2.4.0-alpha 帶來了對 自動遷移 的支持。當您的數據庫模式發生變化時,您如今能夠聲明一個 @AutoMigration
,指出您想從哪一個版本遷移到哪一個版本,Room 就會爲您生成遷移結果。對於更復雜的遷移,您仍然可使用 Migration
類。
@Database( - version = 1, + version = 2, entities = { Doggos.class }, + autoMigrations = { + @AutoMigration (from = 1, to = 2) + } ) public abstract class DoggosDatabase extends RoomDatabase { }
Room 2.3.0 穩定版帶來了對 Kotlin 符號處理 的實驗性支持,在咱們對 Kotlin 代碼的基準測試中,其速度比 KAPT 提升了 2 倍,還帶來了對枚舉和 RxJava3 的內置支持。
Room 還引入了 QueryCallback 類,用於在執行 SQLite 語句時提供回調,以簡化日誌等任務。另外還加入了新的 @ProvidedTypeConverter
註釋,讓您在建立類型轉換器時更加靈活。
WorkManager
WorkManager 庫是 Android 推薦的安排可推遲的異步任務的方式,即便應用退出或設備重啓也會運行。WorkManager 已經對任務調節的可靠性進行了改進,確保全部任務都被執行,併爲特定的 Android OS 版本提供了各類解決方法。
WorkManager 的最新版本改進了 對多進程應用的支持,包括將工做請求調度統一到一個進程中的性能優點,以及在調度許多請求時限制數據庫增加。
2.7 版如今處於 alpha 版本,針對 Android S SDK 開發,且適配平臺新的前臺限制。請觀看 Android 上的有效後臺任務 演講了解更多細節。
Background Tasks Inspector 現已在 Android Studio Arctic Fox 中可用,在使用庫的最新版本時您能夠輕鬆查看和調試 WorkManager 做業:
△ Background Tasks Inspector
Navigation
Jetpack 的 Navigation 庫是在應用中進行導航的框架,如今提供了對多個後退棧的支持,並簡化了目的地位於相同深度的狀況,如底部導航欄。
Macrobenchmark
Macrobenchmark 庫將 Jetpack 的基準測試範圍擴展到了應用啓動和綜合行爲,如滾動性能。您能夠遠程使用該庫來跟蹤持續集成測試中的指標,或在本地配合 Android Studio 中的剖析結果來使用。請 觀看 Google I/O 演講 進一步瞭解相關細節。
對於那些想與 Google Assistant 更緊密集成的開發者來講,Google Shortcuts 庫提供了一種方法,經過現有的 ShortcutInfo
類向 Google Assistant 和其餘 Google 服務提供動做。
您能夠經過 ShortcutManager 一次發送多達 15 個快捷方式,以顯示在 Google Assistant 和其餘服務中,使它們可用於語音和其餘互動。
要實現這一點,您須要用一個 Intent
和一個能力綁定 (capability binding) 來定義一個快捷方式;這個綁定提供了語義上有意義的信息,這將幫助 Google 服務找出將其展現給用戶的最佳方式。
// expose a "Cappuccino" action to Google Assistant and other services ShortcutInfoCompat siCompat = ShortcutInfoCompat.Builder(ctx, "id_cappuccino") .setShortLabel("Cappuccino") .setIntent(Intent(ctx, OrderCappuccino::class.java)) .addCapabilityBinding( "actions.intent.ORDER_MENU_ITEM", "menuItem.name", asList("cappuccino") ) .build() ShortcutManagerCompat.pushDynamicShortcut(ctx, siCompat)
EmojiCompat
您的應用中全部用戶生成的內容都包含 🎉,而支持現表明情符號是使您的應用 ✨ 的關鍵!EmojiCompat 庫在 API 19 和更高版本中支持現表明情符號,它已經轉移到新的構件 :emoji2:emoji2,取代了之前的 :emoji:emoji 構件。新的 emoji2 庫用 AppStartup 庫增長了 🪄 自動配置功能 (您不須要添加任何代碼 💻 來顯示 🐼 ) !
AppCompat 從 AppCompat 1.4 開始增長了 emoji2。若是您的應用使用 AppCompat,用戶將能看到現代的表情符號 ⭐,無需進一步配置。沒有使用 AppCompat 的應用,能夠添加 :emoji2:emoji2-views。對於自定義 TextViews,可使用 :emoji2:emoji2-views-helpers 中的實用方法,或經過繼承 AppCompat 視圖來支持現表明情符號。
Jetpack Compose 是用於在 Android 上構建原生 UI 的現代工具包,簡化並加速了 Android 上的 UI 開發。Jetpack Compose 目前處於 Beta 版本,並計劃 在 7 月份發佈穩定版。本文提到的許多庫,以及您可能已經在使用的其餘庫,都專門推出了與 Jetpack Compose 集成的功能。包括 Activity、ViewModel、Navigation 和 Hilt,全部這些庫均可以幫助您在應用中更順利地使用 Compose。請 觀看 Google I/O 演講 進一步瞭解相關細節。
Jetpack 讓您能夠更輕鬆地針對不一樣形態的設備進行開發,包括可摺疊設備、大屏幕設備和 Wear 設備。咱們爲大屏幕設備開發引入了新的規範,同時改進了 WindowManager
和 SlidingPaneLayout
等 Jetpack 庫。請閱讀 這篇博文 瞭解詳情。
以上即是 Jetpack 新內容的概覽。請閱讀 AndroidX 的 版本說明,以便了解每一個庫的全部更新細節,以及觀看 Google I/O 演講 瞭解其中一些庫的詳細信息。
若是您有任何反饋或問題,歡迎經過下方二維碼向咱們提交。您的問題有可能出如今下一期的 FAQ 中並得到解答。感謝您的支持!