Google I/O 2018 大会,被开发者吐槽,不要老是搞那么多新特性,而应该多关注Android Studio的质量和稳定性。所有一直都有一些梗:垃圾软件,毁我青春。
于是从Google I/O 2018 大会后,Google启动了对Android Studio专项工程:代号磐石(Project Marble),预意为专注于使集成开发环境(IDE)的基本特性和流程坚如磐石。磐石项目主要集中在三个核心领域:系统健康、功能优化和线上bug修复。下面鱼哥分开展示这个领域
系统健康—内存
对于鱼哥是最早使用Android Studio工具的,那时还是在14年,虽然13年Studio就诞生了,但是几乎没人用。很多人还在用Eclipse开发,我已经切到Android Studio上了,它的前身是IntelliJ IDEA。但是吃内存一直是Android Studio的显著特点,打开2个以上工程时,IDE的运行速度非常慢。这种体验背后的原因是由于意外地达到内存压力或IDE内存泄漏,Google团队对这个痛点,从18年I/O大会后,作为专项,深入研究了这个领域,截至到19年I/O大会前,已经解决了超过33个有影响的内存泄漏问题。他们主要是通过大量质量监控,当内部仪表板上持续测量内存不足异常,分析背后堆栈数据,从Android Studio 3.5开始,当IDE耗尽内存时,会捕获一些关于内存堆大小和堆中主要对象的高级统计信息。有了这些数据,IDE可以做两件事:建议更好的内存设置和提供更深入的内存分析。
系统健康—自动推荐内存设置
默认情况下,Android Studio的最大内存堆大小为1.2 GB。对于很多大项目来说,这个数量可能不够。即使你的机器有大量RAM, IDE也不会超过这个值。在Android Studio 3.5中,IDE会识别出一个应用程序项目在内存容量更高的机器上什么时候需要更多内存,并在通知中通知你增加内存堆大小。另一种方式,你也可以在Appearance & Behavior → Memory Settings的新设置面板中进行调整。
系统健康—内存堆分析报告上报
有时很难捕获和重现内存问题并将其报告给Android Studio团队。为了解决这个问题,Android Studio 3.5允许开发者触发一个内存堆转储(Help → Analyze Memory Use),IDE会对个人数据进行本地清理、分析并创建一个报告。开发者可以上报这个内存使用报告给Android Studio开发团队,以排除性能问题。
系统健康状况-异常监控
通过修改异常上报通道,可以更早定位和发现开发者常见异常的信号。在canary发布过程中比以前更早地确定优先级并修复问题。减少IDE中闪烁的红色异常报告图标。
系统健康—用户界面冻结
用户界面(UI)冻结,一直是大家吐槽的问题。表现为假死,无响应,输入后,半天才反应。很是揪心。在Android Studio 3.5中,Google扩展了底层Intellij平台的基础设施,通过在不断使用Android Studio时,对开发者经常使用的区域有一个更大的了解,以便集中精力解决冻结问题。例如,在磐石项目开发期间,Google团队在数据中发现IDE中的XML代码编辑速度明显较慢。有了这个数据点,Google团队优化了XML类型,并在Android Studio 3.5中获得了更好的性能。从在下面两张图可以看到,由于输入延迟的改进,用XML编辑数据绑定表达式更快。
Android Studio 3.4
Android Studio 3.5感受下
系统健康—构建速度
Build速度,一直是个蛋疼的操作,每次鱼哥Build时,都想死。尤其我们工程代码量又多。搞个7-10分钟,真是改一行代码,都会醉了。但是影响Build速度的因素实在太多了,比如是否有之前编译的缓存。要是你重新clean 工程,然后rebuild,那简直要命。所以除非不得已,才去clean工程。在Goolge磐石项目中,通过向顶级注释处理器添加增量构建支持来提高速度,这些处理器包括Glide、AndroidX数据绑定、Dagger、Realm和Kotlin (KAPT)。增量支持可以对构建速度产生显著影响。例如,在初步分析中,仅为Kotlin添加增量支持就将谷歌I/O schedule应用程序的非abi子模块更改从9.1秒提高到了3.6秒——提高了60%。
系统健康-IDE速度
过去,鱼哥和大家一样,觉得IDE运行慢时,就关闭一些Android Studio插件,比如Android NDK支持,以提高性能,让他为鱼哥更高效使用。这一次,Android Studio 3.5开始,Google团队删除了一些不必要的performance hotspots,因为这些performance hotspots之前影响了IDE的整体速度。
系统健康-Lint代码分析
Lint代码分析,大家不陌生吧,昨天鱼哥在公司用这个扫描一些提示错误和无用文件时,还有可能会出现的空指针情况,非常方便。Android Lint是Android Studio中的一个代码分析框架,可以帮助识别常见的编程错误。但是鱼哥的工程一般都是有c/c++的,每次分析时,相当慢。大概20-30分钟。这严重影响了我的热情。Google团队经过一些挖掘,在Android Studio 3.5后,发现并修复了几个较大的内存泄漏,导致Lint性能提高了大约2倍。不信你可以试一试。
系统健康—Windows系统的I/O文件访问
Android Studio的许多用户都使用微软Windows。随着日复一日的使用,构建时间和安装速度越来越慢。Google团队发现一些杀毒程序将Android Studio build和installation directory作为活动扫描目标。由于这些文件夹会随着时间的推移创建和删除许多小文件,I/O和CPU会被部分占用,从而影响Android Studio的总体build/sync性能。所以关闭杀毒软件,也是可以提高Android Studio运行的效率。下面这个图就是关闭杀毒软件前后对比。
系统健康检查
从Android Studio 3.5开始,IDE将检查各种可能受此放缓影响的目录,包括项目构建目录,并将它们与排除在外的杀毒目录列表进行比较。如果Android Studio发现不一致,你将看到一个弹出通知和链接,以引导你完成最佳设置。
系统健康状况-模拟器CPU使用情况
鱼哥自从对Android Studio的模拟器太难用的定位后,就一直很少用自带的模拟器。比如我一般用Genymotion。要么就是真机。从Android Studio 3.5之后,Google团队经过研究发现,Android模拟器占用了过多的CPU周期,即使在模拟器处于空闲状态时,也会触发笔记本电脑上的冷却风扇。在大量分析数据后,发现Google Play Services和相关服务在后台积极运行,因为默认情况下模拟器设置为AC充电而不是电池放电。我们将默认值切换为电池放电,后台CPU使用量下降了3倍多。所以以后,可以大胆放心用起来。
接下来就是第二部分,功能优化
Apply Changes
能够在不重启应用程序的情况下快速编辑和查看代码更改,这对于应用程序开发非常高效。比如鱼哥改了个Java某行代码,可以通过Apply Changes,然后Run。两年前,Google尝试使用Instant Run机制来解决这个痛点,但一直效果未能达到预期。在Android Studio 3.5中重新构建并实现了一个更实用的方法,叫做Apply Changes。Apply Changes使用Android Oreo及更高版本的特定于平台的api,以确保可靠和一致的行为;与Instant Run机制不同,Apply Changes更改不修改APK。为了支持这些更改,Google团队重新设计了整个部署管道的架构,以提高部署速度,还调整了run和deployment工具栏按钮,以获得更流畅的体验。
Sync重编译
明明项目没有问题,也可以编译运行到手机上,就是在应用程序代码中有红色符号,很蛋疼,这个估计很多人和鱼哥一样都遇到过,解决办法就是重新gradle sync下。出现的许多红色符号事件的根本原因是,在最近的Gradle更改中,为了节省硬盘空间,这些缓存被定期删除了。从Android Studio 3.5后,Google团队增加了检查这种状态的条件逻辑,以后类似的情况会很少了。
Android Studio升级
目前的Android Studio不是一个无缝的过程,因为它应该是围绕修复gradle插件错误的许多问题。在Android Studio 3.5中,我们更新了输出窗口、弹出窗口和对话框的用户体验,以帮助开发者明确何时真正需要升级。在最近的几个版本中,IDE和gradle插件实际上可以独立地更新。下面是Android Studio的迭代过程
Layout Editor
Google改进了从约束选择和删除到更好的设备预览调整大小等一系列交互。
Android Studio 3.4
Android Studio 3.5
Data-Binding
Google团队研究了长期存在的数据绑定问题。从性能的角度来看,发现在XML文件中创建数据绑定表达式会导致代码编辑器严重挂起。修复了这个问题之后,改进了代码补全、导航和重构。
应用程序部署流程
简化了部署流程,添加了一个新的下拉菜单,可以方便地查看和更改要部署到的设备,以及一个要部署到多个设备的新菜单项。这点鱼哥体会就是像iOS的XCode工具一样了
c++的改进
对于鱼哥来说,这个c++的改进,算是喜大普奔了,c++项目支持也是项目Marble中的一个重点领域。对于大型项目,CMake构建现在要快25%。此外,一个改进的单一构建变量用户界面面板,它允许开发者单独指定ABI架构目标。最后,Android Studio 3.5允许在构建中并排使用多个版本的Android NDK的Grale版本,这就意味着多重构建,并减轻NDK版本和Android gradle插件之间的不兼容性。
Intellij平台更新
Android Studio 3.5开始,更新了2019.1 Intellij平台版本的特性和质量增强。2019.1 Intellij的更新从定制主题到更好的版本控制系统集成都有一系列的改进。
动态特性支持
Android Studio 3.5增强了对应用程序包特性的支持,为应用程序包添加了动态特性支持。开发者可以根据硬件特性(如OpenGL版本、对AR的支持)设置条件交付,或者根据API级别和用户国家设置条件。
模拟器折叠和Googel Pixel设备支持
这个IDE版本包括Pixel 3a和Pixel 3a XL的Android模拟器皮肤。此外,Android Studio支持创建可折叠的Android虚拟设备。
Chrome OS支持
Android Studio 3.5现在正式支持Chrome OS 75操作系统,更高版本支持基于x86的高端chromebook操作系统。比如在Chrome OS上,一个Android Studio的安装程序,支持应用程序部署到外部USB连接的Android设备上。
最后一部分线上Bug修复就非常多了,看看这些bug,给个链接:https://source.android.com/source/report-bugs#developer-tools,大家有bug,也可以去提。