在 2021 年早些时候举办的 Google I/O 大会上,咱们具体介绍了 Android Studio Arctic Fox 的次要性能,该版本目前曾经位于 稳定版 的公布渠道供大家下载应用。Android Studio Arctic Fox 次要聚焦于以下三个方面的改良:
- 设计 : Arctic Fox 是首个蕴含 Jetpack Compose 的反对工具及大量设计工具和查看器的稳固版本,从而让您能够更轻松地创立和预览界面。
- Android 设施反对 : Arctic Fox 蕴含大量针对 Android 设施的性能,如 Wear OS 上的心率传感器,以及反对 Google TV 的新版 Android TV 模拟器等性能。
- 开发效率改良 : 咱们对 Android Studio 的底层进行了改良,同时也带来了 WorkManager 工具,以帮忙开发者进步开发效率。
您可能曾经留神到,Arctic Fox 的继任者 Android Studio BumbleBee 目前曾经能够在 Beta 版 公布渠道下载应用了。咱们在这个版本退出了许多激动人心的改良,包含首次反对了 Material You、进一步优化了 Jetpack Compose 工具以及更多的开发效率改良,您还能够通过 BumbleBee 针对应用了 Android 12L 的大屏设施缩放您的利用。接下来,咱们将会为您具体介绍此版本的代表性能与改良,并带您一窥咱们为将来版本的 Android Studio 所开发的最新性能。
https://www.bilibili.com/vide…
△ Android Studio 新个性详解
构建相干
在体验 Android Studio 的新个性前,您可能须要先降级您的我的项目。您能够应用 AGP (Android Gradle Plugin) 降级助手来帮您实现这一工作。在导入您的我的项目时,您能够点击右下角呈现的 “Begin Update”,而后点击 “Show Usage”,此时,界面上将展现我的项目行将产生哪些变动。您能够间接承受这些倡议并运行导入。
△ 应用 AGP 降级助手对我的项目进行降级
构建配置缓存
在我的项目的 AGP 降级为最新版本后,咱们便能够开始构建我的项目了。在构建实现后,咱们能够关上 Build Analyzer 面板,并查看这里提供的一些倡议。在这些倡议中,咱们重点关注 Build Configuration (构建配置) 工夫。
咱们点击 “Optimize this”,并在随后的界面中点击 “Try Configuration cache in a build” 按钮,Android Studio 便会在启用配置缓存的状况下运行您的构建。这一过程会查看您的构建是否与配置缓存兼容——本例中是兼容的。点击 “Enable Configuration Cache” 按钮便可启用配置缓存晋升我的项目的构建速度。
△ 启用配置缓存
启用配置缓存的操作,实质上是在我的项目的 gradle.properties 文件中设置了环境变量 org.gradle.unsafe.configuration-cache=true
。在本例中,gradle.properties 文件中还设置了 android.enableJetifier=true
,这一环境变量用于将依赖库中的 Support 包迁徙为等效的 Android X 软件包。咱们打算在 Build Analyzer 中增加一个设置,用于查看是否有必要启用 Jetifier。您能够试着本人敞开 Jetifier,如果敞开后仍能够构建胜利,则能够缩小我的项目的构建时长。
反对非传递 R 类
另一个与构建相干的性能,是对非传递 R 类的反对。为了演示这一性能,我切换到了一个更大的我的项目——k-9 邮件利用。咱们首先点击 “Refactor”,而后抉择 “Migrate to Non-Transitive R Classes”。此操作将剖析整个我的项目,找到所有援用资源的源文件,并将它们从新编写为我的项目本地文件,与此同时还会在 gradle.properties 中增加 android.nonTransitiveRClass=true
来开启构建零碎中的特定设置。这将使构建可能跳过大量的资源合并,从而有助于进步性能。如果您的我的项目中蕴含大量的模块和资源,强烈建议您尝试这一性能。
Lint 增量缓存
无关构建速度的最初一个性能与 lint 无关。咱们常常从用户那里收到的一个申请,便是心愿 lint 在 CI 服务器上可能运行得更快。因而,咱们从 Bumblebee Canary 13 版本开始反对增量 lint 工作和缓存,其中也包含近程缓存。
咱们的 k-9 我的项目由大概 30 个模块组成,共约十万行代码,散布在约 1,100 个源文件中。在启用了缓存且没有对我的项目进行任何更改的状况下,咱们首先 clean 我的项目,以保障我的项目中没有任何 lint 报告。接下来咱们再次运行 lint,能够看到咱们的工作只用了几秒钟便从缓存导入了这些报告。
△ 模仿 CI 工作时,Lint 拉取了缓存
接下来咱们更进一步,对文件中的内容进行批改,这对于 lint 是一个新事件。再次反复后面的操作: 运行 clean,而后运行 lint (模仿 CI 的构建流程),能够看到,lint 工作只从新剖析了这个更改的模块,并再次导入了很多缓存的后果。与旧版 lint 须要三分半钟的工夫相比,当初咱们能够在 17 秒内看到这个我的项目更新后的 lint 报告。
界面卡顿追踪
既然咱们聊到了性能问题,那无妨看一下 Profiler。咱们目前还在进行最初润色的性能之一,便是在 Android Studio 中提供追踪卡顿的性能。卡顿是指界面跟不上帧率的景象。想要追踪卡顿,首先须要在 Profiler 中录制一个轨迹。
接下来咱们能够切换到 Frames 视图。当初在 Android 11 和 12 中能够捕捉帧的生命周期,如下图所示是捕捉到的帧。我将依照这些帧在利用中的持续时间对它们进行排序。
△ 在录制的轨迹中,帧时长排序后的后果
本例中,帧 1748 看起来十分迟缓。咱们选中它,就能够在窗格的左侧看到该帧的生命周期。这部分的显示应用了色彩编码,以后帧对应的色彩为紫色,在期待 GPU 和组合的地位显示了雷同的紫色条。咱们只有将视图放大一些,就能够看到它何时呈现在屏幕上。能够看到,前一帧在屏幕上停留了很长时间,这就是咱们说的卡顿。
△ 帧生命周期
下一步便是查看利用和渲染线程。咱们能够在界面中滑动抉择一个区域,就能够看到利用在此期间做了什么,从而找出卡顿的起源。我认为在这段录制中,利用试图同时加载一堆纹理,这就是导致卡顿的起因。
图形编辑器
咱们把关注的焦点从性能切换到图形编辑器。假如咱们有一个相机界面,上半局部是取景器,而下半局部则蕴含了一些图片的标签。咱们想要实现的是,当设施在横向和纵向之间挪动时,相机界面能够适当地旋转。
△ 本例中的相机界面
MotionLayout 旋转动画
咱们能够应用 MotionLayout 实现这一性能。相机有两种状态: 失常的纵向状态和横屏状态。咱们只须要在 MotionLayout 的 XML 文件中设置对应的 constraintRotate 属性;而后在 AndroidManifest.xml 中,锁定 Activity 的屏幕方向为纵向即可。
<ConstraintSet
android:id="@+id/portrait_L90"
motion:deriveConstraintsFrom="@id/landscape_left"
motion:constraintRotate="left">
</ConstraintSet>
△ 配置 constraintRotate 属性
您能够通过图形编辑器播放转换动画,来验证批改之后的成果:
△ 在图形编辑器中预览控件的旋转动画成果
嵌入式模拟器 & Device Manager (设施管理器)
您能够通过模拟器查看下面的代码在实在设施中的运行状况。咱们曾经将模拟器嵌入到 Android Studio 中,并花了一年工夫加强其稳定性并做了许多优化。从 Bumblebee 开始,嵌入式的模拟器将成为默认配置。在示例我的项目启动后,您兴许会留神到,当相机处于活动状态时,Android Studio 会给出如何在相机虚构场景中进行导航的提醒。咱们只需按住 Shift 键,就能够在模拟器出现给相机的虚构场景中挪动视角。
嵌入式模拟器也能够拜访所有扩大控件。例如,您能够设置导航路线、拜访虚构传感器等。在本例中,咱们能够扭转设施姿势来测试旋转屏幕成果。在下图中能够看到,随着我向一侧旋转设施,模拟器的界面也在更新,从而与传感器放弃同步旋转。
△ 通过扩大控件扭转设施姿势
模拟器进行这类操作还是稍显繁琐,若您想应用实体设施进行测试,便会用到另一个新性能——Device Manager。咱们移除了 AVD 对话框,并将设施集成到了 Device Manager 中。当初,模拟器中的虚构设施和计算机连贯的实体设施都会在这里集中显示。
咱们还在摸索一项性能,以便您更轻松地在 Design 界面中测试动画成果,而无需在实体设施上运行我的项目。在前文中,您曾经看到如何在 Design 界面中播放动画。如下图所示,您也能够在 Design 界面中旋转屏幕。这样就能够在编辑动画的同时测试动画。
△ 在图形编辑器中模仿旋转屏幕
Android 12L 屏幕适配 & Visual Linting
让咱们来看另一个布局。下图是一个欢送界面,咱们设置了将 “WELCOME” 音讯从边缘挪动到屏幕地方的动画成果。所以动画是从屏幕之外开始的。
△ 示例界面
Android 12L 新增了设施类的概念,其首要任务便是解决不同类型的大屏幕设施间的视图兼容性问题。Android Studio 的图形编辑器提供了许多参考设施。我将视图切换到平板电脑模式,能够看到 “WELCOME” 音讯并不在屏幕外,它在一开始就被显示了进去。这样我就能够晓得,该动画在大屏幕上的成果不佳。
本例中,我通过查看各种不同的屏幕尺寸发现了问题所在,但咱们并不心愿您每次都进行如此简单的操作。因而咱们在开发一项新性能,临时命名为 “Visual Linting”。点击正告按钮关上问题视图,能够看到这里提醒布局中的一个按钮被局部暗藏了。咱们能够查看不同的预览配置,如果一个视图显示在一个屏幕上,则最好也能显示在另一个屏幕上。咱们能够关上 Layout Validation 视图,并在这里查看各种屏幕尺寸上的布局;关上下方的问题视图,则会显示几种布局之间存在的不统一问题。
△ 查看不同屏幕尺寸下的布局
咱们再看一个更为理论的利用。下图是一个工作追踪器。关上问题面板,能够看到其中列出了发现的一些问题。咱们再次关上 Layout Validation 视图,查看一下这里的音讯。能够看到,第一条提醒咱们方才看到过的视图不统一问题,它同时还指出,只须要在较窄的布局中显示底部栏;另一个问题是,在十分宽的布局中,文本行中的字符数超过了 120 个,这会升高利用的易用性。最为要害的一点是,咱们不用亲自审查所有这些配置,Android Studio 会帮忙咱们在后盾查看。咱们还打算扩充查看的范畴,而不仅限于屏幕尺寸问题。例如,能够查看在特定的语言或地区区域是否存在意外的换行等等。
△ Visual Linting 会查看视图中的问题并给咱们提醒
Jetpack Compose
最初,咱们来谈谈同样很重要的 Compose。咱们在 Arctic Fox 中提供了对 Compose 的全面反对,但在 Bumblebee 中,咱们又为其增加了几个新性能。
交互式预览 & 动画查看
点击预览界面旁边的触摸图标,便会启动交互模式,启动过程通常不超过两秒钟。当初咱们就能够在 Design 界面中运行利用,并进行交互测试了。例如,我能够点击关上购物车、关上菜单等等。咱们能够应用此性能对利用进行一些简略的测试,而且此性能的启动和退出都很迅速。
△ 交互式预览
与此相关的另一个性能是动画查看反对。与交互模式相似,点击预览界面旁边的动画查看图标,就能够看到动画中所有动画曲线的视图。您能够拖动查看不同的动画,也能够循环播放这些动画。在须要调整某些曲线时,咱们能够通过这个办法很不便地查看动画是如何组合在一起的。顺便一提,在 Canary 版本中,预览注解旁会有一个配置图标,您能够通过该图标关上配置选取器,从而轻松地更改和配置预览。
△ 动画查看
字面量实时编辑
Compose 一个很重要的个性是可能在迭代界面、更改代码后能够立刻看到成果。然而,构建速度可能会对此造成很多负面影响,所以咱们正在开发一些性能来帮忙解决这个问题。其中一个性能便是字面量实时编辑,包含字符串、数字和布尔值。
以咱们的 Rally 理财利用为例。我能够间接更改利用中揭示对话框的文本。在下图中能够看到,在我进行输出时,预览简直是实时同步更新的。这对数字同样无效,例如,如果有必要,我能够将内边距改成很大的值。
△ 实时更新的文本批改
留神,此性能不仅实用于预览,其在实体设施上也能够失常工作。我能够像方才一样更改文本,同理也能够更改数字和布尔值。
远期布局
方才我向大家展现了 Arctic Fox 和 Bumblebee 中提供的性能,以及一些 Chipmunk 中处于开发阶段的性能。接下来,我将介绍一些咱们正在为这之后的版本开发的性能,让大家先睹为快。
Compose 实时编辑
首先是 Compose 实时编辑。此性能是前文展现的 “ 字面量实时编辑 ” 性能的泛化,它反对更多场景下的编辑需要,而不仅仅是批改常量和字符串。例如,咱们能够在预览中增加一个复选框,几秒钟后,就能够看到这个复选框呈现在界面中。
该性能同样不仅实用于预览。咱们晓得,对于 Compose 开发,在测试应用逻辑时,并排显示一个嵌入式的模拟器将会十分有帮忙。咱们正在让实时编辑性能在模拟器上也能工作。下图是咱们正在运行的 Compose 利用,咱们不仅能够像方才那样更改字符串,还能够正文掉界面的某些局部、从新排序,也能够更改参数 …… 能够看到,这些操作在编辑后的几毫秒内就能利用到界面上。
△ 实时更新的含糊状态
下面的示例顺带试用了 Android 12 中的含糊解决。咱们在布局预览和设计预览时均反对含糊成果。
这是一个很激动人心的性能。但咱们从 Instant Run 中汲取的教训是,在公布一项性能之前必须确保它十分牢靠。因而咱们要投入更多的工夫,确保此性能在纳入 Android Studio 时不会出错。
Light Mode (轻量模式)
下一个性能和前文所展现的性能齐全相同,这就是轻量模式。因为实时编辑性能的存在,在您输出的过程中,Android Studio 会进行大量计算,以尽可能疾速地实时显示更新后的界面;而如果应用了 Visual Linting,Android Studio 会在后盾运行剖析,以发现不同屏幕尺寸中的潜在问题,等等。通过轻量模式,您能够通知 IDE,您心愿它在您的应用期间缩小资源的耗费。
轻量模式是建设在 IntelliJ 节能模式之上的。在进入轻量模式后,前文展现的 Compose 实时编辑性能将不会再工作;而在关上布局 XML 文件时,也不会像通常那样默认显示拆分视图,而只是显示源文件。
而在轻量模式下编辑 Kotlin 文件时,将不会像通常那样执行各种常见且开销较大的编辑器验证,但您依然能够应用 “ 转到申明 ” 以及相似的根本编辑性能。如果我输出毫无意义的内容,通常状况下会产生红色的正告,但它当初不会这么做。而如果我保留该文件,会临时解除轻量模式的限度,这样您就能够取得所需的根本验证。
咱们正在优化 Android Studio 中的各项性能,以便在您处于轻量模式时适当地帮您缩小工作量。例如,布局编辑器将执行开销较小的图像缩放和抗锯齿等工作。咱们还在尝试禁用某些编辑器性能,就像在节能模式下一样。这些个性同样是处于晚期摸索阶段,但很有前景,心愿咱们会获得一些成绩。
总结
以上便是本文所介绍的全部内容,其中涵盖了 Android Studio BumbleBee 版本所聚焦的三个方向的改良,包含 Jetpack Compose、开发效率优化以及 Android 12L 大屏幕设施的适配。
咱们还为您介绍了 Chipmunk 版本中行将公布的最新性能。除了前文介绍的内容外,该版本还退出了 IntelliJ IDEA 2021.2 中所蕴含的新性能、为 Android 12L 所提供的可调整大小的模拟器等许多性能。受篇幅所限,不能一一为您介绍。如果您对这些新性能感兴趣,能够下载试用 Chipmunk,并通知咱们您的感想。
期待您应用 Android Studio,并发明出体验杰出的利用!
欢迎您 点击这里 向咱们提交反馈,或分享您喜爱的内容、发现的问题。您的反馈对咱们十分重要,感谢您的反对!