Android Studio 4.0 Canary 新機能

※ 2019/11/10 [Canary2] Live Layout Inspectorについて追記、ほか微修正
※ 2019/11/21 [Canary3,4] Build Speed window, Multi Preview, enableSeparateAnnotationProcessing option removedについて追記、ほか微修正

# はじめに

[Android Studio 4.0 Canary](https://developer.android.com/studio/preview) が出たので、個人的に気になった新機能をまとめました。

- 参考
  - [Android Studio 4.0 Canary 1 available](https://androidstudio.googleblog.com/2019/10/android-studio-40-canary-1-available.html)
  - [Android Studio 4.0 Canary 2 available](https://androidstudio.googleblog.com/2019/11/android-studio-40-canary-2-available.html)
  - [Android Studio 4.0 Canary 3 available](https://androidstudio.googleblog.com/2019/11/android-studio-40-canary-3-available.html)
  - [Android Studio 4.0 Canary 4 available](https://androidstudio.googleblog.com/2019/11/android-studio-40-canary-4-available.html)
  - [What's New in Android Studio (Android Dev Summit '19)](https://youtu.be/XPMrnR1_Biw)

# Jetpack Compose のサポート
Jetpack Compose に対応しました!!
IDE上でプレビューを見ることができるので、確認しながらサクサク書けます。

Jetpack Composeって?? という方は[こちら](https://developer.android.com/jetpack/compose/)
<img width="1440" alt="スクリーンショット 2019-11-04 15.16.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/33880040-6824-c7cc-bc40-1db75dc70342.png">

詳細はこちら : https://youtu.be/XPMrnR1_Biw?t=876

# Java8のAPIがminAPIに依存せず使えるように
minimum API Levelに依存せず、Java8のAPIが一部利用できるようになりました。
(本筋から外れますが、java.time めっちゃ便利そうですね)

**<例>**

- (前提) minSdkVersion=21を指定して`java.time`を使用するとエラーが出ます。
<img width="637" alt="スクリーンショット 2019-11-04 15.44.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/c998d73d-2a71-8998-f9b8-0827a23d6869.png" width=50%>

- build.gradleに下記を追加します。

```:build.gradle
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    coreLibraryDesugaringEnabled true // <- これ
}
```

- エラーが消えました :raised_hands:  
<img width="550" alt="スクリーンショット 2019-11-04 15.44.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/8220cc75-dd10-6665-fe79-365bcc6e7307.png" width=50%>

- もちろんちゃんと動きます :thumbsup: 
<img width="360" alt="スクリーンショット 2019-11-04 16.11.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/d8872032-acc1-2fc8-1fd0-074b6fae5d11.png">

詳細はこちら : https://youtu.be/XPMrnR1_Biw?t=645

# Motion Editor
アニメーションが簡単に作れるようになりました。
IDE内でアニメーションが確認できるのはいいですね。

あとxmlとレイアウトを並べて見られるようになったのが地味に嬉しいです :smiley: 
<img width="1440" alt="スクリーンショット 2019-11-04 18.29.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/08ee9390-ce10-76fd-3094-7bfe0669a878.png">

**<例>**

- build.gradleに`constraintlayout:2.0.0`を追記します。

```:build.gradle
dependencies {
    ...
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta3' // 20191104の最新
    ...
}
```

- xmlファイルプレビューで右クリック -> Convert to MotionLayout を選択します。
(直接、MotionLayoutで書き始めることもできます)
<img width="1440" alt="スクリーンショット 2019-11-04 18.09.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/9913df00-e1e5-cf59-f63d-4e20608c8be7.png">  


- start と end の状態(position, alpha, ...)を設定します。完了です。簡単 :v:
<img width="1440" alt="スクリーンショット 2019-11-04 18.20.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/44393709-53b9-c2a6-7cad-5c6c3eda3dce.png">
<img width="1440" alt="スクリーンショット 2019-11-04 18.20.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/cd0b6e1d-25b2-f987-75b1-5b183698f16c.png">

- アニメーションファイルは`res/xml/[レイアウトファイル名]_scene.xml`へ自動で作成されるので、こちらのファイルを直接編集することもできます。
<img width="1440" alt="スクリーンショット 2019-11-04 18.29.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/7528d048-7af4-535c-67d4-a299f216c255.png">

詳細はこちら : https://youtu.be/XPMrnR1_Biw?t=1338

# Kotlin Live Templates
KotlinのLive Templateが追加されました。
Preferences -> Editor -> Live Templates から確認できます。(AndroidKotlin, AndroidLogKotlin)
<img width="1552" alt="スクリーンショット 2019-11-04 20.54.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/171eb60d-d4cf-07a0-840c-68cfb0a76ec6.png">

**<例>**

- `logt`と打ってタブを入力すると、ログ用のタグが自動で補完されます。
<img width="887" alt="スクリーンショット 2019-11-04 19.41.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/1cb561b6-b996-fe2d-86b2-d80593b96ea4.png">
<img width="732" alt="スクリーンショット 2019-11-04 19.41.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/922e271a-d910-34d3-1ccc-d8c1848f0f71.png">


- `logm`と打ってタブを入力すると、メソッド名と引数を出力するログが自動で補完されます。 
~~(Canary1だと、なぜか期待動作にならない... :thinking: )~~ → Canary2で期待動作になりました!!
<img width="948" alt="スクリーンショット 2019-11-10 19.18.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/196f8c8c-ee67-1cd3-5948-6d3e6c8fccb3.png">
<img width="959" alt="スクリーンショット 2019-11-10 19.18.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/95ba051d-411e-c1ca-93b5-d21c8a585967.png">


詳細はこちら : https://youtu.be/XPMrnR1_Biw?t=1646

## Live Layout Inspector
実機やエミュレータで動作しているアプリのレイアウト構造を3Dで見られるようになりました。

- デフォルトがOFFになっているので、Preferences -> Experimentalの`Enable Live Layout Inspector`にチェックを入れます。(再起動します)
<img width="1012" alt="スクリーンショット 2019-11-10 16.42.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/4b44ee8f-3a4d-1e88-8275-ed01b1094fe1.png">

- View -> Tool Windows -> Layout Inspector を選択 もしくは 右下のLayout Inspectorをクリックするとウィンドウが開きます。
<img width="1440" alt="スクリーンショット 2019-11-10 16.47.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/1b3b5405-c8ec-bb9b-00da-9c50d84d896d.png">

- Select Processから起動したアプリを選択すると、レイアウト構造を見ることができます :tada: 
<img width="1440" alt="スクリーンショット 2019-11-10 19.14.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/9e8b411f-5463-61fc-88ef-ada194001ba6.png">

  - (既存アプリはフレームしか表示されない...Canary2の制約...?? :thinking: )
<img width="800" alt="スクリーンショット 2019-11-10 19.02.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/e6dfbbce-f075-caa1-5ce0-3197829ccef1.png">

詳細はこちら : https://youtu.be/XPMrnR1_Biw?t=1286

## Build Speed window
どこのビルドにどれくらい時間がかかったのか確認できるようになりました。

- View -> Tool Windows -> Build を選択 もしくは 左下のBuildをクリックして、Build Speedを選択します。

<img width="1398" alt="スクリーンショット 2019-11-21 18.26.34のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/19a664da-a8d2-cf18-0ef2-a70dc77a8151.png">

## Multi Preview
複数デバイスでのレイアウト、色盲の方への見え方、言語ごとのレイアウトが確認できるようになりました。

- View -> Tool Windows -> Multi Window を選択 もしくは 右上のMulti Windowを選択します。
  - 複数デバイスでのレイアウト  
<img width="300" alt="スクリーンショット 2019-11-21 18.43.22のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/85a43ffa-42ea-90ab-eac4-13bb431f7535.png">
  - 色盲の方への見え方  
<img width="300" alt="スクリーンショット 2019-11-21 18.44.34のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/d1399b33-3f06-33c1-a25b-cfb301a172ef.png">
  - 言語ごとのレイアウト  
<img width="300" alt="スクリーンショット 2019-11-21 18.43.55のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148385/1f96f887-480b-5983-8a20-174a08253a2d.png">

## enableSeparateAnnotationProcessing option removed
`android.enableSeparateAnnotationProcessing=true`と記載しても機能しなくなりました。

# 以下、追加される予定の機能
Android Studio 4.0+ にて追加される予定の機能です。

## IDE内にエミュレータ
ウィンドウを行き来しなくて済むので、効率上がりそうですね。

詳細はこちら : https://youtu.be/XPMrnR1_Biw?t=966

# おわりに
ますます効率的＆直感的に開発を進められそうでワクワクしますね!!!
沢山使って、沢山フィードバックしたいです :muscle: