# Android Studio 3.0 新功能
我们项目目前用的是2.3.3,已经有很长一段时间了。因为3.0刚出来的时候,网上踩坑的特别多,而我们又刚好在紧张的封闭开发状态中,所以没有去折腾。经过一段时间修BUG,3.0(实际上是3.1)已经趋于稳定,我们也要着手升级我们的IDE,来享受一下更加强大/现代化的功能。由于我们是直接从2.3.3升级到3.1-RC1,所以也不逐个版本介绍了,这里统称为3.0。
Android Studio 3.0 是一个重大的版本,包括了很多新功能和大的改动。其中有些是我们项目中可能不会用到的,譬如Android Things、Instant App等等,这些内容大家可以上官方网站或者官方博客进行查看,这个文档的目的是为了能**让大家快速了解并且上手与我们项目开发息息相关的内容**。
升级到3.0的过程没什么好说的,首先要升级某些使用了旧版本gradle插件方法的第三方gradle插件,譬如我们项目里面的butterknife和tinker; 注意一下`implementation`和`compile`的差别,然后该补引用的补,该改成`api`的就改,其他编译不通过的根据错误日志基本可以通过禁用D8编译器和aapt2来解决。只是新版本的报错信息位置跟2.3.3有点不一样,以前的gradle console窗口被整合到build窗口里面,通过侧边的按钮来切换。
## 编译速度提升
这个是老生常谈了,每个版本都提到x%的提升,结果大家都有目共睹。但是3.0使用了全新的关键字`implementation`,可以减少一些不必要的编译,从而提升速度,经过一段时间测试,在日常开发中还是感觉得到的。具体不展开说明,可以查看官方说明。
## Kotlin语言支持
终于!......千呼万唤始出来。自从Kotlin被宣布成为android开发的官方语言后,大家对Kotlin的兴趣就越来越大,都希望在项目中可以使用,现在,终于加进项目啦!相信各位对Kotlin的语法、特性等等都了解得差不多了,虽然目前我们没有强制使用Kotlin的计划,但大家也是可以开始尝试使用Kotlin了。
特别说明,在正式使用Kotlin前,先通过Kotlin官网的[一份语法测试](http://try.kotlinlang.org/koans)。
## Java8部分特性支持
虽然Kotlin已经包含很多更加现代化的特性,但目前项目中的主力语言还是Java。在未来一段时间里面,我们大部分人还是用Java开发为主。所以能够使用上更加先进的特性,对我们编写更安全更简洁的代码有非常大的帮助。下面我们来看一下如何使用Java8的新特性。
首先,在项目中要使用到或者间接使用到(依赖库使用了)Java8特性的module的gradle配置文件中增加以下声明:
android {
...
// Configure only for each module that uses Java 8
// language features (either in its source code or
// through dependencies).
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
支持的特性:
* **lambda表达式**
简单来看,可以当作是单个方法的接口/抽象类的简洁实例化形式,但实际作用远不止此。关于lambda表达式的前世今生,有兴趣大家自己去搜索一下。在这里只作简单展示:
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
...
}
});
以上是一个十分常见的监听器设置,看起来比较繁琐,通过使用lambda表达式,可以简化成以下形式:
button.setOnClickListener(() -> {
...
});
其他语法在数据绑定的时候也提过一二,具体介绍请看[官方指南](https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#syntax)
* **方法引用**
方法引用实际上是一种更加简洁更具可读性的lambda形式,同样数据绑定的时候已经提到过,通过`::`双冒号语法获得方法的引用,例如:
button.setOnClickListener(presenter::onClick);
具体的介绍和语法请看[官方指南](https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html)
* **类型注解**
在编写依赖库的时候比较能用得上,有兴趣的请看[官方指南](https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html)和[示例](https://docs.oracle.com/javase/tutorial/java/annotations/basics.html)
* **接口默认方法**
* ......
## 拖控件
……
## 窗口变化
* **Layout Inspector**
UI的debug神器,从Tools-Android-Layout Inspector搬到Tools-Layout Inspector,三级菜单变成二级菜单,但是之前在monitor侧边的小按钮入口也没了。功能也有所增强
* **Android Monitor拆分为Logcat和Profiler**
* **gradle console窗口被整合到Build窗口中**
以前Event Log旁边,查看gradle当前任务进度和状态的控制窗口,现在被放到Build窗口中去了,而且还不是默认视图,需要点击Toggle view来切换出来。 Build的默认视图确实更加友好,只是有时候问题的原因没有很清晰的展现。
* **文件管理器**
现在可以在Android Studio上直接查看连接设备的文件系统,一个曾经消失了几个版本的功能,现在以一个全新的面貌回归
* **......**
大家去发掘
## Android Profiler
Android Studio 3.0使用Android Profiler替换了Android Monitor。 相比旧版本性能分析器,Android Profiler增加了直观的事件显示,包括页面打开,触摸、按压事件等等行为,更加友好的让我们看到App当前的状态和性能问题发生时的场景。更多请查看[官方文档](https://developer.android.com/studio/preview/features/android-profiler.html)