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 中并得到解答。感谢您的支持!

相关文章
相关标签/搜索