I/O Extended 2019 メモ for Android / Flutter

## Google I/O Extended 2019

イベント詳細
https://gdg-tokyo.connpass.com/event/128867/

全体的な I/O Android まとめ
[Overview of Google I/O 2019 for Android](https://speakerdeck.com/yanzm/o-2019-for-android?slide=149)

## Kotlin Coroutines
#### [Jetpackの Kotlin Coroutines サポート](https://speakerdeck.com/___soprog/jetpackfalsekotlin-coroutinesapoto)

特定のスレッドに束縛されない、Coroutinesは `中断可能な計算処理インスタンス` 

サポートまでの経緯

Androidの非同期処理で使われることが多い
今まで
Apiやデータの加工処理など、メインスレッドでなく別スレッドで実行しなければいけない重い処理

- **Thread**
- **AsynkTask**

↓ 辛い....

- **RxJava** -> なんでもできすぎちゃう
- **LiveData** -> メインスレッドでしか使えない

↓ もうちょい...!

- **Coroutines** ⭐️

- **Update**
 - **ViewModelScope** (jobのキャンセルなどいい感じにやってくれる)
 - **LifeCycleScope** (LifeCycleに合わせていい感じにやってくれる launchWhenStarted)
 - **livedata()** ApiなどのレスポンスをLiveDataで返してくれる
 - **Room** (SQLite Helper)でのsuspend function(中断関数)
 - **CoroutineWorker** テスト周り

↓
#### 参考

- [公式動画 : Understand Kotlin Coroutines on Android (Google I/O'19)](https://www.youtube.com/watch?v=BOHK_w09pVA)
- [Android で簡単コルーチン: viewModelScope](https://developers-jp.googleblog.com/2019/04/android-viewmodelscope.html)
- [Use Kotlin coroutines with Architecture components
(LifecycleScope)](https://developer.android.com/topic/libraries/architecture/coroutines)
- [[Google I/O 2019] LiveData を Kotlin-Coroutineと一緒に使う](https://qiita.com/offwhite/items/5d7e71ad541b7a222f36)
- [Room コルーチン](https://developers-jp.googleblog.com/2019/03/room.html)
- [Threading in CoroutineWorker](https://developer.android.com/topic/libraries/architecture/workmanager/advanced/coroutineworker)

非同期処理は**Kotlin Coroutines ファースト**
読みやすい、シンプル、高機能

## Android Jetpack
#### [What's new in Jetpack](https://speakerdeck.com/satorufujiwara/whats-new-in-jetpack-google-io-2019)

**Kotlin First!**

[Google、Androidにおける「Kotlinファースト」強化を表明。Google I/O 2019](https://www.publickey1.jp/blog/19/googleandroidkotlingoogle_io_2019.html)

新しいもの

**[Benchmark](https://developer.android.com/jetpack/androidx/releases/benchmark)** -> シンプルにベンチマークを測れる
**[CameraX](https://developer.android.com/training/camerax)** -> カメラを簡単に使う シンプルにかける
**[Security](https://developer.android.com/jetpack/androidx/releases/security)** -> 6.0以降 暗号化ライブラリ 暗号化にまつわるベストプラクティス
**[SavedState](https://developer.android.com/jetpack/androidx/releases/savedstate)** -> アプリ終了後にデータを保持するための仕組み
**[Jetpack Compose](https://developer.android.com/jetpack/compose)** -> ReactやVueなどにインスパイアされたもの。宣言型でUIを構築できる

https://medium.com/q42-engineering/android-jetpack-compose-895b7fd04bf4

## Android Studio
#### [Google I/O 19 Extended : Quick Recap Android Studio 3.5 ](https://speakerdeck.com/mhidaka/o-19-extended-quick-recap-android-studio-3-dot-5)

`Android Studio 3.5 beta`
https://android-developers.googleblog.com/2019/05/android-studio-35-beta.html

- **Project Marble**

6ヶ月の定期的なAndroid Studioアップデートプロジェクト

↓記事になっている
https://medium.com/androiddevelopers/tagged/project-marble

Googleは当初から、*安定性に課題感を持っていた* (誰でも、ビルドエラーやクリーンビルド、データバインディングのエラーには直面したことがある)

ビルド速度の改善 -> パーサー
エラー個所を特定しやすく

**Incremental Build**

**Apply Change**
インスタントラン機能の廃止
デルタプッシュ(差分送信) Android Oreo以降

**Emulatorの実行速度改善**
ヘッドレスモード

**dataBindingのビルドエラー改善**

**レイアウトエディタ**
ConstraintsLayoutエディターが、よりわかりやすく

**デザインデータ**
バッジインポート / バルクインポート

**カラーピッカーとインスペクタ**
実機操作と連動する
インスペクタの3Dレイヤー表示

常に、最新を使うように

## Firebase

- **Firebase Crashrytics Big Query Support**
ベロシティアラートの閾値を設定できるようになった
performance Monitoring -> Webにも！

- **[Firebase Test Lab](https://firebase.google.com/docs/test-lab/?hl=ja)**
Wear / App Bundle / Android Qに対応

- **[Firebase Authentication](https://firebase.google.com/docs/auth?hl=ja)**
Blocking function

## Android Q (Beta)

[Android @ Google I/O 2019](https://docs.google.com/presentation/d/1S5XTUtGmJPxazYysOOBzuVsTNz--smHH7wcII2O1Cd0/edit#slide=id.g57a72ceba6_0_66)

```
プライバシー
ダーク テーマ
ジェスチャー ナビゲーション
Bubbles
共有の改善
```

**Privacy**
Android Qプライバシーチェックリスト
https://developer.android.com/preview/privacy/checklist?hl=ja

**Dark Theme**
style別で用意
themeで別設定
無理矢理も可能 -> forceDarkAloud

**Gesture Navigation**
新たなUI操作
d.android.com/preview/features/gesturalnav

`edge-to-edge`
下のナビゲーション バーと 上のステータスバーを透明にする

**Bubbles**
通知。丸を押すと、Activityがひらく。NotificationBuilderで使う
ユーザーがOptoutした場合普通の通知になる

**Sharing**
https://developer.android.com/preview/features/sharing

**Settings Panel**
https://developer.android.com/reference/android/provider/Settings.Panel

## Flutter

v1.5が発表
https://developers.googleblog.com/2019/05/Flutter-io19.html

**Material Theming**
アプリのTheme(デザイン)をマテリアルデザインで実現するためのクラス群

[Building beautiful, flexible user interfaces with Flutter, Material Theming, and official Material Components (MDC)](https://medium.com/flutter-io/building-beautiful-flexible-user-interfaces-with-flutter-material-theming-and-official-material-13ae9279ef19)

**DarkMode**
シンプルに対応できそうな印象

**Sliderカスタマイズ**

**natural language Labeling**

**Cupertino**
iOS風ウィジェットも充実
https://flutter.dev/docs/development/ui/widgets/cupertino

**Desktop App作れる**

- Chrome OS
- macOS
- Linux
- Windows

**Flutter for Web**

- アプリのようなUI
- インタラクティブ性が高く、グラフィックスを多用したもの

[Google、「Flutter for Web」発表。FlutterからWebアプリを生成。Flutterはマルチプラットフォーム対応のフレームワークに。Google I/O 2019](https://www.publickey1.jp/blog/19/googleflutter_for_webflutterwebfluttergoogle_io_2019.html)

**Dart**

[Announcing Dart 2.3: Optimized for building user interfaces](https://medium.com/dartlang/announcing-dart-2-3-optimized-for-building-user-interfaces-e84919ca1dff)

- Productive
- Fast
- Multi-platform

DartはVM上で動くため、hot-reloadなどを含め、開発効率が高い