Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >回顾 | Android Jetpack 重要更新

回顾 | Android Jetpack 重要更新

作者头像
Android 开发者
发布于 2023-09-01 04:25:02
发布于 2023-09-01 04:25:02
40500
代码可运行
举报
文章被收录于专栏:Android 开发者Android 开发者
运行总次数:0
代码可运行

Android Jetpack 集合了一系列的开发库,旨在帮助开发者更容易地创作高质量的应用,同时也更好地兼容老旧版本的 Android 系统。在正式发布 Jetpack 两年后的今天,我们已经看到大量的应用开发开始采用 Jetpack 中的开发库,这其中既包括大型开发团队的产品,也有那些刚起步的应用。而这一切仅仅是开始,因为近期我们发布了一系列新的开发库,以及过去一年我们对于现有开发库的重要更新。

在今年的谷歌开发者大会上,我们也为大家介绍了 Jetpack 的重要更新,您也可以 点击此处 到大会官网观看相关视频。

发布到 Alpha 版本的库

Hilt — Jetpack 官方推荐的依赖注入开发库

Hilt 是一个新的 Android 开发库,它可以帮助应用开发更容易地实现 依赖注入。Hilt 让您只需考虑声明和注入绑定中的重要部分,而不必担心管理依赖注入的初始化和连接等部分。

Hilt 是基于 Dagger 开发的,也同样受益于其编译期错误诊断、改良的运行时性能以及良好的可扩展性。Hilt 已经集成了对 Jetpack 开发库和 Android 系统类库的支持。举个例子,为了注入 ViewModel 参数,可以使用 @ViewModelInject 注解 ViewModel 的构造函数,然后使用 @AndroidEntryPoint 来注解 Fragment:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

class SearchViewModel @ViewModelInject constructor(
    private val repository: SearchRepository
): ViewModel() {}

@AndroidEntryPoint
class SearchFragment : Fragment() {
    val viewModel: SearchViewModel by viewModels()
}

请从我们 发布的博客文章 中了解更多关于 Hilt 以及其相关资源。

Paging 3 — 分页加载显示数据内容

Paging 开发库可以帮助分页加载显示数据内容。我们发布了使用 Kotlin 的协程 重写的 Paging 3。新版本添加了一些呼声较高的新功能,比如分隔符、标头和页脚,以及数据转换。此外,新版本还添加了用来监控列表加载状态的一系列的 API,以及重试和刷新的方法等。

举个例子,使用 Paging 3,我们可以通过继承 PagingSource 类来定义数据源,并实现 load 这个挂起函数,该函数可以直接执行其他的挂起函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

class MyPagingSource : PagingSource<Key, Value>() {
    override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> {
        try {
            val result = api.requestPage(params.key)
            return Page(
                data = result.items,
                nextKey = result.nextKey
            )
        } catch(error: IOException) {
            return Error(error)
        }
    }
}

点击 此处 获取更多 Paging 3 的相关信息。

App Startup — 在应用启动时初始化组件

App Startup 开发库提供了一种相当直接且高效的方式,来帮助程序在启动过程中初始化组件。不同于以往需要单独为每个需要初始化的组件定义 ContentProvider,App Startup 可以利用一个共享的 ContentProvider 来同时定义多个组件的初始化操作,这样可以有效加快应用启动速度。

下面的例子展示了如何利用 App Startup 来优化 WorkManager 的初始化时间,底层的实现是 App Startup 使用了一个共用的 ContentProvider,并代替了 WorkManager 自有的 ContentProvider:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

// Initializes WorkManager.
class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder().build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    override fun dependencies(): List<Class<out Initializer<*>>> {
        return emptyList()
    }
}

点击 此处 获取更多有关 App Startup 的信息。

输入法集成自动填充功能

Android 11 为软键盘引入了一系列系统 API 来显示自动填充内容,并且提示内容可以来自其他应用,比如密码管理器。Jetpack 的 Autofill API 通过其 InlineSuggestionUi 类,让键盘和自动填充服务可以更好地利用新特性。其中自动填充服务可以利用这个类创建更合适的提示内容,而键盘可以利用这个类更好地定制自动填充的外观。

△ 软键盘显示信用卡号码自动填充内容

利用 core-animation 和 SeekableAnimatedVectorDrawable 来轻松创建动画

为了更轻松地实现和测试动画,我们增加了两个新的开发库,分别是 androidx.core:core-animation 和 androidx.core:core-animation-testing。同时我们也引入了一个新的 API SeekableAnimatedVectorDrawable 作为 androidx.vectordrawable 开发库的一部分。

core-animation 兼容所有自 Android 4.0 之后的新 Animator API,包括 pause (暂停)、resume (恢复) 和 seek (查找)。

SeekableAnimatedVectorDrawable 基于 core-animation 开发,它是 AnimatedVectorDrawable (AVD) 可替代方案。它使用与 AVD 同样的文件格式,并且新增了 seek (查找)、pause (暂停) 和 resume (恢复) 的功能。Seekable AVD 暂时不可以利用渲染线程,所以只有当急需该类新特性的时候才推荐使用。

利用 Android Studio 的数据库检查器来调试数据库

△ 在 Android Studio 中使用数据库检查器

有了 Android Studio 4.1 新增的 Database Inspector,数据库调试变得十分简单。这个工具可以在正在运行的应用中查看、检索以及修改数据库的内容。无论是使用 Room 还是直接使用 SQLite,您都可以通过菜单栏中的 View > Tool Windows > Database Inspector 开始调试数据库。请通过我们的文章《期待已久的动态数据库工具终于来了!》了解更多关于这个工具的内容以及如何使用它。

WindowManager — 更好地支持新的设备形态

WindowManager 是一个新加入到 Android Jetpack 中的开发库,其旨在帮助开发者更好地支持新的屏幕类型,比如折叠屏、多分屏等。该库为新老版本不同的 WindowManager 功能提供了一个统一的 API 接口。

初始的发布版本提供了对于市面上已有以及即将上市的不同可折叠设备的支持,开发者可以利用其适配所有不同类型的硬件配置。了解更多相关内容,请查阅 博客文章示例工程

MotionLayout — 为 Android 创建流畅的可交互动画

MotionLayout API 在 ConstraintLayout 丰富功能的基础上,可以帮助 Android 开发者开发复杂的动画效果。使用 MotionLayout,开发者既可以轻松地在 ConstraintSets 之间设置过渡动画,也可以方便地将动画集成到常用的视图组件中,比如 RecyclerView、ViewPager 等。Android Studio 4.0 还包含了一个可视化的动效编辑器,它可以用来创建和预览基于 MotionLayout 的动画。

△ 在动效编辑器中创建、编辑和预览 MotionLayout 动画

对于已有开发库的更新

Navigation 库

Navigation 2.3 新增了对于 Dynamic Delivery 功能模块 的支持,该功能可以让用户只下载需要的部分,从而大大降低应用的初始下载体积。另外,您可以像导航到基础模块一样导航到动态功能模块。除此之外,深层链接现在既支持检索参数,也支持自定义的 action 和 mime 类型。

同时新增了一个可以 返回结果 的 API,通过它可以在 SavedStateHandle 中查询和设置所有回退栈的入口。新增的 TestNavHostController 可以让您访问 Navigation 回退栈,并且在测试中设置当前的目的地。

WorkManager 库

最新发布的 WorkManager 支持了那些需要长时间运行的 Worker 或者应被操作系统保持运行在前台的服务。

为了让 WorkManager 任务调试更简单,我们新增了一个诊断 API。这个 API 可以让开发者监控WorkManager 的内部状态,并且在 logcat 中打印出该状态的具体信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Recently completed work:
Id Class Name Job Id State Unique Name Tags
88e31476–50d5–4a3a-855a-7c158d61543e com.example.DiagnosticsWorker null SUCCEEDED com.example.DiagnosticsWorker
939d3d81–4a24–4920-ab6a-2a5b850f377b com.example.ToastWorker null SUCCEEDED com.example.ToastWorker
59ab8eb1–2645–446d-8811–1e7b887ab5bc com.example.ForegroundWorker null CANCELLED com.example.ForegroundWorker
7a6c23d2-a1f9–4477-af77–1f16b45cd765 com.example.ForegroundWorker 0 SUCCEEDED com.example.ForegroundWorker

Running work:
Id Class Name Job Id State Unique Name Tags
7c8bc01f-a60c-4b63-a6aa-2055d4d9d88e com.example.DiagnosticsWorker 4 RUNNING com.example.DiagnosticsWorker

△ WorkManager 诊断结果示例

为了帮助您避免在使用 WorkManager 时遇到一些常见错误,我们同时还新增了 Lint 规则来标识它们。另外还有一些 API 的更新,包括支持设置和观察 Worker 的中间进度、一些对于当前 Worker 查询 API 的优化、一些对于进行中的工作器的调度优化。

Benchmark 库

△ 在 Android Studio 中查看抽样的堆栈信息

Benchmark 库发布的 alpha release: 1.1.0-alpha01 版本中集成了 CPU 性能剖析工具,该工具可以帮助开发者分析应用性能基准测试结果,并且可以在 Android Studio 中直接查看相关方法和抽样的堆栈信息。我们同时还添加了对于内存分配的追踪,以便于开发者可以优化内存分配和垃圾回收所消耗的时间。

权限库 (Permissions)

为了更方便地管理权限,我们引入了一系列新的 ActivityResult API。这些 API 可以用 RequestPermission contract 来替换 requestPermissions,以简化权限请求的开发。除此之外,这些 API 还为一些常见的 intent 提供了类型安全的 contract,比如 选取图片 和提示用户 打开一个文件

游戏 SDK

今年初刚发布的 Android 游戏 SDK 如今也作为 Jetpack 的一部分在 Google Maven 仓库上线。该 SDK 提供一个 帧同步 API 和 Android 性能调优器。请通过 官方文档 获取更多有关游戏 SDK 的内容。

CameraX 库

由于 Android 设备的多样性,市面上有太多的不同种类的相机硬件,而 CameraX 可以兼容市面上 90% 的设备。从二月份 CameraX 发布 Beta 版本 至今,我们一直致力于提升可靠性,以确保 API 在各种设备上都拥有更好的行为。我们的 CameraX 测试实验室也在不断地针对不同机型进行自动化测试,以最大程度地兼容市面上超过 4 亿台的设备。

最近的版本 中,CameraX 引入了对于 PreviewView 组件的优化。该组件如今可以更好地处理应用生命周期和 ViewPager。该组件底层会在支持的设备上自动使用 SurfaceView 以最大程度地获取性能上的优化,这也帮助其使用更少的缓存以及更低电量的消耗。

要了解更多关于 CameraX 的内容,请参阅我们详尽的 CameraX 文档示例工程,以及我们过去推送的文章《使用 PreviewView 来展示相机预览》。

Security 库

Jetpack 的 Security 库为 基于文件加密抽象层的使用提供了安全简便的方法,比如 EncryptedFileEncryptedSharedPreferences。Jetpack 的 Security 开发库利用 Android 的 Keystore,以提供基于硬件存储空间和相关操作的安全。Jetpack 的 Security 开发库 如今为 Android 6.0 以后的系统发布了 RC 版本(最新版本为 RC3),并且为 Android 5.0 以后的系统提供了 1.1.0 alpha 版本。

AppCompat 库

AppCompat 库提供了大量向前兼容的 UI 组件和系统功能,从 Material 主题到 Toolbar 等组件,再到深色主题。在 最新的发布 中,我们新增了 Lint 规则,这有利于开发者辨别哪些属性来自于 AppCompat 以及哪些来自于系统框架,并保证您使用了正确的属性。此外,我们还针对 AppCompat 中深色主题实现的稳定性进行了大量优化。

Webkit 库

Jetpack 的 Webkit 开发库在 1.2.0 版本(最新版为 1.4.0-rc01) 中新增了一个强制使用深色主题显示内容的 API。使用这个 API 的时候,如果网站支持深色主题,WebView 会自动地使用深色主题渲染该站点。如果网站不支持深色主题,这个 API 会强制转换其中的一些颜色。

Jetpack Compose — 全新的 Android UI 开发框架

Jetpack Compose 是全新的现代 Android UI 开发框架,目前发布了开发者预览第二版。新版本添加了许多新功能,包括视图组件的互通性、更多的 Material UI 组件、支持深色主题、新的 UI 测试和动画 API、对于 ConstraintLayout 的支持、优化状态管理、集成可观察的数据流和 RTL 支持。Android Studio 预览现在是可交互的,并且还有很多编译器方面的优化。 您可以查阅我们的 Alpha 版本发布文章、深入详解 Jetpack Compose 之 优化 UI 构建实现原理 等文章了解更多。

获取更多的更新内容,请观看视频: Jetpack Compose 更新速递,欢迎大家尝鲜这些新的更新并积极 向我们反馈

本文概括了 Jetpack 过去几个月的更新。由于其包括了超过 90 个开发库,我们知道想找到您所关心的内容并非易事。为了帮助开发者,我们 重新设计了 Jetpack 网站,并且在大量更新之余新增了一个便捷的 API 选取器,可以帮助开发者更快捷的找到 Jetpack 中合适的开发库来解决问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
划重点 | Android Jetpack 三大重要更新!
Android Jetpack 集合了一系列的开发库,旨在帮助开发者更容易地创作高质量的应用,同时也更好地兼容老旧版本的 Android 系统。在正式发布 Jetpack 两年后的今天,我们已经看到大量的应用开发开始采用 Jetpack 中的开发库,这其中既包括大型开发团队的产品,也有那些刚起步的应用。而这一切仅仅是开始,因为近期我们发布了一系列新的开发库,以及过去一年我们对于现有开发库的重要更新。
音视频开发进阶
2020/07/24
1.9K0
划重点 | Android Jetpack 三大重要更新!
Android Jetpack架构组件(一)与AndroidX
自2008年9月22日谷歌发布Android 1.0版本到前不久Android 12版本到发布,Android已经陪伴我们走过了12个年头。可以说,经过12年的打磨和沉淀,Android的技术体系已经非常的成熟了。比如说,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,但是现在,我们很少会关系这种基础代码,因为一些框架和工具的出现正在帮助开发者完成这方面的工作。
xiangzhihong
2020/12/21
2.3K0
Android Jetpack 学习笔记(1) - 概述
Android Jetpack 套件是最近比较流行的组件库,它包含了一系列的优秀实践,本文是先介绍 Jetpack 的概貌。
张云飞Vir
2021/12/06
2.4K0
Jetpack 重磅更新!
Android Jetpack 是一套帮助你轻松构建高质量应用,兼容旧版本系统的类库套件。在 Jetpack 发布两年之后的现在,我们已经看到了很多 app 的广泛采用,并且更多的开发者开始使用了。这只是一个开始:今天,我们将发布过去一年的工作成果,一些新的类库以及现有类库的重大更新。
路遥TM
2021/08/31
1.4K0
Android Jetpack系列——Android Jetpack介绍
早在2008年,Google 推出了Android ,但那个时候 Android 刚刚问世,经过这将近11年的发展和不断优化,Android 可以说逐渐变得成熟,方便和应用越来越广。 随着 Android 手机的市场保有量越来越多,APP的研发朝着愈发的简单化,易上手的方向发展。而 Google 也是站在这一个角度出发,如何快速得让一个研发人员开发出一款APP,也可以快速的添加新的开发人员。 现在在 Google 应用市场当中,大部分 APP 已经开始使用 Android Jetpack。通过 Android Jetpack 可以让我们的 BUG 减少,让我们把更多的精力放在打造应用本身。 为了这种模板式的开发,Google 在2018年推出了 Android Jetpack。接下来,我将会通过一系列的文章来介绍Android Jetpack,旨在希望了解、学习、应用Android Jetpack的小伙伴一个参考资料。
Demo_Yang
2019/05/15
1.9K0
聚焦 Android 11: Jetpack
在往期 #11WeeksOfAndroid 系列文章中我们介绍了 联系人和身份 、隐私和安全 、 Android 11 兼容性 、 开发语言 ,本期将聚焦  Jetpack 。我们将为大家陆续带来 #11WeeksOfAndroid 内容,深入探讨 Android 的各个关键技术点,您不会错过任何重要内容。
Android 开发者
2020/10/16
9760
JetPack最新库的简单介绍
这个其实没啥可说的,其实就是简化了一部分用法,比如把构造器放到activity上去。参考链接 How AndroidX changes the way we work with Activities and Fragments A first look at AndroidX Activity Result APIs
提莫队长
2021/07/19
9570
Android Jetpack 更新一览
作者 / Florina Muntenescu, Android Developer Advocate
Android 开发者
2022/03/09
1.7K0
Android Jetpack 更新一览
Jetpack 最新成员 AndroidX App Startup 实践以及原理分析
链接:https://juejin.im/post/5ee4bbe4f265da76b559bdfe
陈宇明
2020/12/16
8910
Jetpack 最新成员 AndroidX App Startup 实践以及原理分析
现代 Android 开发的三大亮点
今年的 Google I/O 大会推出了有关现代 Android 开发的大量更新。您最需要了解的三大亮点可以 点击这里 查看相关视频了解。
Android 开发者
2022/03/09
6400
深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析
Android 启动优化(五)- AnchorTask 1.0.0 版本正式发布了
程序员徐公
2021/04/28
1.5K0
深入探索Android 启动优化(七) - JetPack App Startup 使用及源码浅析
Android:手把手带你了解实用的Android Jetpack
提供了最基础的底层功能,如向后兼容性、测试、开发语言Kotlin支持等。包含的组件库:
Carson.Ho
2020/02/18
1.3K0
【Jetpack】Jetpack 简介 ( 官方架构设计标准 | Jetpack 组成套件 | Jetpack架构 | Jetpack 的存在意义 | AndroidX 与 Jetpack 的关系 )
Android 架构发展 : Android 架构的发展 途径了 MVC -> MVP -> MVVM 等方案 , 这些架构都 不是 Google 官方提出的 , 都是各个团队 根据自己的需求推出的适合自己的架构方案 ;
韩曙亮
2023/03/30
1.8K0
【Jetpack】Jetpack 简介 ( 官方架构设计标准 | Jetpack 组成套件 | Jetpack架构 | Jetpack 的存在意义 | AndroidX 与 Jetpack 的关系 )
推荐开发者使用 Material Design 组件
为了保证您的应用与用户设备中安装的其他应用在视觉和行为上保持一致,我们 推荐 您遵循 Material Design 规范,因为用户从一个应用中学习的操作模式可以无缝衔接地在另一个应用中使用。
Android 开发者
2022/03/09
1.2K0
推荐开发者使用 Material Design 组件
Android Sunflower 带您玩转 Jetpack
△ 插图作者:Virginia Poltrack 在 Google I/O 2018 开发者大会上,我们推出了 Android Jetpack,其中包含的 Android 开发架构组件能够帮助您简化开发流程,从而轻松打造出优质应用。开发者能够利用 Jetpack 组件学习最佳实践,减少样板代码,简化复杂任务,进而将精力集中在关键代码上。
Android 开发者
2018/08/30
1.6K0
Android Sunflower 带您玩转 Jetpack
Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
虽然今年的Google I/O大会由于疫情的原因没能开成,但是Google每年要发布的各种新技术可一样都没少。
用户1158055
2020/11/26
2.8K0
Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
使用 Jetpack App Startup 库减少应用启动时间
应用启动时间是应用性能的关键衡量指标。应用启动后,用户期望能够得到快速响应并加载内容,当不符合预期时用户会感到失望。这种糟糕的体验可能会导致用户在 Play 商店上对您的应用给予低分数的评价,甚至不会再次使用。
Android 开发者
2022/03/09
4650
7. JetpackNote---基于Jetpack的学习笔记APP
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Hankkin
2019/09/18
1.1K0
7. JetpackNote---基于Jetpack的学习笔记APP
聚焦 Android 11: 大功告成
这是 #11WeeksOfAndroid 系列的最后一篇文章。感谢您在过去的时间里和我们一起深入探索 Android 开发的关键领域。下面来和我们一起回顾这些精彩内容吧:
Android 开发者
2022/09/23
2.4K0
浅谈2022Android端技术趋势,什么[值得]学?
回头去看 2021,过的似乎那么快,不敢相信我已经从事 Android 开发两年了,不免生出一些感叹。
Petterp
2022/01/18
9020
浅谈2022Android端技术趋势,什么[值得]学?
推荐阅读
相关推荐
划重点 | Android Jetpack 三大重要更新!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验