Android Studio 3.5最新特性

2019-08-22 19:14:21

参考文档 Android Studio 3.5新特性


在今天(美国时间8月20日)的早些时候,Android Studio(以下简称为AS) 3.5正式版终于发布了,从第一个bate版本发布到正式版本,历时三个半月。AS一直以来被开发者吐槽,因此谷歌也放慢了版本的变化,对测试版本进行大力度的优化,提高了稳定性。从3.3版本开始,谷歌启动了名为Project Marble的计划,意为谷歌团队致力于使集成开发环境(IDE)的基本功能和流程变得坚如磐石,同时精炼和完善面向用户的功能。而AS 3.5则是Project Marble主要成果的版本,下面来介绍主要成果。


Project Marble:系统健康

推荐的内存设置


如果AS检测到可以增加操作系统为AS进程分配的最大RAM(例如IDE,Gradle守护程序和Kotlin守护程序)来提高性能,那么AS将会弹窗提示,如下图(图片来自官方文档)




当然你也可以通过菜单打开配置,路径File > Settings(mac: Android Studio > Preferences),可以在Appearance & Behavior > System Settings中找到Memory Settings的配置选项。




内存使用报告


AS的内存问题有时难以重现和报告,为帮助解决此问题,在AS 3.5中可以通过菜单栏中的Help > Analyze Memory Usage来生成内存使用情况报告,点击之后会自动生成报告,提示重启AS。重启完毕后,会显示内存使用报告,你可以发送报告给AS团队,以分析使用问题。内存报告如下图




Windows:杀毒软件导致的IO问题


大部分开发者用的是Windows系统,而杀毒软件的文件扫描系统会实时扫描新文件。在AS构建项目时,Gradle会编译程序的资源和源代码,然后将编译后的资源打包在一起,在此过程中,会生成大量的文件,如果杀毒软件进行扫描会严重降低构建速度。所以可以关闭杀毒软件提升速度(不建议),或者把AS的一些目录添加到杀毒软件实时扫描的忽略目录。有这些目录


Gradle缓存目录:%USERPROFILE%(用户目录)\.gradle


Android SDK目录


Android项目目录


Android Studio目录


Project Marble:特色功能改进

Apply Changes


为了能不重启应用就使修改的代码和资源生效,以前推出了Instant Run,但是效果并不好,AS 3.5则推出了Apply Changes,与Instant Run重新编写APK的字节码技术不同,Apply Changes是通过利用Android 8.0(API级别26)或更高版本中支持的 Android JVMTI(https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#bci)技术。所以如果想使用Apply Changes有两个条件:


Apk必须是debug包

必须在Android 8.0以上的手机上运行

Apply Changes按钮在菜单栏上,在运行的右侧新增两个按钮,如下图(图片来自官方文档)




Apply Changes and Restart Activity:尝试通过重新启动活动但不重新启动应用程序来应用资源和代码更改。如果有代码和资源的修改可以使用这个来使代码和资源即时生效。


Apply Code Changes:尝试仅应用代码更改而不重新启动任何内容。如果只有代码修改,可以使用这个来使代码生效。如果修改了代码和资源,请使用“Apply Changes and Restart Activity ”。


当使用Apply Changes失败时,AS会提醒是否重新运行应用,如果不想AS进行提醒而在失败时直接重新运行应用,可以打开File > Settings(mac: Android Studio > Preferences),在Build, Execution, Deployment > Deployment中选择两个复选框即可。需要注意的是如果是修改了onCreate中的代码则必须重启应用修改才可生效。


应用部署流程


AS 3.5新增了一个下拉菜单,可以直接选择需要部署的机器。而且菜单中还包含一个选项,可以同时部署到多台设备。下拉菜单如下图




部署到多设备如下图




改进了Gradle同步和缓存检测


在以前的版本中,AS会定期清理下载的依赖项,可能会导致Sync失败,而AS 3.5版本改进了这个策略,更好地确定Gradle清理缓存的实际,减少同步失败的情况发生。


改进了构建错误输出日志


在新版本中,在build时为以下的构建过程提供了更好的错误报告,例如指向文件的链接和报告错误的行:


AAPT编译和链接

R8和ProGuard

Dexing

资源合并

XML文件解析

Javac,Kotlinc和CMake编译

项目升级


改进了更新体验,提供了更多信息和操作,可以更好的更新IDE和Android Gradle插件。例如,如果出现错误,现在会有更详细的同步和构建错误日志。


现在可以独立的更新IDE而不影响其他的功能,例如Android Gradle插件可以在以后进行更新。


布局编辑器


AS 3.5对布局的可视化,管理和交互做了一些改进。


例如在使用ConstraintLayout布局时,属性面板里的约束显示了所有的约束关系,可以直接进行选择 。如下图(图片来自官方文档)




同时也可以选择一个约束,然后点击Delete键进行删除约束。也可以按下Ctrl(mac:command)键,然后点击一个约束进行删除。当按下Ctrl(Command)键时,鼠标悬停在约束上时,任何与之关联的约束都会变为红色,表示可以点击该约束进行删除。


选择视图后,可以通过单击属性面板的约束小组件部分中的任何+图标来创建约束,如下图(图片来自官方文档)。创建新约束时,布局编辑器现在突出显示约束,提供即时的可视反馈。




现在创建约束时,布局编辑器仅显示可以约束的合格锚点。而在以前的版本中,无论是否可以约束它们,布局编辑器会突出显示所有视图上的所有锚点。此外,在约束的目标会突出显示蓝色叠加层。如下图的对比


在AS 3.4中的表现




在AS 3.5中的表现




除上述更新外,AS 3.5还包含以下布局编辑器的改进:


该 Constraint Widget和margin下拉选项中会有dimens资源选项。

在布局编辑器的工具栏中,设备列表数据以及更新。此外,调整设备大小时的行为改进,现在调整设备大小的操作手柄始终可见。在调整大小时,会出现显示常见的各种设备的叠加层。

现在布局编辑器有新的配色方案(变浅了),提高了一致性并降低组件,文本和约束之间的对比度。

蓝图模式包括了对未显示文本的某些组件的文本支持。

Data Binding


此版本中,除了为数据绑定添加了增量处理支持之外,而且在XML中创建data binding表达式时改进了智能编辑器功能和性能。


在3.4版本中的效果




在3.5版本中的效果




改进了对C / C ++项目的支持


AS 3.5包含一些改进,对C / C ++项目更好的支持,对一些大型项目,大大提高了编译的速度。


对Build Variants面板改进


您现在可以在Build Variants面板中指定Active Build Variant和Active ABI 。这个功能简化了每个模块的构建配置,还提高了Gradle同步的性能。




并行的NDK版本


现在可以并排使用多个版本的NDK。这个功能在配置项目时提供了更大的灵活性: 例如,如果项目在同一台计算机上需要使用不同版本的NDK就会很方便。


如果使用了Android Gradle Plugin3.5.0或更高版本,还可以指定项目中每个模块应使用的NDK版本。可以使用这个功能创建可重现的构建,并减轻NDK版本与Android Gradle插件之间的不兼容性。


Chrome OS支持


AS现在正式支持Chrome OS设备,可以在下载页面下载相应的版本。


动态特性支持


AS 3.5 增强了对应用程序包特性的支持,为应用程序包添加了动态特性支持。开发者可以根据硬件特性(如OpenGL版本、对AR的支持)设置条件,或者根据API级别和用户国家地区设置条件。新建module时选择Dynamic Feature Module并点击Next就会出现如下图所示的选项,具体的详细配置可以参考https://developer.android.com/studio/projects/dynamic-delivery/conditional-delivery




IntelliJ IDEA 2019.1


AS 3.5的IDE已经更新了IntelliJ IDEA到2019.1的版本,关于IDEA2019.1版本的详细更新可以参考这个链接


Android Gradle plugin 3.5.0


随着AS 3.5的发布,Android Gradle plugin也更新到了3.5.0,关于plugin的更新内容可以参考这个链接


那么,现在升级到3.5.0吧,可以在AS内进行增量更新,也可以下载最新安装包重新安装。下载地址https://developer.android.com/studio#downloads



  • 2019-11-19 01:24:01

    使用JAVA8 filter对List多条件筛选

    记录项目开发的过程中遇到的一些问题及解决方法,由于公司操作数据库都是统一使用工具生成的存在一些多表查询模糊查询,这些操作只能在集合方面下手了,比如发送邮件记录方面查询,对用户的名字及邮件模糊检索 年龄匹配查询。

  • 2019-11-21 18:13:08

    如何在vue单页应用中使用百度地图

    百度开发者平台已经封装了基于vue的地图组件,详细使用,请参考官网: https://dafrok.github.io/vue-baidu-map/#/zh/start/installation 网上有一些是直接在index.html页面全部引用的,本人强烈反对此种使用方式,因为我们项目是组件化的单页应用,强行引入多页应用的开发方式,会破坏整个项目的框架,严重影响性能。有些甚至还在vue单页应用中引入jquery,感觉这都是一些反人类的骚操作,不到万不得已,不建议使用。

  • 2019-11-25 17:04:10

    Throttle 和 Debounce 的本质及一个简单的实现

    Throttle,Debounce 就不把这两个词翻译成中文了,直接解释他们的概念。实际上这两个东西本质上是一样的,作用都是「为了避免某个『事件』在『一个较短的时间段内』内连续被触发从而引起的其对应的『事件处理函数』不必要的连续执行」。那么区别在哪呢?

  • 2019-11-25 17:05:44

    js实现 throttle 和 debounce,节流,防抖详解

    throttle 节流:drag改变浏览器大小,触发onresize函数,实现拖动每过1秒输出一次,不足1秒,1秒后输出一次。多用于高频操作,如抢票、抢购等,无论点击多少次,只固定间隔执行一次,以减轻压力。debounce防抖:drag改变浏览器大小,触发onresize函数,实现拖动停顿1秒输出。多用于输入框,当某一次输入后停顿满n秒才会去触发远程搜索。

  • 2019-11-25 17:37:01

    百度地图GeoUtils示例

    百度地图JavaScript开源库,是一套基于百度地图API二次开发的开源的代码库。目前提供多个lib库,帮助开发者快速实现在地图上添加Marker、自定义信息窗口、标注相关开发、区域限制设置、几何运算、实时交通、检索与公交驾车查询、鼠标绘制工具等功能。