查看原文
其他

一起看 I/O | Android Jetpack 更新一览

Android Android 开发者 2021-08-05

作者 / Florina Muntenescu, Android Developer Advocate


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


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

△ Jetpack 更新一览
  • Bilibili 视频链接
    https://www.bilibili.com/video/BV1964y1d7p3
  • 腾讯视频链接
    https://v.qq.com/x/page/f3247c3ac7g.html


稳定渠道更新一览



CameraX


CameraX 库为跨操作系统版本访问摄像头功能提供了统一的 API 界面,包括针对特定设备的兼容性修复和变通方案。该库的一些最新改进解决了常见的功能需求,包括支持调整曝光补偿和访问有关摄像头状态和功能的更详细信息。此外,现在可以在摄像头运行时通过 Camera2Interop 改变摄像头设置,如 FPS 范围。该库还带来了对最新设备和操作系统功能的支持,包括高动态范围 (HDR) 预览、变焦率控制,以及对 Android 勿扰模式的支持。但也许最重要的是,CameraX 库在持续解决性能问题,使图像捕捉和初始化速度更快,特别是在旧设备上。


  • CameraX
    https://developer.android.google.cn/training/camerax
  • Camera2Interop
    https://developer.android.google.cn/reference/androidx/camera/camera2/interop/Camera2Interop

Hilt


Hilt 是 Jetpack 推荐的建立在 Dagger 之上的依赖注入解决方案。作为向稳定版过渡的一部分,Hilt 的 ViewModel 支持已经上升到核心 Hilt Android API,SavedStateHandle 已经被添加为 ViewModelComponent 中的默认依赖。此外,Hilt 现在已经与 Navigation 和 Compose 集成: 您可以获得一个注释的 Hilt ViewModel,其作用范围是目的地或导航图本身。开发者已经开始在他们的应用中使用 Hilt,请通过这篇博文看看他们取得了哪些经验。


  • Hilt
    https://developer.android.google.cn/training/dependency-injection/hilt-android?hl=en
  • Hilt 已发布稳定版: Android 上更易用的依赖注入方案
    https://medium.com/androiddevelopers/hilt-is-stable-easier-dependency-injection-on-android-53aca3f38b9c

Paging 3.0


Paging 库让您可以加载和显示小块的数据以改善网络和系统资源的消耗。这个版本的特点是使用 Kotlin 完全重写,对协程和 Flow 有一流的支持,用 RxJava 和 Guava 原语进行异步加载,并对存储库和表现层进行了全面改进。


  • Paging
    https://developer.android.google.cn/topic/libraries/architecture/paging/v3-overview


与 Paging 2 相比,3.0 版本在可用性方面有了很大的改进,重写时就考虑到了部分和分阶段迁移的问题,以便开发者可以按照自己的计划进行过渡。请查看 Paging 3.0 文档Paging 3.0 codelab,以了解更多细节并上手实践。

  • Paging 3.0 文档
    https://developer.android.google.cn/topic/libraries/architecture/paging/v3-overview
  • Paging 3.0 codelab
    https://developer.android.google.cn/codelabs/android-paging#0

ConstraintLayout 和 MotionLayout


ConstraintLayout (Jetpack 中用于设计布局的灵活系统) 和 MotionLayout (管理运动和 widget 动画的 API) 现在已经发布了稳定版。MotionLayout 现在支持可折叠设备、图像滤镜和动效。请观看这场 Google I/O 演讲了解更多关于设计工具的新内容。


  • ConstraintLayout
    https://developer.android.google.cn/training/constraint-layout
  • MotionLayout
    https://developer.android.google.cn/training/constraint-layout/motionlayout
  • Google I/O: 设计工具更新一览
    https://youtu.be/B1u7JZ1rLyE

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()


  • Security Crypto
    https://developer.android.google.cn/topic/security/data


Fragment


在过去的一年里,我们在 Fragment 库上着力甚多,对其内部实现进行了清理并减少了未记录的行为,使开发者更容易在他们的应用中遵循最佳实践,并编写可靠的测试。这为该库未来的改进奠定了基础,比如支持 Navigation 中的多个后退栈,这可能需要投入一些工作,来做到 API 合约的严格执行。具体来说,在更新库之后,请仔细关注您的测试。您可以查看 Fragment 的发布说明,了解需要注意的具体案例:

https://developer.android.google.cn/jetpack/androidx/releases/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 渠道更新一览



开发库的功能一旦完成开发,就会进入 Beta 版本以保持稳定。在这之后,只有发现重大问题或基于社区反馈才会对 API 进行修改。


DataStore


DataStore 提供了稳健的数据存储解决方案,解决了 SharedPreferences 的缺陷,同时让 API 接口保持简单且高度可用。DataStore 带来了对最佳实践的支持,如 Kotlin 协程与 Flow 和 RxJava。DataStore 允许您通过 Preference DataStore 存储键值对,或者通过 Proto DataStore 存储 protobuff 格式的类型对象。您还可以插入自己的序列化解决方案,比如 Kotlin Serialization。


  • DataStore
    https://developer.android.google.cn/topic/libraries/architecture/datastore



Alpha 渠道更新一览



Alpha 版本的库处于活跃的开发状态: API 可能会被添加、改变或删除,但库中的内容是经过测试的,一般来说具备高度的可用性。


AppSearch


AppSearch 是一个新的设备上搜索库,提供高性能且功能丰富的全文搜索功能。与 SQLite 相比,AppSearch 支持多种语言,简化了查询结果的排序,对大型数据集的索引和搜索也有更低的延迟。


  • AppSearch
    https://developer.android.google.cn/guide/topics/search/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 类。


  • Room 的自动迁移
    https://medium.com/androiddevelopers/room-auto-migrations-d5370b0ca6eb
@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 的内置支持。


  • Kotlin 符号处理
    https://github.com/google/ksp


Room 还引入了 QueryCallback 类,用于在执行 SQLite 语句时提供回调,以简化日志等任务。另外还加入了新的 @ProvidedTypeConverter 注释,让您在创建类型转换器时更加灵活。


  • QueryCallback
    https://developer.android.google.cn/reference/androidx/room/RoomDatabase.QueryCallback

WorkManager


WorkManager 库是 Android 推荐的安排可推迟的异步任务的方式,即使应用退出或设备重启也会运行。WorkManager 已经对任务调节的可靠性进行了改进,确保所有任务都被执行,并为特定的 Android OS 版本提供了各种解决方法。


  • WorkManager
    https://developer.android.google.cn/topic/libraries/architecture/workmanager


WorkManager 的最新版本改进了对多进程应用的支持,包括将工作请求调度统一到一个进程中的性能优势,以及在调度许多请求时限制数据库增长。


2.7 版现在处于 alpha 版本,针对 Android S SDK 开发,且适配平台新的前台限制。请观看 Android 上的有效后台任务演讲了解更多细节:

https://youtu.be/IqnCqHyu1E4


Background Tasks Inspector 现已在 Android Studio Arctic Fox 中可用,在使用库的最新版本时您可以轻松查看和调试 WorkManager 作业:

△ Background Tasks Inspector


Navigation


Jetpack 的 Navigation 库是在应用中进行导航的框架,现在提供了对多个后退栈的支持,并简化了目的地位于相同深度的情况,如底部导航栏。


  • Navigation
    https://developer.android.google.cn/guide/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 servicesShortcutInfoCompat 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 库增加了 🪄 自动配置功能 (您不需要添加任何代码 💻 来显示 🐼 ) !


  • EmojiCompat
    https://developer.android.google.cn/guide/topics/ui/look-and-feel/emoji-compat


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 Compose
    https://developer.android.google.cn/jetpack/compose



不同设备类型



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

https://android-developers.googleblog.com/2021/05/whats-new-in-foldables-tablets-and.html



总结



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


  • 版本说明
    https://developer.android.google.cn/jetpack/androidx/versions
  • Google I/O 2021: Android
    https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_Q7bBAqjfP9o8WvrjgvgU8


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



 即刻体验 Android 12 的最新特性!点击 | 阅读原文 | 分享您的使用反馈


推荐阅读

如页面未加载,请刷新重试


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存