# 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)