AndroidX 是Google提供的一套Jetpack库,取代了过时的Support Library。根据Google Developer Documentation, 2024,AndroidX为所有Android版本提供向后兼容的组件,是现代Android开发的标准。AndroidX库包括UI、导航、数据处理、相机和后台任务的工具。
要点
AndroidX是一个开源库,是Android Jetpack的一部分。谷歌于2018年发布了AndroidX,作为Support Library的替代品,后者从2011年起为旧版Android提供向后兼容的组件。
在AndroidX出现之前,Support Library的每个组件都有自己的版本,绑定到targetSdkVersion。开发人员必须同时连接同一个库的多个版本,这会导致依赖冲突和APK文件大小增加。
AndroidX通过语义化版本控制(SemVer)解决了这个问题。现在每个库都是独立的Gradle构件,版本格式为MAJOR.MINOR.PATCH。开发人员可以将Room从2.4.0更新到2.6.0,而无需修改Activity、Fragment或其他模块。
第一个稳定版本AndroidX 1.0.0于2018年12月与Android 9 Pie一起发布。谷歌宣布Support Library进入维护模式,所有新组件——Navigation、WorkManager、Compose——仅在AndroidX中发布。Support Library的最后一个版本——28.0.0——于2019年发布。
根据Google I/O 2019,过渡的关键原因是需要加快更新发布速度。在旧模型中,由于包版本统一,一个库必须等待另一个库。AndroidX消除了这种阻塞,Jetpack开始每2-3个月获得主版本和次版本更新。
主要区别在于命名空间。Support Library使用android.support.*包,而AndroidX转向了androidx.*。这一变化使得库可以按功能模块划分。例如,Support Library中的Fragment称为android.support.v4.app.Fragment,而在AndroidX中则是androidx.fragment.app.Fragment。
第二个重要区别是架构。AndroidX与Jetpack一起提供——一套关于应用程序架构的建议。Jetpack包括ViewModel、LiveData、Room、Navigation和WorkManager,它们被设计为一个统一的生态系统,而不是分散的工具。
向后兼容性也得到了改善。Support Library支持Android 2.3+,而AndroidX保证在Android 4.0(API 14)及更高版本的设备上运行——根据Google Play Console 2024的数据,这覆盖了超过99%的活跃设备。
AndroidX包含超过100个库,分为不同的组。每个组负责特定领域:UI、数据、导航、后台任务、多媒体和测试。以下是关键模块的概述。
androidx.core:core — 基础库,包含系统API的向后兼容版本:NotificationCompat、ActivityCompat、ContextCompat。core-ktx模块提供了用于处理文件、SharedPreferences和视图元素的Kotlin扩展。
androidx.activity:activity库引入了Activity Result API(registerForActivityResult),取代了过时的startActivityForResult。fragment:fragment模块管理片段的生命周期,并支持用于事务和返回栈的FragmentManager。
androidx.lifecycle — Jetpack架构的基础。LifecycleOwner和LifecycleObserver允许组件响应Activity或Fragment的生命周期变化。ViewModel在屏幕旋转时保留数据,LiveData通知UI数据的变化。
class MainViewModel : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
fun loadUsers() {
viewModelScope.launch {
val result = repository.getUsers()
_users.value = result
}
}
}
androidx.recyclerview:recyclerview — 用于显示列表和网格的强大组件。RecyclerView支持LayoutManager(LinearLayoutManager、GridLayoutManager)、ItemDecoration和通过ItemAnimator实现的动画。带有AsyncListDiffer的ListAdapter库通过自动差异计算简化了列表更新。
androidx.navigation:navigation — 用于屏幕间导航的库。Navigation Component与NavHostFragment和NavController协作,支持用于传递类型化参数的Safe Args和用于外部链接的Deep Links。NavGraph在XML文件中描述所有路由。
androidx.compose.ui — 基于Kotlin构建的声明式UI框架Jetpack Compose。与View系统不同,Compose仅通过重组重新绘制已更改的元素。Material Design 3组件(Button、TextField、Scaffold)在material3模块中可用。
| 库 | 构件 | 用途 |
|---|---|---|
| Fragment | androidx.fragment | 管理片段和事务 |
| RecyclerView | androidx.recyclerview | 优化后的列表和网格 |
| Navigation | androidx.navigation | 屏幕间导航 |
| Compose UI | androidx.compose.ui | 基于Kotlin的声明式UI |
androidx.room:room — 用于本地数据存储的ORM。Room从带注释的SQLite查询生成DAO类,在编译阶段检查SQL语法,并支持RxJava和Kotlin Flow。2.6版本包含对KSP的支持,以加快代码生成速度。
androidx.work:workmanager — 用于保证执行的后台任务库。WorkManager支持定期任务、工作链(beginWith、then)和启动条件(Constraints:网络、充电、内存)。即使应用程序已关闭,WorkManager也会在设备重启后完成任务。
androidx.datastore:datastore — SharedPreferences的现代替代品。DataStore使用Kotlin Coroutines和Flow,同步和异步工作,消除了UI线程阻塞。Preferences DataStore存储简单的键值对,而Proto DataStore通过Protocol Buffers存储类型化对象。
自动迁移是谷歌推荐的从Support Library过渡到AndroidX的方法。从3.2版本开始,Android Studio包含内置工具Refactor Migrate to AndroidX,可以替换命名空间并更新build.gradle中的依赖。
在迁移之前,需要更新compileSdk版本到28或更高。同时确保所有第三方库都支持AndroidX。如果某个依赖尚未迁移,可以在gradle.properties中使用android.enableJetifier=true标志——它会自动重写第三方库的字节码。
在Android Studio中,从菜单中选择Refactor Migrate to AndroidX。IDE将扫描整个项目,找到所有来自android.support.*包的导入,并将其替换为androidx.*。app/build.gradle中的依赖也将更新——Support Library构件将替换为相应的AndroidX版本。
迁移后,Gradle Sync可能会显示错误,如果某些依赖未找到。在Google Maven文档中检查所用库的列表——所有AndroidX构件都已发布在google()上。如果库不可用,请在repositories中添加mavenCentral()。
android {
compileSdk 34
}
dependencies {
// Support Library(已过时)
// implementation 'com.android.support:appcompat-v7:28.0.0'
// AndroidX
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.activity:activity-ktx:1.9.3'
implementation 'androidx.fragment:fragment-ktx:1.8.5'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.room:room-runtime:2.6.1'
ksp 'androidx.room:room-compiler:2.6.1'
}
如果项目过大或包含来自Support Library的自定义View,自动替换可能不完整。手动替换代码中的所有字符串:更改导入、XML中的属性(app/src/main/res)和清单中的引用。对于Support Library属性,android:前缀更改为app:(例如,app:cardCornerRadius代替android:cardCornerRadius)。
在手动迁移后检查R引用。Support Library通过android.support.v7.appcompat.R导出资源,而AndroidX通过androidx.appcompat.R导出。在项目中搜索并替换所有旧R路径的引用。项目构建应该没有错误和弃用警告。
AndroidX的第一个优势是模块化。您只连接实际使用的库。如果应用程序只需要RecyclerView和Navigation,则无需引入整个Support Library和所有View组件。这减少了APK大小并加快了项目构建速度。
第二个优势——定期更新。Jetpack每1-3个月发布稳定版本。2024年发布的Room 2.6.0增加了对KSP和Kotlin 2.0的支持。Navigation 2.8.0引入了基于Kotlinx Serialization的类型安全路由。开发人员无需等待下一个Android版本即可获得新功能。
第三个优势——与Kotlin集成。所有AndroidX库都有带扩展函数的-ktx模块。viewLifecycleOwner.lifecycleScope在片段的上下文中启动协程,collectLatest处理Flow,SharedFlow和StateFlow与Lifecycle-aware组件完全兼容。这使代码更简洁和安全。
向后兼容性是AndroidX相对于新平台API的关键优势。您可以在Android 4.0+上使用AppCompatDelegate.setDefaultNightMode设置深色主题,在Android 5.0+上使用NotificationCompat.setBubble设置气泡,在Android 4.0+上使用LocationRequestCompat进行融合定位。设备覆盖率在不增加最低SDK版本的情况下达到99%。
第四个优势——测试。AndroidX包含用于编写仪器测试和单元测试的androidx.test库。FragmentScenario和ActivityScenario允许隔离测试UI组件,TestNavHostController允许在不启动真实设备的情况下检查导航。MockK和Robolectric完善了生态系统。
常见问题
AndroidX使用androidx.*命名空间代替android.support.*,具有独立版本控制(SemVer),包含Jetpack库并支持-ktx Kotlin扩展。Support Library于2019年在28.0.0版本被冻结。
在Android Studio中,在创建项目步骤启用Use AndroidX标志。对于现有项目,在gradle.properties中添加android.useAndroidX=true和android.enableJetifier=true。然后将build.gradle中的依赖替换为androidx组的构件。
Google Play要求所有应用和更新使用AndroidX。Support Library的支持已终止,不再接收安全修复。如果您的应用尚未迁移,可能导致更新在Google Play Console中被拒绝。
Jetpack是Google为Android应用开发提供的库、工具和建议集合。AndroidX是Jetpack的基础。Jetpack包括Architecture Components(Lifecycle、ViewModel、Room)、UI(Compose、Fragment、RecyclerView)和Behavior(WorkManager、Navigation、CameraX)。
是的,Jetpack Compose本身是AndroidX的一部分(androidx.compose.ui)。ViewModel、Navigation、Room和WorkManager库与Compose完全兼容。collectAsState()和collectAsStateWithLifecycle()函数确保了Flow与Compose函数的集成。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。