Jetpack 包含一系列 Android 库,它们都采用最佳做法并在 Android 应用中提供向后兼容性。
本文来自:https://developer.android.com/jetpack/getting-started
1. 为何使用 Android Jetpack?
# 遵循最佳做法:Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。
# 消除样板代码:Android Jetpack 可以管理各种繁琐的 Activity(如后台任务、导航和生命周期管理),以便您可以专注于打造出色的应用。
# 减少不一致:这些库可在各种 Android 版本和设备中以一致的方式运作,助您降低复杂性。
下文介绍了如何开始使用 Jetpack 组件:
2. 在应用中使用 Jetpack 库
所有 Jetpack 组件都可在 Google Maven 代码库中找到,下面的第四点也详细的把Jetpack 库列出来,供参考。
打开项目的 build.gradle
文件并添加 google()
代码库,如下所示:
allprojects {
repositories {
google()
jcenter()
}
}
然后,您可以添加 Jetpack 组件(例如 LiveData 和 ViewModel 等架构组件),如下所示:
dependencies {
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
...
}
许多 Jetpack 库都提供 Android KTX 扩展,如上面的 lifecycle-livedata-ktx
和 lifecycle-viewmodel-ktx
所示。KTX 扩展在基于 Java 的 API 基础上构建,充分利用了 Kotlin 特有的语言功能。
如需了解新的 Jetpack 库版本,而Jetpack 库是与 Android 操作系统分开提供的,因此可以单独且更频繁地更新。
3. 了解Jetpack 库版本
版本字符串(如 1.0.1-beta02
)包含三个代表主要、次要和问题修复级别的数字。预发布版本也有一个后缀,用于指定预发布阶段(Alpha 版、Beta 版、候选版本)和版本号(01、02 等)。
每个版本都要经历三个预发布阶段各预发布阶段的标准如下:
Alpha 版
- Alpha 版功能稳定,但功能可能不完整。
- 在版本处于 Alpha 版状态时,可以添加、移除或更改 API。
Beta 版
- Beta 版功能稳定,并且具有功能完整的 API Surface。
- 它们可以投入实际使用,但可能包含错误。
- Beta 版无法使用实验性编译器功能(例如
@UseExperimental
)。- 其他库的依赖项必须为 Beta 版、RC 版或稳定版。不允许使用 Alpha 版依赖项。
候选版本 (RC)
- 候选版本是未来的稳定版。
- 此版本可能包含在最后一刻提供的重要修复。
- 此版本的 API Surface 无法更改。
- 其他库的依赖项只能是 RC 版或稳定版。
一个库可以同时具有多个版本。每个版本都具有不同的发布阶段。例如,虽然 androidx.activity 的稳定版可以是 1.0.0,但也可能还有 1.1.0-beta02 版本以及 2.0.0-alpha01 版本。
所以我们可以知道:库的每个版本都要经历三个预发布阶段,才能成为稳定版本。
基于 Kotlin 以及基于 Java 的 API 参考文档页面适用于所有 Jetpack 库。
4. 利用 Jetpack
Jetpack 库可以单独使用,也可以组合使用,以满足应用的不同需求。
- WorkManager - 满足您的后台调度需求。
- Room - 实现数据存储持久性。
- Navigation - 管理应用导航流程。
- CameraX - 满足相机应用需求。
热门和常用的库排在前面:
activity * 访问基于 Activity 构建的可组合 API。 appcompat * 允许在平台旧版 API 上访问新 API(很多使用 Material Design)。 camera * 构建移动相机应用。 compose * 使用描述界面形状和数据依赖项的可组合函数,以编程方式定义界面。 databinding * 使用声明性格式将布局中的界面组件绑定到应用中的数据源。 fragment * 将您的应用细分为在一个 Activity 中托管的多个独立屏幕。 hilt * 扩展了 Dagger Hilt 的功能,以实现 androidx 库中某些类的依赖项注入。 lifecycle * 构建生命周期感知型组件,这些组件可以根据 Activity 或 Fragment 的当前生命周期状态调整行为。 Material Design 组件* 适用于 Android 的模块化、可自定义 Material Design 界面组件。 navigation * 构建和组织应用内界面,处理深层链接以及在屏幕之间导航。 paging * 在页面中加载数据,并在 RecyclerView 中呈现。 room * 创建、存储和管理由 SQLite 数据库支持的持久性数据。 test * 在 Android 中进行测试。 work * 调度和执行可延期且基于约束条件的后台任务。 ads 获取广告 ID(无论是否通过 Play 服务)。 annotation 公开元数据,帮助工具开发者和其他开发者了解您的应用代码。 arch.core 其他架构依赖项的帮助程序,包括可与 LiveData 配合使用的 JUnit 测试规则。 asynclayoutinflater 异步膨胀布局以避免界面出现卡顿。 autofill 扩展提示,从而提高自动填充的准确性。 benchmark 在 Android Studio 中准确评估代码的性能。 biometric 通过生物识别特征或设备凭据进行身份验证,以及执行加密操作。 browser 在用户的默认浏览器中显示网页。 car 为支持 Android 技术的汽车开发驾驶友好型应用。 cardview 用圆角和阴影实现 Material Design 卡片模式。 collection 降低现有和新的小型集合对内存的影响。 compose.animation 在 Jetpack Compose 应用中构建动画,丰富用户的体验。 compose.compiler 借助 Kotlin 编译器插件,转换 @Composable functions(可组合函数)并启用优化功能。 compose.foundation 使用现成可用的构建块编写 Jetpack Compose 应用,还可扩展 Foundation 以构建您自己的设计系统元素。 compose.material 使用现成可用的 Material Design 组件构建 Jetpack Compose UI。这是更高层级的 Compose 入口点,旨在提供与 www.material.io 上描述的组件一致的组件。 compose.runtime Compose 的编程模型和状态管理的基本构建块,以及 Compose 编译器插件针对的核心运行时。 compose.ui 与设备互动所需的 Compose UI 的基本组件,包括布局、绘图和输入。 concurrent 使用协程将任务移出主线程,并充分利用 ListenableFuture。 constraintlayout 使用相对定位灵活地确定微件的位置和大小。 contentpager 在后台线程中加载 ContentProvider 数据并进行分页。 coordinatorlayout 定位顶层应用微件,例如 AppBarLayout 和 FloatingActionButton。 core 针对最新的平台功能和 API 调整应用,同时还支持旧设备。 cursoradapter 向 ListView 微件提供光标数据。 customview 实现自定义视图。 datastore 以异步、一致的事务方式存储数据,克服了 SharedPreferences 的一些缺点 documentfile 查看文件文档。 drawerlayout 实现 Material Design 抽屉式导航栏微件。 dynamicanimation 使用基于物理特性的动画 API 制作流畅的动画。 emoji 在当前设备和旧版本设备上显示表情符号。 enterprise 创建企业专用应用。 exifinterface 读取和写入图片文件 EXIF 标记。 games 在您的应用中以原生方式使用 Android 游戏 SDK 来执行复杂的游戏任务,例如帧同步。 gridlayout 实现网格布局。 heifwriter 使用 Android 设备上可用的编解码器,以 HEIF 格式对图像或图像集进行编码。 interpolator 在旧版平台上使用动画插值器。 jetifier 一款独立工具,可将某个库中对已弃用支持库的依赖项迁移到等效的 AndroidX 依赖项。 leanback 使用适合 dpad 的微件和模板 Fragment 为 Android TV 设备编写应用。 legacy 此工件及其类已弃用。从 Android 8 开始,后台检查限制使此类无法再发挥作用。 loader 加载界面数据,这些数据不会在配置更改过程中丢失。 localbroadcastmanager 此工件及其类已弃用。请改用 LiveData 或响应式流。 media 与其他应用共享媒体内容和控件。已被 media2 取代。 media2 与其他应用共享媒体内容和控件。 mediarouter 利用通用界面实现在远程接收端设备上显示和播放媒体内容。 multidex 在搭载 Android 5 之前版本的设备上部署包含多个 dex 文件的应用。 palette 从图片中提取具有代表性的调色板。 percentlayout 此工件及其类已弃用。请改用 ConstraintLayout 和关联布局。 preference 无需与设备存储空间交互,也不需要管理界面,便能构建交互式设置画面。 通过您的应用打印照片、文档、其他图形及图片。 recommendation 将内容推送到 Android TV 启动器的主屏幕。 recyclerview 在您的界面中显示大量数据,同时最大限度减少内存用量。 remotecallback 创建一个封装容器,以便开发者更轻松地提供 PendingIntent。 savedstate 编写可插入组件,这些组件会在进程终止时保存界面状态,并在进程重启时恢复界面状态。 security 安全地管理密钥并对文件和 sharedpreferences 进行加密。 sharetarget 提供向后兼容性,可以将快捷方式用作直接共享目标。 slice 在应用外显示模板化界面元素。 slidingpanelayout 实现滑动窗格界面模式。 startup 实现一种在应用启动时初始化组件的简单、高效方法。 sqlite 使用本地 SQLite 数据库。如果可能,请改用 Room。 swiperefreshlayout 实现下拉刷新的界面模式。 textclassifier 识别文本中的对话、链接、选定内容和其他类似构造内容。 tracing 将跟踪事件写入系统跟踪缓冲区。 transition 使用开始和结束布局为界面中的动作添加动画效果。 tvprovider 提供 Android TV 频道。 vectordrawable 渲染矢量图形。 versionedparcelable 提供稳定且紧凑的二进制序列化格式,该格式可跨进程传递或安全保留。 viewpager 以可滑动的格式显示视图或 Fragment。如果可能,请改用 viewpager2。 viewpager2 以可滑动的格式显示视图或 Fragment。 wear 打造适用于 Wear OS by Google 谷歌智能手表的应用。 webkit 在 Android 5 及更高版本上使用新式 WebView API。 window 帮助支持不同的设备类型,例如可折叠设备。
⚠️ Jetpack 库在 androidx
命名空间中发布。如果项目目前使用 Android 支持库,需要把 项目迁移至AndroidX。
如需要,请参考:如何把项目迁移到 AndroidX
另外,如需详细了解如何使用 Jetpack,请查看以下页面:
基于自己的理解进行封装架构示例:
基于Android Jetpack 组件搭建 MVVM 架构 - MVVM-Project-Hilt
(欢迎讨论~)