Jetpack 是一个由多个库组成的套件(并不是一个单一的组件库)
为何使用 Android Jetpack?
- 遵循最佳做法
Android Jetpack组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄漏
- 消除样板代码
Android Jetpack可以管理各种繁琐的活动(如后台任务、导航和生命周期管理),以便您可以专注于打造特色的应用。
- 减少不一致
这些库可以在各种Android版本和设备中以一致的方式运作,助您降低复杂性。
Jetpack分类
从上图我们可以看出,JetPack组件库主要分为四个部分,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。其中用的比较多的是DataBinding、LiveData、Paging、Room、ViewModel、Lifecycles,也是接下来文章重点讲解的对象。
- 架构组件:提供易用框架,应用稳健、可测试、易维护。
DataBinding、ViewModel、LiveData、Lifecycle……
- 基础组件:提供兼容性、测试、安全、Kotlin 语言支持等。
Android KTX、Test……
- 行为组件:提供Android服务,通知、权限、分享等。
Permissions、Notifications、CameraX……
- 界面组件:提供页面、布局、动画等。
Fragment、Emoji、Palette……
上图盗用网络图片,根据官网上的介绍,目前 Jetpack 一共有 85 个组件库,有些看着很熟悉,比如:viewPager、fragment、recyclerview 等等,但有些好像根本就没有见过,也没有用过。
Architecture(架构组件)
-
Data Binding(数据绑定): 数据绑定库是一种支持库,借助该库,可以使用声明式将布局中的界面组件绑定到应用中的数据源。
-
Lifecycles: 方便管理 Activity 和 Fragment 生命周期,帮助开发者书写更轻量、易于维护的代码。
-
LiveData:是一个可观察的数据持有者类。与常规observable不同,LiveData是有生命周期感知的。
-
Navigation:处理应用内导航所需的一切。
-
Paging:帮助开发者一次加载和显示小块数据。按需加载部分数据可减少网络带宽和系统资源的使用。
-
Room:Room持久性库在SQLite上提供了一个抽象层,帮助开发者更友好、流畅的访问SQLite数据库。
-
ViewModel:以生命周期感知的方式存储和管理与UI相关的数据。
-
WorkManager:即使应用程序退出或设备重新启动,也可以轻松地调度预期将要运行的可延迟异步任务。
使用Jetpack
所有 Jetpack 组件都可在 Google Maven 代码库中找到。
打开你的项目的 build.gradle 文件并添加 google() 代码库,如下所示
allprojects {
repositories {
google()
jcenter()
}
}
复制代码
然后,您可以在APP目录下面的build.gradle添加 Jetpack 组件,如下所示:
Databinding
数据绑定库与 Android Gradle 插件捆绑在一起。您无需声明对此库的依赖项,但必须启用它。
如需启用数据绑定,请在模块的 build.gradle 文件中将 dataBinding 构建选项设置为 true,如下所示:
android {
...
buildFeatures {
dataBinding true
}
}
复制代码
注意:即使模块不直接使用数据绑定,也必须为依赖于使用数据绑定的库的所有模块启用数据绑定。
Lifecycles+ViewModel+LiveData
lifecycle-extensions 中的 API 已弃用。您可以为特定 Lifecycle 工件添加所需的依赖项。
Kotlin
dependencies {
val lifecycle_version = "2.4.0-alpha02"
val arch_version = "2.1.0"
// ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")
// LiveData
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
// Lifecycles only (without ViewModel or LiveData)
implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")
// Saved state module for ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")
// Annotation processor
kapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")
// optional - helpers for implementing LifecycleOwner in a Service
implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")
// optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")
// optional - ReactiveStreams support for LiveData
implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")
// optional - Test helpers for LiveData
testImplementation("androidx.arch.core:core-testing:$arch_version")
}
复制代码
Java
dependencies {
val lifecycle_version = "2.4.0-alpha02"
val arch_version = "2.1.0"
// ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")
// LiveData
implementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")
// Lifecycles only (without ViewModel or LiveData)
implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")
// Saved state module for ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")
// Annotation processor
annotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")
// optional - helpers for implementing LifecycleOwner in a Service
implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")
// optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")
// optional - ReactiveStreams support for LiveData
implementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")
// optional - Test helpers for LiveData
testImplementation("androidx.arch.core:core-testing:$arch_version")
}
复制代码
Navigation
dependencies {
val nav_version = "2.3.5"
// Java language implementation
implementation("androidx.navigation:navigation-fragment:$nav_version")
implementation("androidx.navigation:navigation-ui:$nav_version")
// Kotlin
implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
implementation("androidx.navigation:navigation-ui-ktx:$nav_version")
// Feature module Support
implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")
// Testing Navigation
androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")
// Jetpack Compose Integration
implementation("androidx.navigation:navigation-compose:2.4.0-alpha03")
}
复制代码
Paging
dependencies {
val paging_version = "3.0.0"
implementation("androidx.paging:paging-runtime:$paging_version")
// alternatively - without Android dependencies for tests
testImplementation("androidx.paging:paging-common:$paging_version")
// optional - RxJava2 support
implementation("androidx.paging:paging-rxjava2:$paging_version")
// optional - RxJava3 support
implementation("androidx.paging:paging-rxjava3:$paging_version")
// optional - Guava ListenableFuture support
implementation("androidx.paging:paging-guava:$paging_version")
// optional - Jetpack Compose integration
implementation("androidx.paging:paging-compose:1.0.0-alpha11")
}
复制代码
Room
dependencies {
def room_version = "2.3.0"
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor "androidx.room:room-compiler:$room_version"
// To use Kotlin annotation processing tool (kapt)
kapt("androidx.room:room-compiler:$room_version")
// To use Kotlin Symbolic Processing (KSP)
ksp("androidx.room:room-compiler:$room_version")
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:$room_version")
// optional - RxJava2 support for Room
implementation "androidx.room:room-rxjava2:$room_version"
// optional - RxJava3 support for Room
implementation "androidx.room:room-rxjava3:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"
// optional - Test helpers
testImplementation("androidx.room:room-testing:$room_version")
}
复制代码
配置编译器选项
Room 具有以下注解处理器选项:
- room.schemaLocation:配置并启用将数据库架构导出到给定目录中的 JSON 文件的功能。如需了解详情,请参阅 Room 迁移。
- room.incremental:启用 Gradle 增量注解处理器。
- room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义的列。
以下代码段举例说明了如何配置这些选项:
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments += mapOf(
"room.schemaLocation" to "$projectDir/schemas",
"room.incremental" to "true",
"room.expandProjection" to "true"
)
}
}
}
}
复制代码
WorkManager
dependencies {
val work_version = "2.5.0"
// (Java only)
implementation("androidx.work:work-runtime:$work_version")
// Kotlin + coroutines
implementation("androidx.work:work-runtime-ktx:$work_version")
// optional - RxJava2 support
implementation("androidx.work:work-rxjava2:$work_version")
// optional - GCMNetworkManager support
implementation("androidx.work:work-gcm:$work_version")
// optional - Test helpers
androidTestImplementation("androidx.work:work-testing:$work_version")
// optional - Multiprocess support
implementation "androidx.work:work-multiprocess:$work_version"
}
复制代码
如需了解如何使用 Kotlin 扩展,请参阅 ktx 文档。
如需详细了解依赖项,请参阅添加构建依赖项。