Jetpack — 是什么、架构组件

作者: IT Sectr 发布日期: 2026-05-01 阅读时间: 9 分钟

Jetpack 是 Google 的一套 Android 库,可简化开发并加速创建稳定的应用程序。ViewModel、Room 和 Navigation 等组件可解决典型任务:生命周期管理、数据存储和导航。根据 Android Developers (2026),Jetpack 涵盖 50 多个库,每个库都通过 AndroidX(取代 Support Library 的兼容性库)向后兼容 Android 5.0 (API 21)。

要点

  • Android Jetpack — 包含 50 多个库的套件,可加速 Android 应用程序开发并通过 AndroidX 提供向后兼容性。
  • ViewModel 可承受屏幕旋转并在重新创建 Activity 时保留数据,防止用户输入丢失。
  • Room — SQLite 之上的 ORM 层,可在编译时检查 SQL 查询并支持协程。
  • Navigation Component 通过带有类型安全参数的导航图管理屏幕之间的转换。
  • Lifecycle 允许在控制器中无需样板代码即可响应 Activity/Fragment 的生命周期事件。

什么是 Android Jetpack?

Android Jetpack 是 Google 的库、工具和架构建议集合,于 2018 年在 Google I/O 上推出。Jetpack 取代了 Support Library 和 Android Architecture Components,将它们统一到一个生态系统中。在 Jetpack 之前,每个 Android 库都独立更新,导致版本冲突。Jetpack 在统一的 AndroidX 标识符下同步了版本,并引入了稳定主版本加小补丁的模型。

Jetpack 库分为四类:Architecture(ViewModel、Room、Navigation、WorkManager)、UI(Fragment、Compose、Animation、Palette)、Behavior(DownloadManager、Media、Permissions、Sharing)、Foundation(Android KTX、Multidex、AppCompat)。每个类别解决应用程序特定层的问题——从数据管理到用户界面。

Jetpack 理念

Google 推广 Jetpack 的三项原则:accelerate development(更少的样板代码,更多的业务逻辑)、eliminate boilerplate(ViewModel 消除了手动保存状态,Room 消除了编写 SQLiteOpenHelper)和 build with confidence(每个库在发布前都经过 15,000 多项测试)。根据 Android Developers (2026),基于 Jetpack 的应用程序与生命周期相关的崩溃减少了 30%。

AndroidX 作为基础

所有 Jetpack 库都在 AndroidX 标识符下分发(androidx.* 形式的工件)。AndroidX 取代了 Support Library(com.android.support.* 工件),将单一库拆分为具有独立版本控制的模块化工件。通过 gradle.properties 中的 android.useAndroidX=true 选项迁移到 AndroidX — Android Studio 会自动转换导入。

架构组件:ViewModel、Lifecycle、LiveData

ViewModel 是 Jetpack 架构的核心组件,用于存储 UI 数据。与在屏幕旋转时被销毁的 Activity 不同,ViewModel 保留在内存中。用户填写表单、旋转手机——数据不会丢失。当 LifecycleOwner(Activity 或 Fragment)永久结束其生命周期(finish)时,ViewModel 会自动清理。

kotlin
class ProfileViewModel : ViewModel() {

    private val _userName = MutableLiveData<String>()
    val userName: LiveData<String> = _userName

    fun loadProfile(userId: String) {
        viewModelScope.launch {
            val user = repository.getUser(userId)
            _userName.value = user.name
        }
    }
}

@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart() {
        println("屏幕已启动")
    }
}

LiveData 是一个可观察的数据容器,考虑了生命周期。如果屏幕不可见(onStop),LiveData 不会发送更新——这可以防止在尝试更新不存在的 Activity 时发生内存泄漏和崩溃。Lifecycle 是一个存储当前状态(CREATED、STARTED、RESUMED)并允许其他组件订阅状态变化的类。ViewModel、LiveData 和 Lifecycle 共同构成了 Android 响应式架构的基础。

ViewModelScope 和协程

viewModelScope 是一个内置的 CoroutineScope,绑定到 ViewModel 的生命周期。在此范围内启动的所有协程在 ViewModel 清理时自动取消。这消除了在每个 ViewModel 中手动管理 Disposable 和 CompositeDisposable 的需要。使用 viewModelScope 需要依赖项 androidx.lifecycle:lifecycle-viewmodel-ktx

Room:在 Android 上使用数据库

Room 是 Jetpack 的 ORM 库,在 SQLite 之上提供抽象层。开发人员无需编写原始 SQL 查询和手动将 Cursor 转换为对象,而是声明 Entity(表)、DAO(数据访问对象)和 Database(入口点)。Room 通过 @Query 注解在编译时检查 SQL 查询——如果表或列不存在,构建将失败并显示明确的错误。

kotlin
@Entity
data class User(
    @PrimaryKey val id: String,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM User WHERE id = :userId")
    suspend fun getUser(userId: String): User?

    @Insert
    suspend fun insertUser(user: User)
}

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Entity User 描述了一个包含三列的表。DAO 声明了用于与协程配合使用的挂起函数 — 查询在后台线程中自动执行。Room 通过 @Migration 注解支持迁移:开发人员描述版本之间的转换 SQL 脚本,Room 执行该脚本而不会丢失数据。如果没有迁移,Room 将抛出 IllegalStateException — 这样项目在更新架构时可以防止意外数据丢失。

TypeConverters 和关系

Room 仅存储原始类型及其包装器。对于存储列表、Date 或自定义对象,使用 @TypeConverter — 一种将类型转换为 String (JSON) 或 Long (timestamp) 的静态方法。表之间的关系通过带有 @Relation 注解的嵌套对象和带有 @Transaction 的辅助 POJO 类来建模,以实现高效的连接查询。

Navigation Component 是 Jetpack 用于管理屏幕间转换的库。开发人员无需手动调用 FragmentTransaction,而是创建导航图(包含节点目标的 XML 文件),系统生成带有类型安全转换方法的 Directions 类。Navigation Component 保证了返回栈、深层链接和屏幕间参数传递的正常工作。

kotlin
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
//     android:name=".ProfileFragment">
//     <argument android:name="userId"
//         android:defaultValue="-1"
//         app:argType="integer" />
// </fragment>

// 在片段代码中:
class ProfileFragment : Fragment() {
    private val args: ProfileFragmentArgs by navArgs()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        loadProfile(args.userId)
    }
}

userId 参数在导航图中传递,指定类型(integer)和默认值。Navigation Safe Args 插件自动生成 ProfileFragmentArgs 类 — 包含所有具有正确 Kotlin 类型的参数。深层链接在图中配置:app:deepLink="app://profile/{userId}"。Navigation Component 自己解析 URL 并创建返回栈,就像用户通过界面导航一样。

底部导航和条件导航

Navigation Component 通过 NavController 与 BottomNavigationView 集成:每个菜单项都绑定到图中的目标。选项卡之间的转换不会重新创建片段 — Navigation Component 通过 NavBackStackEntry 保存状态。对于条件导航(如果未授权则显示登录),使用 navController.navigate(condition) 并在 onCreate 中进行检查。

AndroidX:新一代 Support Library

AndroidX 是重新设计的 Support Library 架构,其中每个库都获得了具有独立版本的自己的工件。AndroidX 不是单一的 com.android.support:appcompat-v7:28.0.0,而是提供 androidx.appcompat:appcompat:1.7.0androidx.recyclerview:recyclerview:1.4.0 等。这解决了不同依赖项引入不同版本的 Support Library 导致冲突的问题。

通过 Android Studio 3.2+ 中的 Refactor → Migrate to AndroidX 菜单自动迁移到 AndroidX。Studio 会替换 Java/Kotlin 文件、清单和资源中的所有导入。向后兼容性是 AndroidX 的主要优势:库在 Android 5.0 (API 21) 及更高版本上运行,根据 Google Play Console (2025) 数据覆盖 97% 的活跃设备。

主要 AndroidX 工件

最常用的工件:appcompat(深色主题,旧 API 上的 Material Design)、recyclerview(带有 ViewHolder 的自适应列表)、constraintlayout(具有扁平层次结构的灵活容器)、cardview(Material Design 卡片)、preference(Material 风格的设置屏幕)。每个工件独立版本化,无需更新整个包即可加速获取修复。

其他重要的 Jetpack 库

除了 Architecture 和 AndroidX,Jetpack 还包括许多用于典型移动开发任务的专业库。WorkManager 用于保证执行的后台任务(同步、上传日志),支持定期和延迟任务,以及网络和电池限制。DataStore 是基于协程的 SharedPreferences 替代品,支持类型化属性(Preferences DataStore)和 Protocol Buffers(Proto DataStore)。

  • Hilt — 基于 Dagger 的 DI 框架,通过 @HiltViewModel、@Inject、@Module 注解简化依赖注入。与 ViewModel 和 Navigation 内置集成。
  • Paging 3 — 用于从网络/数据库分页加载数据的库,支持 RemoteMediator(网络 + 缓存)、StateFlow 和 Compose。
  • CameraX — 用于使用相机的 API,通过统一的 CameraController 接口抽象了制造商(Samsung、Xiaomi、Honor)之间的差异。
  • Security Crypto — 通过基于 AES-256 的 EncryptedSharedPreferences 和 EncryptedFile 进行数据加密,主密钥存储在 Android Keystore 中。

每个库都有自己的最低 SDK 和工件。Google 每年发布一次主要版本(与 Android 发布同时)和季度安全补丁。建议 — 仅连接必要的库,以免增加 APK 大小。Jetpack 整体(所有工件)超过 20 MB,但典型应用程序使用 5-7 个库,为 APK 增加 3-5 MB。

常见问题

是否需要从 Support Library 迁移到 AndroidX?

是的,Google 于 2019 年停止了对 Support Library 的支持。所有新的 Jetpack 和 Google Play Services 库都需要 AndroidX。通过 Android Studio 可在 30-60 分钟内完成迁移。

Jetpack 可以用于 Java 还是仅用于 Kotlin?

Jetpack 完全兼容 Java。然而,许多功能(viewModelScope、协程、Compose)仅在 Kotlin 中可用。Google 建议新项目使用 Kotlin。

ViewModel 与 onSaveInstanceState 有何不同?

ViewModel 将对象存储在内存中并承受旋转。onSaveInstanceState 仅适用于可序列化的原始类型(Bundle)。ViewModel 在进程被终止时不会保存 — 为此需要 SavedStateHandle。

何时使用 WorkManager 代替协程?

WorkManager 用于即使在应用程序关闭后也必须执行的任务:同步、上传日志、发送分析数据。协程用于与屏幕绑定的任务。

如何从 SharedPreferences 迁移到 DataStore?

将 SharedPreferences 导入替换为 DataStore<Preferences>。通过 dataStore.data.first()(suspend)读取,通过 dataStore.edit { ... } 写入。DataStore 是异步的,并受 ANR 保护。

总结

  • Android Jetpack — 包含 50 多个库的 Android 开发套件,在 AndroidX 下统一,向后兼容至 API 21。
  • ViewModel 可承受屏幕旋转并保存 UI 数据,Lifecycle 通知组件 Activity/Fragment 状态的变化。
  • Room — SQLite 上的类型安全 ORM,具有编译时查询检查、迁移和协程支持。
  • Navigation Component 通过具有类型安全参数和自动深层链接的图来管理转换。
  • WorkManager 保证后台任务的执行,即使在应用程序关闭后也是如此,DataStore 取代了 SharedPreferences。
  • Jetpack 分为四类:Architecture、UI、Behavior、Foundation — 每个覆盖应用程序的相应层。
  • 基于 Jetpack 的应用程序与生命周期相关的崩溃减少 30%,并且由于现成的架构解决方案而开发速度更快。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读