概述
自2008年9月22日谷歌发布Android 1.0版本到前不久Android 12版本到发布,Android已经陪伴我们走过了12个年头。可以说,经过12年的打磨和沉淀,Android的技术体系已经非常的成熟了。比如说,一开始时框架很少,也没有什么规范,所有的代码都是要自己写,但是现在,我们很少会关系这种基础代码,因为一些框架和工具的出现正在帮助开发者完成这方面的工作。
不过,虽然我们可以使用这些框架和技术来达到快速迭代的目的,但是越来越杂的技术选型也让Android开发者无从选择,最终导致做出来的应用质量参差不齐。长久以来,Android一直没有制定一个规范来姐姐这一问题,只要能够实现功能,代码怎么编写都是可以的。虽然Android官方没有推出开发标准,但是一些技术社区出于更高效的进行协同开发,逐渐引入了MVP和MVVM等应用开发架构,使用这些框架开发出来的应用,无论从项目质量还是代码的可读性和可维护性来说,都更加出色,于是这些框架和技术逐渐流行起来。
这些情况被谷歌发现后,最终在Goole I/O 2018大会上推出了全新的Android Jetpack应用开发架构。或许称Android Jetpack为一个架构有点不准确,更多的地方将它称为Android应用开发的工具集,Jetpack是一套库、工具和指南的集合,旨在帮助开发者更轻松地编写优质应用。事实上,Android Jetpack所包含的内容是比较庞大的,主要由基础组件、架构组件、行为组件和UI组件构成,如下图所示。
并且, Android Jetpack中的很多组件并不都是新开发的,如Goole I/O 2017大会时就推出了 Android Architecture Component(AAC),它包括了LifeCycle、LiveData、ViewModel、Room等组件,而在Goole I/O 2018大会上谷歌使用AndroidX替代了Android Support Library,并在Android Architecture Component的基础上发布了Android Jetpack等架构组件。
Android Jetpack有如下一些特点:
1.加速开发
组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率,并且具有非常好的向下兼容性。
2.消除样板代码
Android Jetpack可以很方便的管理繁琐的Activity(如后台任务、导航和生命周期管理)。
3.构建高质量的强大应用
Android Jetpack组件围绕现代化设计实践构建而成,具有向后兼容性,可以有效减少崩溃和内存泄漏。
Jetpack分类
Android Jetpack组件主要分为四大类:
- 基础 - Foundation
- 架构 - Architecture
- 行为 - Behavior
- 界面 - UI
Architecture(架构组件)
Architecture指的是架构组件,旨在帮助开发者设计稳健、可测试且易维护的应用。架构组件可以说是对应用开发帮助最大的组件,具体包含如下一些基础组件。
- Data Binding(数据绑定):属于支持库可使用声明式将布局中的界面组件绑定到应用中的数据源
- Lifecycles:管理 Activity 和 Fragment 生命周期
- LiveData:是一个可观察的数据持有者类。与常规observable不同,LiveData是有生命周期感知的。
- Navigation:处理应用内导航所需的一切
- Paging:一次加载 or 按需加载 & 显示小块数据
- Room:帮助开发者更友好、流畅的访问SQLite数据库。
- ViewModel:以生命周期感知的方式存储和管理与UI相关的数据。
- WorkManager:管理Android的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务。
下面是Google官方推荐的Android应用架构示意图。
每个组件仅依赖于其下一级的组件。例如,Activity 和 Fragment 仅依赖于视图模型ViewModwl。存储区是唯一依赖于其他多个类的类,在本例中存储区依赖于持久性数据模型和远程后端数据源。并且,这些架构组件既可以配合使用,也可以单独使用,可以根据需要合理选择。
Foundationy(基础组件)
Foundationy指的是基础组件,提供最基础的功能,例如向后兼容性、测试、安全、Kotlin 语言支持,并提供包括多个多个平台开发的组件,具体包含如下。
- Android KTX:优化了供Kotlin使用的Jetpack和Android平台API,帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行Android开发。
- AppCompat:帮助较低版本的Android系统进行兼容。
- Auto: 开发Android Auto应用的组件,提供了适用于所有车辆的标准化界面和用户交互。
- 检测:从AndroidStudio中快速检测基于Kotlin或Java的代码。
-多Dex处理:为具有多个Dex文件应用提供支持。
- 安全:安全的读写加密文件和共享偏好设置。
- 测试:用于单元和运行时界面测试的Android 测试框架。
- TV: 构建可让用户在大屏幕上体验沉浸式内容的应用。
- Wear OS:开发Wear应用的组件。
Behavior(行为组件)
行为组件可以帮助开发者的应用与标准Android服务(如通知、权限、分享)进行集成,行为组件包含。
- CameraX(相机) :简化相机应用的开发工作,可向后兼容至 Android 5.0(API 级别 21)
- DownloadManager(下载):可处理长时间运行的HTTP下载 & 超时重连
- Media & playback(多媒体) :用于媒体播放,以及路由的向后兼容 API。
- Notifications(通知):提供向后兼容的通知 API,支持 Wear 和 Auto。
- Permissions(权限):用于检查和请求应用权限的兼容性 API。
- Preferences(偏好设置):提供了能够改变应用的功能和行为能力。
- Sharing(共享):提供适合应用操作栏的共享操作。
- Slices(切片):创建可在应用外部显示应用数据的灵活界面元素。
UI(界面组件)
界面组件主要提供各种辅助绘制界面的View类 和各种辅助组件,具体包含。
- Animation & Transitions(动画):提供各类内置动画以及自定义动画效果。
- Emoji(表情):使用户在未更新系统版本的情况下也可以使用表情符号。
- Layout(布局):xml书写的界面布局或者使用Compose完成的界面。
- Palette(调试板):从调色板中提取出有用的信息。
在项目中引入JetPack组件
在项目中引入JetPack组件需要在项目build.gradle中添加google() 库,默认情况下会添加google() 库的,如下所示。
allprojects {
repositories {
google()
jcenter()
}
}
接下来,我们就可以使用具体的组件库了,如我们想引入Room持久化库,那么只需要app的build.gradle文件中添加库引用即可。
implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor "android.arch.persistence.room:compiler:1.1.1 "
androidTestImplementation "android.arch.persistence.room:testing:1.1.1"
AndroidX
AndroidX简介
AndroidX是谷歌在 2018 I/O 大会上推出的用于替换android.support.library的 Android扩展库,按照官方文档说明,android.support.library在Android 28版本之后就不再更新,未来的版本更新都在AndroidX中进行。不仅如此,AAC(Android Architecture Components架构缩写)中的组件也被 合并到AndroidX中,所以在使用JetPack组件时经常会看到AndroidX相关的包。
并且,为了方便开发者迁移到AndroidX版本,谷歌官方给出了很详细的迁移文档(如何迁移到Android)。对于一些新组件和老组件,可以参加下面的表。
迁移到AndroidX
如果你从未在Android项目中使用AndroidX,现在希望将项目迁移到AndroidX,那么可以在菜单栏中依次选择【ReFactor】→【Migrate to AndroidX... 】即可将你的Android项目迁移到AndroidX,如下图所示。
然后带你【Migrate】按钮确认,迁移完成之后,打开项目的gradle.properties文件,可以看到如下脚本代码。
android.useAndroidX=true //是否使用AndroidX
android.enableJetifier=true //是否将第三方库迁移到AndroidX
然后再打开Android项目的app的build.gradle文件,发现一些第三方库也被AndroidX的库所替换。
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'com.google.android.material:material:1.3.0-alpha03'
...
如果是新建项目,那么默认会添加AndroidX支持。