Google I/O 2016 - What’s new in Androidセッション日本語メモ

Google I/O 2016のセッション ["What’s New in Android"](https://youtu.be/B08iLAtS3AQ?list=PLOU2XLYxmsILe6_eGvDN3GyiodoV3qNSC)を視聴してのメモです．
正確な翻訳をすることは重視していませんので悪しからず.

## 登壇者
Chet Haase in Android UI Toolkit Team,
Dan Sandler in Android System UI Team,
Romain Guy in Android Team

# セッション内容
今日は，今PreviewになっているNの新機能について話すよ．
正確には，割と新しい機能の紹介をします，皆きっとPreviewで試して知ってくれているだろうから．
Developer Preview 3で試せるものや，関連情報について紹介します．

さて，まず「N」は何の頭文字なのか？
 ロシア語のNyet（Noの意）？いや，「Not yet」です．
まだお知らせすることはできません．

はじめに直接ユーザが触れる機能(User Facing Features)からご紹介して，それから開発者向けの新機能の話をします．

## Constraint Layout
Androidの新しいレイアウトシステムで，サポート対象はGingerbreadから．
レイアウトマネージャを使って実装することもできるし，Android Studioを使ってレイアウトすることもできる．「制約」をつける事によって，自動的にレイアウトされる仕組み．

### デモ
ボタンを動かすと，ガイドラインが見えるでしょう．マテリアルデザインで規定された，画面にウィジェットを配置するのに取るべきマージン，ウィジェット間で取るべきマージンがサジェストされる.
2つ目のボタンを置いて，制約を付けると，片方のボタンの位置を動かすともう一つのボタンも制約に従って動く．
手早くレイアウトの変更を確認できる．
画面の端に向かって制約を引っ張ると…アニメーションで制約ができるとどういうことになるのかが事前に見える．

Auto Connectという仕組みもあって，UIパーツを配置すると，その位置で制約が自動的に生成される．手作業で制約を作らなくてもいい．
もちろん，作った制約を後から編集することもできる．
もう一つ，パーセンテージ指定して位置決めすることもできる．スクリーンの上から25%の位置，とかね．
ぜひ活用してUIをより早く作ってください．

もう一つだけ！これはまだPreviewで，僕たちはアルファ1って呼んでる．
もしバグを見つけたらバグトラッカーにあげてほしい．
ちゃんとエンジニアが直すようにするよ．そんなにたくさん無いって信じてるけど．

Chet) 最後に質問！これ，いくらするの？
Romain) 100KBだよ．笑

## Multi-Window: Split-Screen
主に2つのモードがある．左右の画面分割と上下の画面分割．
Androidのレイアウトシステムをきちんと使ってレイアウトしていれば，Multi-Windowになる時のレイアウトの構築はWindowsManagerが面倒を見てくれるから，あなた方のアプリは基本はきちんと動くはず．
テストして，あなた達のアプリがきちんと動くことを確かめてね．

Picture-in-PictureはAndroid TV向けの機能機能で，Multi-Windowモードのもう一つの側面．

### Drag and Drop
Multi-Windowモードの時に片方のActivityからもう一つのActivityにドラッグ＆ドロップができる機能．今までは必要なかったけど．

少しAPIを見てみましょう．
まずパーミッションを与える必要がある．あなたのActivityで入力したパスワードをドラッグで持ち出されたり，ビデオファイルをドロップされたりしたり困るでしょう．
なので，まず最初にハンドシェイクをします．

View.startDragAndDrop()でアクションを始めます．

動きを少しだけ見てみよう．
この画像はドラッグ＆ドロップできるけど，もう一つの画像はパーミッションがなかったからドロップされなかったね．

## Notifications
別のセッションでしっかり新機能をお伝えする予定です．ここではハイライトでお伝えします．
- New templates: 新しい属性が増えた．誰からのメッセージの通知なのかが表示できる
- Bundled notifications: Android Wearで先に導入されていたもので，複数の通知をグループ化できる
- Direct Reply: REPLYボタンをタップすると，ロックスクリーンでも通知から返信できる

## Quick Settings
Top 5の設定がNotificationの上に表示される．

開発者は自分でQuick Settingsタイルを作れる．
andorid.service.quicksettings.TileServiceがタイルのライフサイクルのすべてを管理する．
忙しい時でもQuick Settingsタイルを使って音楽の再生を開始できる．Quick Settingsはそういう用途のためのもの．
manifestファイルにTile Serviceの定義を書く．

## Display Size
デバイスのDPIを変更できる
今まではテキストのみサイズの設定ができたが，画面全体の密度を変更できるようになる
調節の範囲は0.85倍〜1.45倍まで．
テキストが変更されただけだと，行の幅がまちまちだけど…画面上のすべてのパーツのサイズが変更されるから，ちゃんと行の幅も整った．

## Multi-Locale
複数の言語を，使用する言語として設定できるようになる．
優先順位をつけて並べられる．

## Dozeモード
Marshmallowで導入されたDozeモードが改善される．
Marshmallowでは低消費電力になっているときとmaintenance windowがあって，maintenance windowの時は
Android Nでは，まず，Dozeモードに入るのにStationaryであるって条件が外れた．たとえば，誰かのポケットに長いこと入っていて，でも使われてない，という状況の時にDozeに入るようになったんだ．
MとNのDozeモードの特徴を比較すると，次の通り．

## Data Saver
ユーザがデバイスやシステムに，アプリがどのくらいデータ通信を使っていいかの制限を伝えることが可能になった．いつもデータプランの心配をしたり，Wi-Fiを探しまわったりしていたくはないからね．
通信を制限しつつ，特定のアプリに対してはその制限から除外する，という設定をできる．設定は，システム設定を開いてアプリごとに設定する．
開発者の方で注意しないといけないのは．ネットワークアクセスが制限された状態になったときの振る舞い．
状態取得のためのAPIは2つある．

- A) Meteredかどうか
- B) バックグラウンドでのネットワークアクセスが制限されているかどうか

## Direct Boot
PINコードを設定してデバイスを暗号化している場合のアプリ実行機能の改善．
PINコードが入力される前から実行できるアプリを設定できる．

## Scoped Directory Access
ストレージの特定のディレクトリに対するアクセスを許可する仕組み．
今はストレージ全体に対するパーミッションを与える仕組みになっている．
写真を保存したい時は”Picture”ディレクトリへのアクセスのみパーミッション要求をできるようになる．

## Android For Work
Workモードという新機能ができる．Quick Settingsから有効にする．
週末にはメールアプリなんかを無効にしておく，とか．
1回Workプロファイルが有効になっているアプリでパスワードを入れれば，すべてのアプリでシングルサインオンできる．

## デベロッパ向け新機能
### New Runtime Libraries
- ICU4J
-- 新しいUnicodeとグローバライゼーションのサポートライブラリ．
- java.util.function
- java.util.stream

### Java 8サポート
要Jackコンパイラツールチェイン．

#### ラムダ式のサポート
サポートはGingerbread以降．
ドキュメンテーションがあるから見てみるときっと幸せになれるよ．
特にたくさんのイベントリスナーを駆使していたようなコードは，もっときれいに作れるようになるはず．

#### デフォルト & static インタフェース
インタフェースにデフォルト実装を書ける

#### Repeating Annotations
後方互換はない．

### Java Audio Latency
Audioチームがすごく頑張って，レイテンシが40-70msくらい減った．ネイティブレベルに速くなった．

### Renderscript
（技術力不足のため何を言っているのか分からず）

### グラフィックをたくさん扱う人たちに向けて
#### OpenGL ES 3.2
#### Vulkan
- グラフィックのための低レベルAPI (OpenGL ESよりもさらに低レベルなAPIを扱える)
- メモリ管理・同期は自分でやらないといけないので，OpenGLよりもちょっと難しい

### adb shell
機能面，パフォーマンス面ともに向上した．
lsやパイプが使えるようになって，普通のシェルに近づいた
バッファサイズが大きくなって，push時やpull時のパフォーマンスが向上した．
標準入力が使いやすくなったことで，特に自動テストには便利になったと思う．

### NDK
コンパイラがGCCがDeprecatedになって，Clangに変更される

### VR
キーノートでも紹介されたし，この後もちょくちょく話題になるとトピック．
デバイスは少し特別なものになる．
18ものセッションがある．
ふつうのアプリでVRモードを使わないでね！VR専用だよ！

### Support Library
#### 23.2
- Night Mode: テーマをかんたんに切り替えられる
- Bottom Sheets: Material DesignのUI
- VectorDrawable / AnimatedVectorDrawable:
上手く使ってアプリを小さくしてほしい.JPGやPNGを使うより軽量にできる．
- Recycler View AutoMeasure

#### 23.1
- Recycler View

"What’s new in support library"というセッションがあるので，今後のSupport Libraryのリリースについてはそちらで紹介します．

### その他のUI関連の改善
Vector Drawableの描画パフォーマンスの向上
ローディング，レンダリングのパフォーマンスが20-90%向上する

## Android Instant Apps
今朝のKeynoteでも紹介されていたけど，詳しくは"What’s new in Google Play for developers”のセッションを見てね．

## Android N Preview
ぜひpreviewをインストールしてね！

## まとめ
Romain) 何か質問をもらう？
Chet) どうやってこの会場で質問を聞くの？笑（会場は野外ですごく広い）
Romain) すごく大きな声で喋ってもらえば…

Chet) それではこの辺りで．ご静聴ありがとうございました．

--------------------------------------------------
(セッションメモは以上です．内容に誤りがあったらご指摘ください．)