原文作者:Florina Muntenescu
原文地址:https://medium.com/androiddevelopers/whats-new-in-jetpack-1891d205e136
译者: 秉心说
Android Jetpack 是一套帮助你轻松构建高质量应用,兼容旧版本系统的类库套件。在 Jetpack 发布两年之后的现在,我们已经看到了很多 app 的广泛采用,并且更多的开发者开始使用了。这只是一个开始:今天,我们将发布过去一年的工作成果,一些新的类库以及现有类库的重大更新。
下面是 Jetpack 近更新汇总的视频版本:What’s new in Jetpack talk!:
https://www.youtube.com/watch?v=R3caBPj-6Sg&feature=youtu.be
New in Alpha
Hilt - Jetpack 推荐的依赖注入类库
译者注:前几天掘金有一篇介绍 Hilt 的文章 神一样的存在,Dagger Hilt !! ,看评论区很多读者 仍然把它当成 Dagger 。其实官方也知道 Dagger2 难用,学习曲线陡峭,所以有了 Hilt,一个基于 Dagger2 的为 Android 准备的依赖注入类库。
Hilt 是一个帮助你简化 依赖注入 操作的 Android 类库,它让你可以专注于定义和注入的重要部分, 而无需担心管理所有的 DI 设置。
基于 Dagger 之上,Hilt 继承了它的编译期正确性,也提升了运行时性能和可扩展性。Hilt 增加了对 Jetpack 类库和 Android Framework 类的集成。例如,要注入 ViewModel
的参数的话,你可以在 ViewModel
的构造函数上添加 @ViewModelInject
注解,并在 Fragment
上添加 @AndroidEntryPoint
注解。
在我们发布的博客 Dependency Injection on Android with Hilt 中,可以了解 Hilt 的更多信息。
Paging3 - 逐步加载和显示数据
Paging 是一个帮助你逐步分块加载和显示数据的类库。今天我们发布了 Paging3 ,使用 Kotlin Coroutines 完全重写。这个版本添加了呼声很高的新特性,例如分隔符,header,footer,列表转换,用于重试和刷新的观察列表加载状态的 API 。
通过 Paging3 ,数据源可以继承 PagingSource
,并实现 suspend load
方法,在其中可以直接调用其他挂起函数。
关于 Paging3 的更新信息,请查看 文档 和 codelab 。
译者注:视频里有提到,Paging3 是兼容 Paging2 的,大家可以放心升级(我不负责。。) 。
App Startup - 在应用启动时初始化组件
App Startup 类库提供了一种简单高效的方法在应用启动时初始化组件,而不是为每个需要初始化的组件定义单独的 ContentProvider 。App Startup 允许你定义共享同一个 ContentProvider 的组件初始化器。这可以显著优化应用启动时间。
关于 AppStart 的更多信息,请查看 官方文档 。
Auto-fill IME
Android 11 引入了键盘相关的平台 API ,用于展示自动填充建议,例如密码管理。Jetpack 的 AutoFill API 通过 InlineSuggestionUi
使得键盘和自动填充服务更简单的使用这一特性。AutoFill 服务通过它可以提供可靠的建议,键盘通过它可以自定义建议的样式。
更简单的动画 — core-animation 和 SeekableAnimatedVectorDrawable
为了更简单的实现和测试动画,我们添加了两个新类库: androidx.core:core-animation 和 androidx.core:core-animation-testing .
我们还在 androidx.vectordrawable
库中引入了新的 API SeekableAnimatedVectorDrawable 。
core-animation
移植了 Animator
自 Ice Cream Sandwich 依赖的所有特性,例如 暂停/恢复,拖动。
SeekableAnimatedVectorDrawable
是一个基于 core-animation
的全新的,可拖动的,AnimatedVectorDrawable(AVD)
的替代方案。它和 AVD 使用同样的格式,并添加了
拖动,暂停,恢复的功能。
使用 Database Inspector 调试数据库
这块我就不翻译了,我两个月前的文章就介绍过了,可以查看一下 数据库还能这么看 ?
官方博客也有相关介绍: Database Inspector
WindowManger - 更好的设备支持
WindowManager 是 Jetpack 新增加的类库,旨在帮助开发者适配各种不同的设备,例如折叠屏。 它为新旧平台版本的 WindowManger 特性提供了统一的 API 支持。
支持不同类型的可折叠设备的初始版本已经投入市场,所以开发者可以进行适配了。更多信息可以查看这篇博客 Support New Form Factors with the new Jetpack WindowManager Library, 示例代码: github.com/android/use…
译者注:掘金上也有一篇相关文章,可以参考:Jetpack WindowManager,Android 折叠屏官方适配方案!
MotionLayout,构建流畅的交互式动画
MotionLayout 继承了 ConstraintLayout
的丰富特性,帮助 Android 开发者管理复杂的运动和窗口组件动画。
通过 MotionLayout
,你可以在 ConstraintSets
之间构造过渡动画,并且可以轻易的集成通用 View 的动画,像 RecyclerView
和 ViewPager
。Android Studio 4.0 支持了 Motion Editor,
用于创建和预览 MotionLayout 动画的图形工具。
升级现有类库
Navigation
Navigation 2.3 增加了对 dynamic feature modules(动态功能模块) 的支持,允许用户仅下载应用中需要的模块,大大降低了下载的 Apk 大小。现在,你可以导航到这些模块,就好像本身就是 base apk 的一部分一样。除了允许查询参数之外,Deep link 现在还支持自定义 action 和 mime type 。
返回结果 有了新的 API,Navigation 使用 SavedStateHandle
在目标之间传递数据。你可以使用先前的 BackStackEntry
并在上面设置返回值。
新的 TestNavHostController 帮助你在测试中访问回退栈并设置当前 destination 。
WorkManager
新版本的 WorkManager 通过前台服务增加了对需要保持存活的耗时和重要任务的支持。
为了更轻松地诊断 WorkManager 任务中的问题,我们新增了 Diagnostics API 借助 adb 你查看内部工作状态并输出到 logcat 。
adb shell am broadcast \
-a "android.work.diagnostics.REQUEST_DIAGNOSTICS" \
-p "<your_app_package_name>"
复制代码
为了帮助你避免 WorkManager 使用过程中的常见错误,我们已经添加了一些 Lint 规则来标记他们。其他的一些 API 更新包括:支持设置和观察 工作进度 ;优化对当前工作的查询 API;改进正在运行的 scheduler 。
Benchmark
Benchmark 库的新 alpha 版本与 CPU profiling 整合在了一起,这样就可以对基准测试进行分析,然后直接在 Android Studio 中查看方法或采样的 trace 。我们还增加了对内存分配跟踪的支持,这样你就可以优化分配所花的时间并减少了很多垃圾回收。
Permissions
我们引入了新的 ActivityResult API ,使得权限请求更加简单。新的 API 使用 RequestPermission
Contract 代替原来的 requestPermissions
方法,大大简化了权限申请流程。同时对一般的 intent 提供了类型安全的协议,例如 拍照 和 打开文档 。
Game SDK
今年早些时候推出的 Android Game SDK 现在也是 Jetpack 的一部分,在 Google Maven 仓库已可使用。
它包含两个重要的模块,Frame pacing API
是游戏能够保持稳定的帧率,并可以降低输入的延迟。Performance Tuner
使你能够大规模的测量和优化帧率。
更多相关信息可以查看 官方文档 。
CameraX
安卓设备上的相机有很大差异,CameraX 兼容了 90% 的设备。自从去年 2月份 CameraX 进入 Beta 以来,我们专注于可靠性以确保 API 在大量设备上具有良好表现。CameraX 测试实验室在超过 4 亿活跃设备上运行了我们的自动测试套件。
新版本的 CameraX 带来了 PreviewView
组件的优化。现在它可以可靠的处理与应用生命周期的交互以及页面的交互。它还透明的优化了你的设备,在设备底层使用 SurfaceView
,有益于提升性能表现,减少缓冲和提供电源效率。
更多内容请查看 官方文档 和 代码示例 。
Security
Jetpack Security 类库提供了安全易用的基于文件的加密接口,例如 EncryptedFile 和 EncryptedSharedPreferences 。
Jetpack Security 利用 Android KeyStore 的优势,提供硬件支持的存储和操作安全性。Release Candidate 2 版本现在支持 Marshmallow+ 版本,1.1.0 alpha 版本支持 Lollipop+ 以上版本。
AppCompat
AppCompat 移植了大量 UI 元素和平台特性,如 Material 主题, Toolbar,Dark Theme 。在新版本中,我们添加了一些 Lint 规则,让你更好的区分属性是来自 Appcompat 还是原本的 framework ,确保你使用正确的一个。我们还对 AppCompat 深色主题进行了实质性的稳定性改进。
Webkit
Jetpack WebKit 在 1.2 release 版本新增了一个 API,强制支持暗黑模式。当这个 API 启动时,如果网站支持深色主题,WebView 会进行渲染。如果不支持,API 将会强制修改相应的颜色。
Jetpack Compose - 全新的 UI 工具包
新的现代化 UI 工具包 Jetpack Compose 现在已经到达 Developer Preview 2 版本。这个版本添加了许多新特性:与 View 的互交互性,更多的 Material UI 组件,支持深色主题,新的 UI 测试和动画 API ,ConstraintLayout 基本支持,优化状态管理,集成可观察流,RTL 支持。Android Studio 的预览现在可以交互,并且还有大量的编译优化。
更多信息可以观看视频 What's new in Compose?
后
前面快速介绍了 Jetpack 在之前几个月的更新。拥有 90+ 可用类库,我们也知道你很难找到你需要的,所以我们重新设计了 Jetpack 网站 ,并添加了一个方便的 API 选择器, 以快速帮您找到可以解决问题的 Jetpack 库。
更多 Jetpack 的信息,请关注 Jetpack 周(7 月 20 日这一周)即将放出的视频,博客和 codelab 。
后续会带来一些新类库的使用介绍和原理分析,我是 秉心说 ,关注我,不迷路!
本文使用 mdnice 排版