一文读懂-Jetpack与AndroidX

1. 核心概念:一句话概括

  • Jetpack一套组件、工具和指南的集合。它的目的是帮助开发者遵循最佳实践,减少样板代码,并让应用在各种 Android 版本和设备上都能一致地工作。
  • AndroidXJetpack 组件的 "包装"和"命名空间" 。它是 Android 支持库的重新设计和替代品,所有 Jetpack 组件都存放在 androidx 这个命名空间下。

可以把它们的关系理解为:
Jetpack 是一个"品牌"或"生态",而 AndroidX 是这个品牌下所有产品的"包装规格"和"出厂标准"。


2. 详细介绍

AndroidX

是什么?

AndroidX 是对原始 Android 支持库(Android Support Library)的重大改进和替代。在 AndroidX 出现之前,开发者使用像 com.android.support:appcompat-v7 这样的支持库。

为什么需要它?

  1. 统一的命名空间 : 旧的支持库包名混乱(com.android.support.*),与 Android 操作系统本身的包名(android.*)容易混淆。AndroidX 将所有库都迁移到清晰的 androidx.* 命名空间下。
  2. 独立的版本控制 : AndroidX 下的每个库(如 androidx.appcompatandroidx.lifecycle)都有自己独立的版本号,不再与 Android 平台版本绑定。这意味着你可以单独更新某个库,而不必等待整个系统更新。
  3. 更好的语义化版本: 遵循严格的语义化版本控制,让开发者更清楚地了解版本升级带来的变化。
  4. 更好的打包和模块化: 库被拆分得更细,你可以只引入你需要的部分,减少应用体积。

总结:AndroidX 是一个基础设施层面的改进,为 Jetpack 组件提供了统一的"家"。

Jetpack

是什么?

Jetpack 是一个由 Google 精心策划的组件集合,旨在加速 Android 应用开发。它不是一个单一的库,而是一个"全家桶",涵盖了应用开发的各个方面。

为什么需要它?

  1. 遵循最佳实践: Jetpack 组件内置了 Google 推荐的最佳架构和实践(如 MVVM),帮助开发者构建健壮、可测试和可维护的应用。
  2. 消除样板代码 : 例如,ViewModelLiveData 可以帮你以生命周期感知的方式管理界面相关的数据,无需手动处理生命周期带来的各种问题。
  3. 保证向后兼容: Jetpack 组件通常会在旧版 Android 系统上提供新功能的实现,让你能轻松使用新 API,而无需担心系统版本碎片化。
  4. 简化复杂任务 : 例如,使用 Room 库操作 SQLite 数据库,使用 WorkManager 管理后台任务,都比使用原生 API 简单得多。

Jetpack 的组成部分:

Jetpack 被分为四个大类:

  1. 架构组件(Architecture) : 构建稳健、可测试、可维护应用的核心。

    • Data Binding: 以声明方式将布局界面组件绑定到应用中的数据源。
    • Lifecycle: 管理 Activity 和 Fragment 的生命周期。
    • LiveData: 在底层数据发生变化时通知视图的可观察数据持有者。
    • ViewModel: 以注重生命周期的方式存储和管理界面相关的数据。
    • Room: SQLite 数据库的抽象层,提供编译时校验和便利的 API。
    • Navigation: 处理应用内导航。
    • Paging: 逐步从数据源加载信息。
  2. 界面组件(UI) : 提供各种界面控件和辅助工具。

    • Fragment: 模块化的界面组件。
    • Layout: 用于排列视图的 XML 布局。
    • AppCompat: 让应用在新版 Android 上也能拥有 Material Design 外观。
    • Emoji: 确保设备在系统未更新时也能显示最新的 emoji。
    • Transition: 处理界面之间的动画过渡。
    • Palette: 从图片中提取有意义的颜色。
  3. 行为组件(Behavior) : 与标准 Android 服务集成。

    • Download Manager: 处理长时间运行的 HTTP 文件下载。
    • Media & Playback: 用于媒体播放和路由(向后兼容)。
    • Notifications: 提供向后兼容的通知 API。
    • Permissions: 用于检查和请求应用权限。
    • Sharing: 提供共享操作(如 ShareActionProvider)。
    • Slices: 在 Google 搜索等地方展示应用的交互式内容。
  4. 基础组件(Foundation) : 提供横向功能,如向后兼容、测试和 Kotlin 语言支持。

    • AppCompat: 为旧版 Android 提供 Material Design 的实现。
    • Android KTX: 提供了一系列 Kotlin 扩展函数,让代码更简洁、更地道。
    • Multidex: 为方法数超过 64K 的应用提供支持。
    • Test: 用于进行单元测试和仪器测试的框架。

3. 区别与联系

特性 Jetpack AndroidX
定义 一套组件、工具和指南的集合(一个"生态"或"品牌")。 Jetpack 组件的官方命名空间和包结构(一个"包装标准")。
范围 广泛,包含架构、UI、行为、基础等超过 100 个库。 具体,是所有 Jetpack 库的包名前缀。
关系 内容。Jetpack 定义了"有什么库"和"这些库能做什么"。 形式。AndroidX 定义了"这些库叫什么"和"如何被引入项目"。
类比 如同 "宜家家居" 这个品牌,它提供卧室、厨房、客厅等各种系列的家具。 如同宜家所有产品都遵循的 "平板包装"和"Allen Key 组装" 标准。

核心联系:
所有 Jetpack 组件都使用 AndroidX 命名空间。 当你使用 Jetpack 时,你实际上是在使用 androidx.* 包下的库。


4. 用法示例

1. 在项目中配置

首先,在你的项目的 build.gradle 文件中,确保已经配置了 AndroidX:

gradle

ini 复制代码
// 在 gradle.properties 文件中(如果没有则添加)
android.useAndroidX=true
android.enableJetifier=true // 这个标志表示自动迁移旧的依赖到 AndroidX

2. 添加依赖

然后,在你的 App 模块的 build.gradle 文件中,添加你需要的 Jetpack 组件(即 AndroidX 库)。

示例 1:使用 ViewModel 和 LiveData(架构组件)

gradle

kotlin 复制代码
dependencies {
    def lifecycle_version = "2.6.2"

    // ViewModel
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    // LiveData
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
    // 可选 - 生命周期感知组件,如默认的 LifecycleObserver
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
}

在代码中使用:

kotlin

kotlin 复制代码
// MainActivity.kt
class MainActivity : AppCompatActivity() {
    // 通过 ViewModelProvider 获取 ViewModel 实例
    private val viewModel: MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 观察 LiveData,当数据变化时自动更新 UI
        viewModel.myData.observe(this) { data ->
            // 更新 TextView 或其他 UI 组件
            textView.text = data
        }
    }
}

// MainViewModel.kt
class MainViewModel : ViewModel() {
    // 使用 MutableLiveData 来持有可以被改变的数据
    private val _myData = MutableLiveData<String>()
    // 对外暴露不可变的 LiveData,防止外部修改
    val myData: LiveData<String> = _myData

    fun updateData(newData: String) {
        _myData.value = newData
    }
}

示例 2:使用 Room(架构组件)

gradle

kotlin 复制代码
dependencies {
    def room_version = "2.5.2"

    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version" // 对于 Kotlin,使用 kapt。Java 用 annotationProcessor
    // 可选 - Kotlin 扩展和协程支持
    implementation "androidx.room:room-ktx:$room_version"
}

在代码中使用:

kotlin

less 复制代码
// 1. 定义数据实体(Entity)
@Entity
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

// 2. 定义数据访问对象(DAO)
@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): List<User>

    @Insert
    fun insertAll(vararg users: User)
}

// 3. 定义数据库(Database)
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

// 在 Activity 或 Application 中创建数据库实例
val db = Room.databaseBuilder(
    applicationContext,
    AppDatabase::class.java, "database-name"
).build()

// 使用 DAO
val users = db.userDao().getAll()

总结

  • AndroidX基础设施 ,是所有现代 Android 支持库的新家(androidx.* 包名)
  • Jetpack 是建立在 AndroidX 之上的一套强大的开发工具集,它提供了构建优秀应用所需的各种组件和架构指导。

对于开发者来说,你不需要在"使用 AndroidX"和"使用 Jetpack"之间做选择 。当你开始一个新项目时,Android Studio 默认会使用 AndroidX。而当你引入任何一个 androidx.* 包下的库时,你就在使用 Jetpack。它们是现代 Android 开发的基石,强烈建议所有新项目都基于它们进行开发。

相关推荐
河铃旅鹿3 小时前
Android开发-java版:SQLite数据库
android·数据库·笔记·学习·sqlite
旋律逍遥3 小时前
《Framework 开发》3、开发工具及命令行知识装备
android
啦啦9117143 小时前
安卓手机/平板/TV版 Rotation强制横屏显示工具!免ROOT可用!再推荐突破手机限制的3款神器
android·智能手机·电脑
汤面不加鱼丸4 小时前
flutter实践:混合app在部分android旧机型上显示异常
android·flutter
_李小白6 小时前
【Android FrameWork】延伸阅读:ActivityManagerService启动Activity
android
用户41659673693556 小时前
Android 媒体库高效扫描器:基于协程与 `ContentObserver` 的 `FileScanner`
android
Arenaschi6 小时前
Android中的release下面的包有什么左右和debug 的包有什么区别
android
stevenzqzq6 小时前
android recyclerview缓存2_四级缓存机制
android·spring boot·缓存
用户69371750013846 小时前
Kotlin 函数详解:命名参数与默认参数值
android·后端·kotlin