一、前言:
Jetpack 是 Android 软件组件的集合,使您可以更轻松地开发出色的 Android 应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。
Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。
现在在 Google 应用市场当中,大部分 APP 已经开始使用 Android Jetpack。通过 Android Jetpack 可以让我们的 BUG 减少,让我们把更多的精力放在打造应用本身。
为了这种模板式的开发,Google 在2018年推出了 Android Jetpack。
优势
- 加速开发
组件可以单独采用(不过这些组件是为协同工作而构建的),同时利用 Kotlin 语言功能帮助您提高工作效率。 - 消除样板代码
Android Jetpack管理乏味的活动,例如后台任务、导航和生命周期管理,你可以专注于让你的app更棒的东西。 - 构建高质量的强大应用
基于现代设计实践,Android Jetpack组件可以减少崩溃和内存泄漏,且向后兼容。
二、JetPack的组成
JetPack 有四部分组成:
- Foundation:基础
- Architecture:体系结构
- UI:视觉交互
- Behavior:行为
而Android Jetpack采用的是组件化的方式,这样的好处就是每个组件都是相对独立的,也就是说每个组件都是可以被单独使用和构建的。
这样就十分的灵活,我们可以根据我们自己的项目选择我们想要的功能或者是适于我们应用程序的功能。
1. Architecture Compinents(架构组件)
- Data Bingding(数据绑定)
- Room(数据库)
- WorkManager(后台任务管家)
- Lifecycle(生命周期)
- Navigation(导航)
- Paging(分页)
- Data Binding(数据绑定)
- LiveData(底层数据通知更改视图)
- ViewModel(以注重生命周期的方式管理界面的相关数据)
2. Foundation(基础)
- AppCompat(向后兼容)
- Android KTX(编写更加简洁的Kotlin代码)
- Multidex (多处理dex的问题)
- Test(测试)
3. Behavior(行为)
- Download manager(下载给管理器)
- Media & playback(媒体和播放)
- Notifications(通知)
- Permissions(权限)
- Preferences(偏好设置)
- Sharing(共享)
- Slices*切片
4. UI(视觉交互)
- Animation & transitions(动画和过渡)
- Auto(Auto组件)
- Emoji(标签)
- Fragment(Fragment)
- Layout(布局)
- Palette(调色板)
- TV(TV)
- Wear OS by Google(穿戴设备)
5. 使用JetPack的好处
- 消除大量重复样板式的代码。
- 简化复杂的任务。
- 提供了强健的向后兼容的能力。
- 加速Android的开发进程。
三、JetPack入门
1. 首先需要AndroidStudio3.2及以上版本
2. 如下图,创建App过程中选择Activity&Fragment+ViewModel,Activity&Fragment+ViewModel用来更容易的在你的app中集成Jetpack,
3. 创建完成后目录结构
上图中MainActivity是App入口,初始化App时的根Activity
MainFragment,初始化app时的根Fragment
还有一个MainViewModel,初始化App时调用。
以上三个,还有ui.main都可以在创建过程中更改名称。
4. 直接运行效果
5. 使用Jetpack的好处
- 通过这些碎片,你可以选择实现ViewModel对象,如下例:
class StartViewModel : ViewModel() {
private val _data = MutableLiveData<String>()
val data: LiveData<String>
get() = _data
init {
_data.value = "Hello, Jetpack!"
}
}
- 如果你的app包含多个界面,你可以添加Navigation类来实现Fragment的导航开关。如下例:
// Set up a click listener on the login button
view?.findViewById<Button>(R.id.navigate_bt)?.setOnClickListener {
// Navigate to the login destination
view?.let { Navigation.findNavController(it).navigate(R.id.end_action) }
- 如果你的app需要访问本地SQLite数据,你可以添加Room 持久化类库。如果你的app需要在单个屏幕上展示大量数据,你可以考虑使用 Paging类库。
6. 编译你的Gradle文件
要使用Jetpack,你必须在Gradle文件中适当的添加几行。因为这个app使用了 ViewModel, LiveData, and NavigationController,gradle包含如下几行:
// LiveData + ViewModel
implementation "android.arch.lifecycle:extensions:$rootProject.archLifecycleVersion"
// Navigation
implementation 'androidx.navigation:navigation-fragment:' + rootProject.navigationVersion
implementation 'androidx.navigation:navigation-ui:' + rootProject.navigationVersion
参考:
- https://www.jianshu.com/p/90bee6b63f90
- https://www.jianshu.com/p/435125b67423
- https://www.jianshu.com/p/8e260577bb4c