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



  • 2018-02-06 22:23:01

    HTML5 Canvas 的事件处理

    DOM是Web前端领域非常重要的组成部分,不仅在处理HTML元素时会用到DOM,图形编程也同样会用到。比如SVG绘图,各种图形都是以DOM节点的形式插入到页面中,这就意味着可以使用DOM方法对图形进行操作。比如有一个<path id=”p1″>元素,可以直接用jquery增加click事件$(‘#p1’).click(function(){…})”。然而这种DOM处理方法在HTML5的Canvas里不再适用,Canvas使用的是另外一套机制,无论在Canvas上绘制多少图形,Canvas都是一个整体,图形本身实际都是Canvas的一部分,不可单独获取,所以也就无法直接给某个图形增加JavaScript事件。

  • 2018-02-09 01:32:48

    PHP时间戳和日期相互转换

    在php中我们要把时间戳转换日期可以直接使用date函数来实现,如果要把日期转换成时间戳可以使用strtotime()函数实现,下面我来给大家举例说明。

  • 2018-02-09 02:57:46

    如何防止多次打开Activity?

    android:launchMode="singleTask" 加上这句,每次打开如果已有此activity,就会打开原来的实例,否则会创建新的activity​

  • 2018-02-17 18:51:26

    Context都没弄明白,还怎么做Android开发?

    作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明。

  • 2018-02-17 23:33:20

    NestedScrollView+Recyclerview下滑卡顿解决方法

    大家在进行安卓开发用到NestedScrollView+Recyclerview的时候,经常出现的情况就是加载下滑的时候没有任何问题,很流畅,但是在下滑以后明显出现了卡顿的情况,小编根绝这个问题,给大家再来的解决方法,一起来学习下。

  • 2018-02-23 14:15:42

    mysql的取整函数

    ROUND(X) -- 表示将值 X 四舍五入为整数,无小数位 ROUND(X,D) -- 表示将值 X 四舍五入为小数点后 D 位的数值,D为小数点后小数位数。若要保留 X 值小数点左边的 D 位,可将 D 设为负值。