Android Jetpack 完全参考手册

84 阅读11分钟

1. 概述

1.1 什么是Android Jetpack?

Android Jetpack 是 Google 官方推出的一套软件组件库、工具和指南的完整集合,旨在帮助开发者遵循最佳实践,减少样板代码,并轻松编写在各种 Android 版本和设备上都能一致运行的健壮应用。

1.2 核心价值与定位

Jetpack 是 现代Android开发(Modern Android Development, MAD)  的核心。它将支持库、架构组件、UI工具包等整合,所有组件都打包在 AndroidX 命名空间下,确保了与 Android 操作系统的解耦和卓越的向后兼容性。

1.3 官方分类与生态

根据官方定义,Jetpack 组件分为四大类,共同构成了一个层次清晰、功能完备的生态系统:

deepseek_mermaid_20251203_1f0bf2.png

2. 🏗️ 架构组件 (Architecture Components)

架构组件是构建健壮、可测试、可维护应用的基础。它们共同构成了官方推荐的 MVVM(Model-View-ViewModel)  架构模式的核心。

2.1 Lifecycle

  • 主要用途:管理 Activity 和 Fragment 的生命周期。

  • 核心作用:允许组件(如 ViewModel)感知其所有者(Activity/Fragment)的生命周期状态变化,从而避免因生命周期管理不当导致的内存泄漏和逻辑错误。

  • 使用方法概览

    1. 创建实现 LifecycleObserver 接口的观察者类。
    2. 在 Activity/Fragment 中,通过 getLifecycle().addObserver(myObserver) 注册观察者。
    3. 观察者内部可以响应 ON_CREATEON_RESUMEON_DESTROY 等生命周期事件。
  • 官方文档参考Lifecycle

2.2 ViewModel

  • 主要用途:以生命周期感知的方式存储和管理与 UI 相关的数据。

  • 核心作用:在配置更改(如屏幕旋转)时保留数据,使数据与 UI 控制器(Activity/Fragment)的生命周期解耦,保证数据在正确的生命周期内可用。

  • 使用方法概览

    1. 创建继承自 ViewModel 的类(如 MyViewModel)。
    2. 在类内部使用 LiveDataStateFlow 等持有数据。
    3. 在 Activity/Fragment 中,通过 ViewModelProvider(this).get(MyViewModel::class.java) 获取实例。
  • 官方文档参考ViewModel

2.3 LiveData

  • 主要用途:持有可观察的数据,并在数据变化时通知观察者。

  • 核心作用:遵循观察者模式,并且具有生命周期感知能力。它只会在观察者(如 Activity)处于活跃状态(STARTED 或 RESUMED)时才更新 UI,从而避免内存泄漏和无效的 UI 更新。

  • 使用方法概览

    1. 通常在 ViewModel 中定义 LiveData(常使用 MutableLiveData 作为可变版本)。
    2. 在 UI 层(Activity/Fragment)调用 viewModel.myLiveData.observe(this) { data -> /* 更新UI */ } 来观察数据变化。
  • 官方文档参考LiveData

2.4 Room

  • 主要用途:在 SQLite 数据库上提供一个强大的对象映射抽象层。

  • 核心作用:将数据库操作封装为对象,提供编译时 SQL 语法检查,极大简化数据库访问的复杂度,并与 LiveDataFlow 深度集成以实现响应式查询。

  • 使用方法概览

    1. 使用 @Entity 注解定义数据表对应的实体类。
    2. 使用 @Dao 注解定义包含增删改查方法的数据库访问对象接口。
    3. 使用 @Database 注解定义继承自 RoomDatabase 的抽象类,并关联实体和 DAO。
    4. 通过 Room.databaseBuilder() 构建数据库实例。
  • 官方文档参考Room

2.5 DataStore

  • 主要用途:替代 SharedPreferences,进行异步、一致的轻量级数据存储。

  • 核心作用:提供两种解决方案——Preferences DataStore(基于键值对)和 Proto DataStore(基于 Protocol Buffers 的类型化对象存储)。它基于 Kotlin 协程和 Flow 构建,解决了 SharedPreferences 的同步 API、缺乏类型安全等问题。

  • 使用方法概览

    1. 在 build.gradle 中添加依赖。
    2. 创建 DataStore 实例。
    3. 通过 dataStore.data 读取 Flow 数据,使用 edit 函数异步写入数据。
  • 官方文档参考DataStore

2.6 Paging 3

  • 主要用途:分页加载和显示大型数据集。

  • 核心作用:高效地从本地数据库或网络按需加载数据,尤其适用于 RecyclerView 列表,优化内存使用和网络流量。Paging 3 库完全基于 Kotlin 协程和 Flow 重构。

  • 使用方法概览

    1. 定义 PagingSource 以指定如何从数据源(如数据库、网络)检索数据。
    2. 在 Repository 中创建 PagingData 流。
    3. 在 ViewModel 中收集 PagingData 并暴露给 UI。
    4. 在 UI 层使用 PagingDataAdapter 适配数据到 RecyclerView
  • 官方文档参考Paging

2.7 WorkManager

  • 主要用途:管理可延迟、需要保证执行的后台任务。

  • 核心作用:用于调度即使应用退出或设备重启也应运行的异步任务。它会根据设备 API 级别和最佳实践选择最合适的底层实现(如 JobScheduler, AlarmManager)。

  • 使用方法概览

    1. 定义继承自 Worker 的类,并在 doWork() 方法中实现任务逻辑。
    2. 构建 WorkRequest(一次性任务用 OneTimeWorkRequest,周期性任务用 PeriodicWorkRequest)。
    3. 通过 WorkManager.getInstance(context).enqueue(workRequest) 将任务加入队列。
  • 官方文档参考WorkManager

3. 🎨 界面组件 (UI Components)

这类组件用于构建动态、美观且高性能的用户界面。

3.1 Jetpack Compose

  • 主要用途:使用 Kotlin 声明式语法构建原生 Android UI。

  • 核心作用现代 Android UI 开发的未来方向。它通过一系列可组合函数来描述界面,当状态变化时自动重组(recompose)界面,摒弃了传统的命令式 XML 布局方式,极大地提升了 UI 开发的效率和可维护性。

  • 使用方法概览

    1. 使用 @Composable 注解声明 UI 函数。
    2. 调用其他内置或自定义的可组合函数(如 ColumnRowButtonText)来构建界面。
    3. 使用 remember 和 mutableStateOf 在重组间管理局部状态。
  • 官方文档参考Compose

3.2 Navigation

  • 主要用途:处理应用内不同目的地(如 Fragment、Composable)之间的导航。

  • 核心作用:通过一个可视化的导航图来管理页面跳转,统一处理深层链接、传递参数和管理返回栈,使导航逻辑清晰且易于维护。

  • 使用方法概览

    1. 在 res/navigation/ 目录下创建导航图 XML 文件,定义目的地和动作。
    2. 在 Activity 的布局中添加 NavHostFragment 或 NavHost(用于 Compose)。
    3. 使用 NavController 来执行导航操作,如 findNavController().navigate(R.id.action_to_detail)
  • 官方文档参考Navigation

3.3 Fragment

  • 主要用途:构建模块化、可重用的 UI 容器,在单个 Activity 内管理多个界面。

  • 核心作用:实现灵活的界面组合,以适应不同屏幕尺寸(如手机和平板)的体验差异,是 Android 应用 UI 的基本构建块之一。

  • 使用方法概览

    1. 创建继承自 Fragment 的类,并重写 onCreateView 来填充布局。
    2. 在 Activity 中通过 FragmentManager 和 FragmentTransaction 来动态添加、替换或移除 Fragment。
  • 官方文档参考Fragment

3.4 Data Binding & View Binding

  • 主要用途:将布局中的 UI 组件与数据源或代码绑定。

  • 核心作用

    • Data Binding:支持声明式布局,允许在布局文件中直接将 UI 组件绑定到数据对象(支持双向绑定),是 MVVM 架构的关键技术。
    • View Binding:替代 findViewById,为每个 XML 布局文件生成一个绑定类,提供对视图的类型安全引用,更轻量。
  • 使用方法概览

    • Data Binding:在布局根标签使用 <layout>,定义 <data> 变量,在视图中使用 @{variable.field} 语法绑定。在代码中通过 DataBindingUtil.setContentView() 或生成的绑定类进行设置。
    • View Binding:在模块的 build.gradle 中启用。在 Activity 中使用 ActivityMainBinding.inflate(layoutInflater) 生成实例,通过绑定对象访问视图。
  • 官方文档参考

4. 🚀 行为组件 (Behavior Components)

这类组件帮助应用与 Android 系统服务或其他应用进行标准化的集成。

4.1 Permissions

  • 主要用途:请求和管理运行时权限。

  • 核心作用:简化 Android 6.0 (API 23) 及以上版本的运行时权限请求流程,提供更简洁、类型安全的 API。

  • 使用方法概览

    1. 在 AndroidManifest.xml 中声明所需权限。
    2. 使用 ActivityResultContracts.RequestPermission() 等合约创建 ActivityResultLauncher
    3. 在需要权限时,调用 launcher.launch(permissionString) 发起请求,在回调中处理结果。
  • 官方文档参考Permissions

4.2 DownloadManager

  • 主要用途:处理长时间运行的 HTTP(S) 文件下载。

  • 核心作用:在后台处理下载任务,自动处理网络连接变化、重试,并在系统通知栏显示下载进度。

  • 使用方法概览

    1. 获取 DownloadManager 系统服务实例。
    2. 创建 DownloadManager.Request 对象,设置下载 URL、目标位置、通知可见性等。
    3. 调用 downloadManager.enqueue(request) 将下载加入队列,并返回一个下载 ID 用于后续查询进度或状态。
  • 官方文档参考DownloadManager

4.3 Media & Playback (Media3)

  • 主要用途:播放本地或网络流媒体(音频/视频)。

  • 核心作用:提供了一套统一且向后兼容的媒体播放 API(如 ExoPlayer 库),支持高级功能如自适应流媒体(DASH, HLS)、音频焦点管理和媒体会话控制。

  • 使用方法概览

    1. 添加 androidx.media3 依赖。
    2. 创建 ExoPlayer 实例。
    3. 构建 MediaItem 并加载到播放器。
    4. 将播放器关联到 UI 组件(如 PlayerView)并控制播放。
  • 官方文档参考Media3

4.4 Sharing

  • 主要用途:实现应用内内容的分享。

  • 核心作用:提供符合 Android 设计标准的分享界面(分享抽屉),让用户可以轻松地将内容(文本、图片、文件)分享到其他应用。

  • 使用方法概览

    1. 创建一个 Intent,将其动作设置为 Intent.ACTION_SEND
    2. 为 Intent 添加附加数据(EXTRA_TEXTEXTRA_STREAM)并设置数据类型。
    3. 使用 Intent.createChooser(intent, "分享到...") 启动一个分享选择器。
  • 官方文档参考Sharing

5. 🌉 基础组件 (Foundation Components)

这类组件为应用开发提供跨领域的底层支持。

5.1 AppCompat

  • 主要用途:为旧版 Android 系统提供新特性的向后兼容支持。
  • 核心作用:让应用在新老设备上保持一致的现代外观和行为。例如,让 Material Design 控件在低版本系统上也能使用。
  • 使用方法概览:让所有 Activity 都继承自 AppCompatActivity,并使用 AppCompat 提供的控件(如 androidx.appcompat.widget.Toolbar)替代原生控件。
  • 官方文档参考AppCompat

5.2 Android KTX

  • 主要用途:为 Android 平台 API 和 Jetpack 库提供 Kotlin 扩展函数和属性。

  • 核心作用:利用 Kotlin 的语言特性(如扩展函数、lambda 表达式、协程),让代码更简洁、地道、易读。

  • 使用方法概览

    1. 在 build.gradle 中添加对应的 KTX 模块依赖(如 androidx.core:core-ktx)。
    2. 在代码中直接使用更简洁的 KTX API,例如 sharedPreferences.edit { putString("key", "value") }
  • 官方文档参考Android KTX

5.3 Test

  • 主要用途:编写和运行单元测试、集成测试和界面测试。

  • 核心作用:提供一套完整的框架和工具(如 JUnitEspressoRobolectric),帮助开发者构建高质量、稳定的应用,并通过自动化测试保障代码质量。

  • 使用方法概览

    1. 使用 JUnit 和 Mockito 等编写 ViewModel、Repository 的单元测试。
    2. 使用 Espresso 编写模拟用户操作的界面测试。
    3. 使用 AndroidJUnitRunner 在设备或模拟器上运行测试。
  • 官方文档参考Testing

5.4 Multidex

  • 主要用途:支持方法数超过 64K(65,536)的应用程序。

  • 核心作用:当应用及其引用的库方法总数超过 Dalvik/ART 虚拟机单个 DEX 文件的限制时,启用多 DEX 文件支持。

  • 使用方法概览

    1. 在 app/build.gradle 中设置 multiDexEnabled true
    2. 添加依赖 androidx.multidex:multidex
    3. 让 Application 类继承自 MultiDexApplication,或在 attachBaseContext() 方法中调用 MultiDex.install(this)
  • 官方文档参考Multidex

6. 附加组件与未来方向

除了上述核心组件,Jetpack 生态还包含一些重要的补充和面向未来的工具:

  • 基准配置文件 (Baseline Profiles) :一种提升应用启动和运行时性能的技术,通过 Macrobenchmark 库生成和测试。
  • 卡顿统计 (JankStats) :用于监控、识别和报告应用界面线程卡顿情况的库。
  • Hilt:Jetpack 推荐的依赖注入库,基于 Dagger,专门简化了在 Android 中的使用。
  • Tracing:用于记录应用性能追踪事件的库,便于在 Android Studio Profiler 中进行分析。
  • 对 Kotlin 跨平台 (KMP) 的支持:部分 Jetpack 库(如 androidx.annotation)开始支持在 iOS 等平台共享业务逻辑。

7. 总结与学习路径

  • 极高的采用率:在 Google Play 商店排名前 1,000 的应用中,超过 90%  使用了 Jetpack,充分证明了其工业级价值。

  • 建议学习路径

    1. 入门阶段:从 LifecycleViewModelLiveData 入手,理解数据驱动 UI 和生命周期感知的核心思想。
    2. 核心阶段:掌握 Room(持久化)、Navigation(导航),并将它们组合成完整的 MVVM 架构应用。
    3. 进阶阶段:学习 DataStore(现代存储)、Paging(分页)、WorkManager(后台任务)。
    4. 现代 UI:开始学习并使用 Jetpack Compose 进行声明式 UI 开发。
    5. 质量与性能:了解 TestingMacrobenchmarkJankStats 等工具,构建高性能、高质量的应用。

如何查阅官方文档?
你可以直接访问 Android Developers 官网,并在搜索框中输入表格中提供的  “官方文档参考”  (如 LifecycleViewModel)来获取最权威、最详细的指南、API 参考和代码实验室教程。官方文档是学习和解决 Jetpack 相关问题的最佳途径。