一起看 I/O | Jetpack 组件的新特性
作者 / Amanda Alexander, Product Manager, Android
Android Jetpack 是开启现代 Android 开发 (Modern Android Development,即 MAD) 之门的钥匙,它是一个包含超过 100 个库、工具及指南的套件,以帮助开发者遵循最佳实践、减少模板代码,以及编写在不同 Android 版本和设备上表现一致的代码,从而使您可以专注于在应用中实现独特的功能。
Android Jetpack
https://developer.android.google.cn/jetpack现代 Android 开发 (Modern Android Development)
https://developer.android.google.cn/modern-android-development
在 Google Play 中,绝大多数应用都使用了 Jetpack 实现应用架构。今天,在排名前 1,000 的应用中,超过 90% 使用了 Jetpack。
本文是 Jetpack 近期更新中的重点部分,也是 I/O 大会演讲: Jetpack 的新功能的延展阅读!
架构库及指南; 应用的性能优化; 用户界面库及指南。
1. 架构库及指南
应用架构库及其组件可以保证应用的健壮性、可测试性,以及可维护性。
数据持久化
Kotlin Symbol Processing (KSP)
https://github.com/google/ksp
@Query("SELECT * FROM Artist
JOIN Song ON Artist.artistName =
Song.songArtistName")
fun getArtistToSongs(): Map<Artist, List<Song>>
Database(
version = MyDb.LATEST_VERSION,
autoMigrations = {
@AutoMigration(from = 1, to = 2,
spec = MyDb.MyMigration.class),
@AutoMigration(from = 2, to = 3)
}
)
public abstract class MyDb
extends RoomDatabase {
...
DataStore
DataStore
https://developer.android.google.cn/jetpack/androidx/releases/datastoreMAD Skills: DataStore
https://youtu.be/9ws-cJzlJkU
增量数据获取
Paging
https://developer.android.google.cn/jetpack/androidx/releases/paging
如需了解有关 Paging 3 的更多信息,请参阅 Android 开发者网站中全新简化版的教程: Paging Basics Codelab,它描述了如何在包含列表的应用中集成 Paging 库:
https://developer.android.google.cn/codelabs/android-paging-basics
定义应用内导航模型
架构库指南
文章
https://developer.android.google.cn/topic/architectureMAD Skills: 架构
https://youtu.be/TPWmfJq16rA
2. 优化应用性能
通过使用性能库,您可以构建高性能的应用,并作出针对性的优化以维持其性能表现,从而获得更好的终端用户体验。
优化启动时间
Baseline Profiles
https://developer.android.google.cn/studio/profile/baselineprofiles
我们已经开始在 Google 内部使用 Baseline Profiles。Play Store 应用在接入 Baseline Profiles 后,搜索结果页初始页面的渲染时间减少了 40%。为了给终端用户提供更好的用户体验,一些流行的依赖库也已经加入了 Baseline Profiles,例如 Fragment 和 Compose。如果想要创建您自己的基线配置文件,您需要使用 Macrobenchmark 库。
Macrobenchmark
https://developer.android.google.cn/jetpack/androidx/releases/benchmark#macrobenchmark
检测您的应用
Macrobenchmark 库可以通过将 Jetpack 基准测试的覆盖范围扩展至更为复杂的用例,来帮助开发者更好的了解应用性能。这其中包含了应用启动及集成界面操作 (如滚动 RecyclerView 或运行动画)。Macrobenchmark 也可用于生成 Baseline Profiles。
Macrobenchmark 已经更新以提高测试速度,同时也带来了几个新的实验性功能。它现在还支持通过使用 TraceSectionMetric 进行基于自定义跟踪的时序测量,从而允许开发者针对特定的代码部分进行基准测试。此外,AudioUnderrunMetric 现在可以检测音频缓存欠载,以帮助开发者了解音频卡顿的情况。
BaselineProfileRule 可以生成配置文件来帮助进行运行时优化。它的工作方式与其他宏基准测试类似,您只需通过 lambda 代码表示用户操作即可。在下面的示例中,编译器应该提前优化的关键用户场景是冷启动: 从启动器打开应用的启动 Activity。
@ExperimentalBaselineProfilesApi
@RunWith(AndroidJUnit4::class)
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun startup() = baselineProfileRule.collectBaselineProfile(
packageName = "com.example.app"
) {
pressHome()
// 这一代码块定义了应用的关键用户场景。这里我们所关注的是应用启动的优化,但您
// 也可以进行导航和滚动浏览您最重要的界面。
startActivityAndWait()
}
}
https://developer.android.google.cn/studio/profile/baselineprofiles
避免界面卡顿
JankStats
https://developer.android.google.cn/studio/profile/jankstats
识别卡顿: JankStats 使用内置的启发式算法确定卡顿发生的时机,并使用该信息得知何时发布卡顿报告,从而使开发者可以获得有关这些问题的信息,以帮助分析和修复问题。 提供界面上下文: 为了提高卡顿报告的可利用性和可操作性,JankStats 提供了一个帮助追踪当前界面和用户状态的机制。每当记录报告时,都会提供相应的信息,这样不但可以帮助开发者了解问题是何时发生的,更可以了解到用户当时在做什么。这有助于确定应用中存在问题的区域,以便稍后进行解决。这其中一些状态是由一些 Jetpack 库自动提供的,但我们也鼓励开发者提供自己应用特定的状态。 报告结果: 在每一帧中,JankStats 客户端都会通过监听器收到包含该帧相关信息的通知,包括帧完成所用的时间、是否被视为卡顿,以及该帧显示期间的界面上下文是什么。我们鼓励客户端聚合和上传适合分析的数据,以帮助和调试整体性能问题。
在您的应用中添加日志
Tracing 库通过将跟踪事件写入系统缓冲区来启用应用性能分析。Tracing 1.1 支持对低至 API Level 14 的应用的非调试构建进行分析,类似于在 API Level 29 中加入的 <profileable> 清单文件标记。
Tracing
https://developer.android.google.cn/jetpack/androidx/releases/tracing
3. 界面库及指南
我们对界面库进行了一些更改,以更好地支持大屏幕兼容性、可折叠设备和 Emoji。
Jetpack Compose
了解窗口状态
https://developer.android.google.cn/jetpack/androidx/releases/window
拖放
https://developer.android.google.cn/jetpack/androidx/releases/draganddrop
移植新 API 到旧的 API Level
https://developer.android.google.cn/jetpack/androidx/releases/appcompat
自定义区域选择
https://developer.android.google.cn/about/versions/13/features/app-languages
其他关键更新
Annotation
Annotation 库公开了元数据,从而帮助工具和其他开发者理解应用的代码。它提供了一些我们耳熟能详的注解,如 @NonNull。这些注解与 lint 检查配对,可以提高代码的正确性和可用性。
Annotation
https://developer.android.google.cn/jetpack/androidx/releases/annotation
在 Github 上为 Jetpack 代码仓库做贡献
我们目前在 GitHub 上已有超过 100 个项目!
开发者可以向下列项目贡献代码,它们均基于 Github 的标准流程:
Activity
AppCompat Biometric Collection Compose Compiler Compose Runtime Core DataStore Fragment Lifecycle Navigation Paging Room WorkManager
查看 AndroidX 的发行说明: https://developer.android.google.cn/jetpack/androidx/versions 使用 API 选择器快速查找相关库:
https://developer.android.google.cn/jetpack/androidx/explorer?case=popular
观看 Google I/O 大会演讲以了解更多亮点:
https://goo.gle/IO22_AndroidDevs
您可以通过下方二维码或在文章底部私信,向我们提交反馈,分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!
* Java 是 Oracle 和/或其附属公司的商标或注册商标。
推荐阅读