Jetpack 是 Google 的一套 Android 库,可简化开发并加速创建稳定的应用程序。ViewModel、Room 和 Navigation 等组件可解决典型任务:生命周期管理、数据存储和导航。根据 Android Developers (2026),Jetpack 涵盖 50 多个库,每个库都通过 AndroidX(取代 Support Library 的兼容性库)向后兼容 Android 5.0 (API 21)。
要点
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)。每个类别解决应用程序特定层的问题——从数据管理到用户界面。
Google 推广 Jetpack 的三项原则:accelerate development(更少的样板代码,更多的业务逻辑)、eliminate boilerplate(ViewModel 消除了手动保存状态,Room 消除了编写 SQLiteOpenHelper)和 build with confidence(每个库在发布前都经过 15,000 多项测试)。根据 Android Developers (2026),基于 Jetpack 的应用程序与生命周期相关的崩溃减少了 30%。
所有 Jetpack 库都在 AndroidX 标识符下分发(androidx.* 形式的工件)。AndroidX 取代了 Support Library(com.android.support.* 工件),将单一库拆分为具有独立版本控制的模块化工件。通过 gradle.properties 中的 android.useAndroidX=true 选项迁移到 AndroidX — Android Studio 会自动转换导入。
ViewModel 是 Jetpack 架构的核心组件,用于存储 UI 数据。与在屏幕旋转时被销毁的 Activity 不同,ViewModel 保留在内存中。用户填写表单、旋转手机——数据不会丢失。当 LifecycleOwner(Activity 或 Fragment)永久结束其生命周期(finish)时,ViewModel 会自动清理。
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 是一个内置的 CoroutineScope,绑定到 ViewModel 的生命周期。在此范围内启动的所有协程在 ViewModel 清理时自动取消。这消除了在每个 ViewModel 中手动管理 Disposable 和 CompositeDisposable 的需要。使用 viewModelScope 需要依赖项 androidx.lifecycle:lifecycle-viewmodel-ktx。
Room 是 Jetpack 的 ORM 库,在 SQLite 之上提供抽象层。开发人员无需编写原始 SQL 查询和手动将 Cursor 转换为对象,而是声明 Entity(表)、DAO(数据访问对象)和 Database(入口点)。Room 通过 @Query 注解在编译时检查 SQL 查询——如果表或列不存在,构建将失败并显示明确的错误。
@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 — 这样项目在更新架构时可以防止意外数据丢失。
Room 仅存储原始类型及其包装器。对于存储列表、Date 或自定义对象,使用 @TypeConverter — 一种将类型转换为 String (JSON) 或 Long (timestamp) 的静态方法。表之间的关系通过带有 @Relation 注解的嵌套对象和带有 @Transaction 的辅助 POJO 类来建模,以实现高效的连接查询。
Navigation Component 是 Jetpack 用于管理屏幕间转换的库。开发人员无需手动调用 FragmentTransaction,而是创建导航图(包含节点目标的 XML 文件),系统生成带有类型安全转换方法的 Directions 类。Navigation Component 保证了返回栈、深层链接和屏幕间参数传递的正常工作。
// 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 不是单一的 com.android.support:appcompat-v7:28.0.0,而是提供 androidx.appcompat:appcompat:1.7.0、androidx.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% 的活跃设备。
最常用的工件:appcompat(深色主题,旧 API 上的 Material Design)、recyclerview(带有 ViewHolder 的自适应列表)、constraintlayout(具有扁平层次结构的灵活容器)、cardview(Material Design 卡片)、preference(Material 风格的设置屏幕)。每个工件独立版本化,无需更新整个包即可加速获取修复。
除了 Architecture 和 AndroidX,Jetpack 还包括许多用于典型移动开发任务的专业库。WorkManager 用于保证执行的后台任务(同步、上传日志),支持定期和延迟任务,以及网络和电池限制。DataStore 是基于协程的 SharedPreferences 替代品,支持类型化属性(Preferences DataStore)和 Protocol Buffers(Proto DataStore)。
每个库都有自己的最低 SDK 和工件。Google 每年发布一次主要版本(与 Android 发布同时)和季度安全补丁。建议 — 仅连接必要的库,以免增加 APK 大小。Jetpack 整体(所有工件)超过 20 MB,但典型应用程序使用 5-7 个库,为 APK 增加 3-5 MB。
常见问题
是的,Google 于 2019 年停止了对 Support Library 的支持。所有新的 Jetpack 和 Google Play Services 库都需要 AndroidX。通过 Android Studio 可在 30-60 分钟内完成迁移。
Jetpack 完全兼容 Java。然而,许多功能(viewModelScope、协程、Compose)仅在 Kotlin 中可用。Google 建议新项目使用 Kotlin。
ViewModel 将对象存储在内存中并承受旋转。onSaveInstanceState 仅适用于可序列化的原始类型(Bundle)。ViewModel 在进程被终止时不会保存 — 为此需要 SavedStateHandle。
WorkManager 用于即使在应用程序关闭后也必须执行的任务:同步、上传日志、发送分析数据。协程用于与屏幕绑定的任务。
将 SharedPreferences 导入替换为 DataStore<Preferences>。通过 dataStore.data.first()(suspend)读取,通过 dataStore.edit { ... } 写入。DataStore 是异步的,并受 ANR 保护。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。