Android Jetpack 更新一览

Android Jetpack 更新一览

作者 / Florina Muntenescu, Android Developer Advocate

Android Jetpack 是一套库、工具和指导规范,帮助开发者遵循最佳实践,减少模板代码,以及编写在不同的 Android 版本和设备上运行一致的代码。今天,Google Play 上排名前 1,000 的应用中有 84% 在使用 Jetpack。

下面让我们一起看看 Jetpack 最新的更新情况,如果您已观看 ☟Jetpack 更新一览☟ 演讲的话,本文会做进一步的补充,请别错过!

稳定渠道更新一览

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,请通过 这篇博文 看看他们取得了哪些经验。

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 演讲进一步了解相关细节。

△ 使用 Macrobenchmark 测量应用启动和卡顿

对于那些想与 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 的演讲了解更多信息。

△ 在 Compose 使用 Jetpack 库

不同设备类型

Jetpack 让您可以更轻松地针对不同形态的设备进行开发,包括可折叠设备、大屏幕设备和 Wear 设备。我们为大屏幕设备开发引入了新的规范,同时改进了 WindowManagerSlidingPaneLayout 等 Jetpack 库。请阅读 这篇博文 了解详情。

总结

以上便是 Jetpack 新内容的概览。请阅读 AndroidX 的 版本说明,以便了解每个库的所有更新细节,以及观看 Google I/O 演讲 了解其中一些库的详细信息。

如果您有任何反馈或问题,欢迎通过下方二维码向我们提交。您的问题有可能出现在下一期的 FAQ 中并获得解答。感谢您的支持!

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io Funder | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.
🍗