Android Jetpack 更新一覽

做者 / 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 方法。在 FragmentFragmentActivity 中重寫這個方法的現有代碼仍然能夠正常運行,但咱們已經廢棄了 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 渠道更新一覽

開發庫的功能一旦完成開發,就會進入 Beta 版本以保持穩定。在這以後,只有發現重大問題或基於社區反饋纔會對 API 進行修改。

DataStore

DataStore 提供了穩健的數據存儲解決方案,解決了 SharedPreferences 的缺陷,同時讓 API 接口保持簡單且高度可用。DataStore 帶來了對最佳實踐的支持,如 Kotlin 協程與 Flow 和 RxJava。DataStore 容許您經過 Preference DataStore 存儲鍵值對,或者經過 Proto DataStore 存儲 protobuff 格式的類型對象。您還能夠 插入 本身的序列化解決方案,好比 Kotlin Serialization。

Alpha 渠道更新一覽

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+ 上的集中存儲,用於整合到全設備搜索中

△ 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

△ 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

Jetpack Compose 是用於在 Android 上構建原生 UI 的現代工具包,簡化並加速了 Android 上的 UI 開發。Jetpack Compose 目前處於 Beta 版本,並計劃 在 7 月份發佈穩定版。本文提到的許多庫,以及您可能已經在使用的其餘庫,都專門推出了與 Jetpack Compose 集成的功能。包括 Activity、ViewModel、Navigation 和 Hilt,全部這些庫均可以幫助您在應用中更順利地使用 Compose。請 觀看 Google I/O 演講 進一步瞭解相關細節。

不一樣設備類型

Jetpack 讓您能夠更輕鬆地針對不一樣形態的設備進行開發,包括可摺疊設備、大屏幕設備和 Wear 設備。咱們爲大屏幕設備開發引入了新的規範,同時改進了 WindowManagerSlidingPaneLayout 等 Jetpack 庫。請閱讀 這篇博文 瞭解詳情。

總結

以上即是 Jetpack 新內容的概覽。請閱讀 AndroidX 的 版本說明,以便了解每一個庫的全部更新細節,以及觀看 Google I/O 演講 瞭解其中一些庫的詳細信息。

若是您有任何反饋或問題,歡迎經過下方二維碼向咱們提交。您的問題有可能出如今下一期的 FAQ 中並得到解答。感謝您的支持!

相關文章
相關標籤/搜索