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-08-19 15:50:17

    记录PHP的进程和线程理解

    线程是进程的一个执行流,线程不能分配系统资源,它是进程的一部分,比进程更小的独立运行的单位。 解释一下:进程有两个特性:一是资源的所有权,一个是调度执行(指令集),线程是调度执行中的一部分,是指进程执行过程的路径,也叫程序执行流。线程有时候也叫轻量级进程。

  • 2019-08-20 08:51:52

    一台Linux服务器可以负载多少个连接?

    我们在压测一台目标服务器,想看下负载的连接数,当我们压到一定数量的时候,控制台突然报"too many open files",这是因为linux系统创建一个TCP连接的时候,都会创建一个socket句柄,每个socket句柄就是一个文件句柄。

  • 2019-08-20 08:56:42

    Linux下Http高并发参数优化之TCP参数

    Linux 内核参数考虑的是最通用场景,并不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数。其次,对 Nginx 的一些参数,也需要根据服务情况进行调整。

  • 2019-08-20 11:05:30

    php,nginx,线程和进程分析

    大多数的 Linux 程序都倾向于使用进程而不是线程,因为 Linux 下相对来说创建进程的开销比较小,而 Linux 的线程功能又不是很强大。

  • 2019-08-20 11:22:36

    Node.js 单线程与多进程比较

    进过上面两种方式的对比,结果很明显,多进程处理速度是单线程处理速度的 4 倍多。而且有条件的情况下,如果电脑 CPU 足够,进程数更多,那么速度也会更快。

  • 2019-08-22 13:35:27

    Generator函数的语法

    执行Generator函数会返回一个遍历器对象,也就是说,Generator函数除了是状态机还是一个遍历器对象生成函数。 返回遍历器对象,可以依次遍历Generator函数内部的每一个状态。

  • 2019-08-22 16:38:15

    理解JS原型对象与原型链(重要清晰)

    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象对应拥有一个原型,对象以其原型为模板、从原型继承方法和属性。而同时原型也是对象,它也拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。