0%

初识Jetpack

Jetpack 是什么

Jetpack 包含了一系列的 Android 库,这些库都采用了最佳做法并在 Android 应用中提供向后兼容。Jetpack 库在 androidx 命名空间发布。

Jetpack 使用

在 settings.gradle 文件中,将 google() 代码库添加到 dependencyResolutionManagement { repositories {…}} 块中

1
2
3
4
5
6
7
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
jcenter()
}
}

然后,在模块 build.gradle 文件中添加 Jetpack 组件,例如:

1
2
3
4
5
6
7
dependencies {
def lifecycle_version = "2.2.0"

implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
...
}

Jetpack 组件

主要的组件有:

Jetpack 应用架构

界面层

界面层的作用是在屏幕上显示应用数据。接收用户的输入或外部输入(网络)来响应并更新界面的显示。
界面层主要有以下两部分组成:

  • 在屏幕上呈现数据的界面元素。—View
  • 用于存储数据,向界面元素提供数据以及处理逻辑的状态容器.— ViewModel

数据屋

应用的数据屋包含业务逻辑。业务逻辑决定应用的价值,它包含决定应用如何创建、存储和更改数据的规则。
数据支有多个库组成,每个库可包含多个数据源。你应该为应用处理的每种不同类型 的数据创建一个库类。
库类主要负责以下任务:

  • 向应用的提供数据
  • 对数据进行集中更改
  • 解决多个数据源之间的冲突
  • 从应用的其余部分提取数据
  • 包含业务逻辑

每个数据源类应仅负责处理一个数据源,访数据源可能是文件、网络来源或是本地数据库。

网域层

网域层负责封装复杂的业务逻辑,或者由多个 ViewModel 重复使用的简单业务逻辑。

最佳实践

  • 不要将数据存储在应用组件中
  • 减少对 Android 类的依赖
  • 在应用的各个模块之间设定明确定义的职责界限
  • 尽量少公开每个模块中的代码
  • 专注于应用的独特核心
  • 考虑如何使应用中的每个部分可以独立测试
  • 保留尽可能多的相关数据和最新的数据

Jetpack 和 AndroidX

androidx 命令空间包含 Android Jectpack 库。与支持库一样, androidx 命令空间中的库与 Android 平台分开提供,并向后兼容 Android 各个版本。

AndroidX 对原始的 Android 支持库进行了重大改进,支持库现已不做维护,不仅提供与支持库相同的功能,而且还提供了新的库。

AndroidX 包含以下功能:

  • AndroidX 中的所有软件包使用一致的命令空间 androidx。支持库软件包已映射到对应的 androidx.* 软件包。
  • 与支持库不同, andoridx 软件包会单独维护和更新。
  • 版本28.0.0是支持库的最后一个版本。

AndroidX 迁移

使用 Android Studio 3.2 及更高版本,您只需从菜单栏中依次选择 Refactor > Migrate to AndroidX,即可将现有项目迁移到 AndroidX。

重构命令使用两个标记。默认情况下,这两个标记在 gradle.properties 文件中都设为 true:

android.useAndroidX=true

Android 插件会使用对应的 AndroidX 库而非支持库。

android.enableJetifier=true

Android 插件会通过重写现有第三方库的二进制文件,自动将这些库迁移为使用 AndroidX。