Google Developers Summit Tokyo 2016 Android まとめ


## Google Developers Summit Tokyo 2016

* **※走り書きしたメモなので間違っている箇所等あると思います**
* 細かいまとめは他の記事とあまり変わらない
 * いくつかリンク追加したくらい

![dev.png](https://qiita-image-store.s3.amazonaws.com/0/43637/b2153a0c-600c-fd82-49df-ac8f68d3a1c1.png)


## 個人的まとめ

* Android N細かいところで頭抱えそうなことが多そうな印象
 * とりあえずAPI Diffとかとにらめっこしつつ、どれを対応したらいいか判断
 * ただユーザ視点で見れば良いアップデートが多いので、積極的に開発者としても歩み寄りたい
* Gradle DSLはちゃんと最近ドキュメントまとまってるよ
 * [Android Plugin DSL Reference](http://google.github.io/android-gradle-dsl/)
* Java 8のAPIはminSdkVersionがN(24)じゃないと使えない
 * lambdaは後方互換性がある
 * それ以外のStreamやOptionalはNで追加されるAPIなので、minSdkVersion 24にするか、バージョンチェックして分岐して使うか
 * バックポートライブラリ積極的に使っていこう
 * [Lightweight-Stream-API](https://github.com/aNNiMON/Lightweight-Stream-API)とか...
* jack and jillはjavaのツールチェイン(主にannotation processorとか)周りが充実すれば未来あるぞ！！
* JobScheduler使おうねって話だけど、あいつ同時に動かせるJobが3つだしみんな使いはじめるとどうなのかなーという気持ち
 * 詳しくはこれ →  [JobScheduler-Code-Reading](https://github.com/operando/JobScheduler-Code-Reading)
* Android NのMulti-Windowは、**気になって眠れない夜を過ごすくらいならOFFにしておく方がよさげ**
 * Multi-Window **対応して利益があるアプリなら積極的にやった方がいい**と思う
 * そうでないアプリは多分ユーザもきっとMulti-Windowで使わないと思う
 * 考えずに無理して頑張るよりも**ユーザのユースケースを一度考えて見たほうがいい**
* adbが高速化したのはいいけど、他のadbを使うToolsとの相性が悪くなってる気がする
 * 落ちる頻度が多い。他のTool側が新しいadbに対応してないだけかもしれないが
* Data Saverはわりとやばそう
 * けど、ちゃんと使えばユーザにとっていいものだし、アプリ側も積極的に対応していきたい
* Vulkanワンチャンありそう
  * Gameをもっと気軽に作れるようになればなーという気持ち
  * VR系は面白そう

## サイト

https://events.withgoogle.com/google-developers-summit-tokyo-2016-android/

## Overview of Android Beta Program

鈴木 拓生 Program Manager, Google Japan [@taquo](https://twitter.com/taquo)

* Google I/OのI/Oとは = input output
* Nについて開発者から意見が聞きたい
* そのための会でーすとのこと
* N Previewの詳細は以下を参照
 * http://developer.android.com/preview/overview.html
* N Preview4くらいになるとたいだい仕様が決まってくる
 * その前に何かあればフィードバックしてほしい


## Android Studio 2.0

江川 崇- Google Developer Expert [@t_egg](https://twitter.com/t_egg)

### 複数のバージョンの共存について

* Macなら別アプリケーションとして入れればOK
 * Android Studio 2.0
 * Android Studio 2.1

### ツールのバージョン追従

* 誰かがDevやCanaryを試しておく
* compileSdkVersionとbuildToolsVersionは23系にしておくのがオススメ
* Android gradle pluginは2.0使った方がいいよー
* targetSdkVersionには上の奴は依存しないので、適度に上げていく


### Android SDK

* あまりツールのversionを上げすぎると、N PreviewのレイアウトでxmlのPreviewのやつが見れなくなったりはする
 * それな、マジ困ってる...
* 新しいエミュレータいいぞ！！
 * はやい
 * すごい
 * ぱない

### Android Studio 2.1

* N Previewをsupportしてる
* java8の機能のランタイムsupport
* lambdaについてはツールチェインが下位互換性support
* JDK8が必須


### jack and jill

* jack - Compiler
* jill - リンカ
* Android N本体はjackでコンパイルされているらしい
 * Android OSってことね。多分Java層のコンパイルにjack使ってるって話
 * jackで早くなるらしい
* 個人的にjack and jill系で見てる資料
 * https://source.android.com/source/jack.html
 * http://tools.android.com/tech-docs/jackandjill


### Android Studio 2.1の問題

* いくつかおかしい部分はありますよー
 * 特にN Preview周り
* なんか問題あったらissueくださいなー
* "Android Studio bug" or "jack and jill"のテンプレートでissue報告するといい
 * http://b.android.com
 * こうしてほしいとかこういう機能が欲しいとかでも上のテンプレートの方がいい
 * とりあえずAndroid Studio担当者に渡るから


### dexに関する処理の改善による高速化

* dexInProcess
 * 今までは複数別々のVMプロセスでDEX buildされていた
 * それを1つのプロセスで行うようにした
 * Android gradle plugin 2からこれが導入されてて、デフォルトON

### dex生成時のメモリ不足の対策

* 今までメモリ不足の時はこんな感じだったけど

```
dexOptions {
    javaMaxHeapSize “2g”
}
```

* 今後はgradle.propertiesに以下を指定する

```
org.gradle.jvmargs=-Xmx4096m
```


### シュリンク機能

* ProGuardは単一のjar = フルのDEX化が必要
* `useProguard false or true`
* シュリンクするだけなのでProGuardと同じことができるわけじゃない
 * ProGuardは行われないってことかな
* 開発時だけシュリンクしたい場合に便利


### ADBの高速化

* push / pullの高速化
* 5倍くらい早くなったらしい
 * 早くなったはいいけど、周辺Toolsとの相性が悪い...
 * たまにadb死んでる


### AAPT

* デバッグ時に端末に必要なもの(density)だけapk化したものを送っている
 * xxxhdpiとか
 * CPUファミリーは未対応 - 将来的にやりたい


### Instant Run

* デバッグbuildのみ
* 継続してDeviceが接続中であること
* ステップが4つある(上から早い順)
 * Hot swap
 * warm swap
 * clod swap
 * new build & Deploy ← 今までのもの
* 詳細についてはDroidKaigi 2016でEnoさんが話したやつがいいぞ！！
 * [How Instant Run works @DroidKaigi2016 by Atsushi Eno](https://speakerdeck.com/atsushieno/how-instant-run-works-at-droidkaigi2016)


### Instant Runの問題

* MultiDex利用時は怪しい
 * パフォーマンスが落ちることがある
* Jackとの併用不可
* Windowsだと問題多いらしい


### Emulator 2

* 高速
* マルチタッチなど細かいTouch操作もできる
* apkをドラッグアンドドロップでインストールできるとか...


### Android Studio 2.0 その他

* GPU Profiler
* Android Studio 2.IntelliJ 15がベース
* App Indexing支援の機能


## Android N What's New + Support Library update

荒木 佑一 [@yuichi_araki](https://twitter.com/yuichi_araki)

### [資料](http://yaraki.github.io/slides/gds-2016q2/index.html#1)

* Preview版はLから出してるよー
* N PreviewからOTA配信になった
* 今N PreviewでbuildしてもN Previewでしか動かせない
 * 過去バージョンで動くようにする対応は今後やります


### Multi-Window

* 画面の二分割
* 自由形式
 * OEMの設定??
 * 今後出てくるもの？？
* Picture in Picture
 * TV限定

* 画面がリサイズされる
 * 今までのレイアウトで対応
 * 相対的なデザインの仕組みで対応していく
 * Resizeしていくので sw<N>dpとかのやつが採用される

* ライフサイクル
 * 画面Resizeが起きると画面回転時と同じことが起きる(境界線をユーザが動かしたら)
 * アクティブ / 非アクティブ
  * ユーザが触っている画面がアクティブ Resume
  * 非アクティブな画面 Pause
  * UI更新の停止はPauseではなくonStopで行うようにする
  * 動画の再生とかの時にPauseでやってしまうとMulti-Window時にユーザが困る


* acticity or applicationタグ
* android:resizeableActivityはデフォルト true
* 既存のアプリはMulti-Windowをsupportしているという解釈になる

* Multi-WindowのためのメソッドがActivityとFragmentに入っている
 * isInMultiWindowMode
 * isInPictureInPictureMode
 * onMultiWindowModeChanged
 * onPictureInPictureModeChanged


* 分割にアプリ側から意図的にすることはできない
* ユーザが意図的にやらないといけない
* Picture in Pictureだけ例外があるらしい

* ドラッグアンドドロップのメソッドもある
 * Multi-Window用で２つのアプリをまたいでドラッグアンドドロップできる


### 通知

* 通知から返信できるようになった
 * LからWear用にはあった
* group化
 * 複数の通知をgroup化する
 * in boxとか今まであったgroup化と合わせて使ってほしい
* CustomViewの設定方法が変わってる
 * setCustomContentView
 * setStyle


### Java8

* javaOptions true
 * jackじゃないと動かないようになってる
* lambdaは後方互換あり
* その他はAndroid Nじゃないと使えない = minSdkVersion 24ってことだと思われ
* lambdaどこでも使えるけど、結局newしてるからonDrawとかの中でやるとめっちゃインスタンス化が行われるので気をつけてね


### Data Saver

* アプリを指定してデータの制限が出来る
* アプリ側は自分がどんな設定かどうかを調べるAPIもある
 * ConnectivityManager


### クイック設定

* ドラッグアンドドロップで項目を追加・削除できる
* Tile
* TileService


### Scope Directory Access

* どのDirectoryを見るのかを明確に指定してユーザに提示できる


### Android Nその他

* Direct Boot
* ICU4J
* etc.


### Doze

* 軽いDozeができた
 * ネットワークAccessだけ遮断
* ポーリングならGCM使う
* 定期処理ならJobScheduler使う


### 暗黙的broadcast

* Connectivity_Action, New_Picture, New_VideoはBroadcastIntentから動かなくなった
 * これ起きる回数多いし、指定してるアプリが多いと色んな処理が動くから廃止したってよ！！
 * Manifestには書いても意味ない(動かない)
 * Connectivity_Actionは動的に書いた時は来る
 * JobScheduler使えよ
 * 写真や動画に関してもそれ用のAPI作ったからそれ使う


### ScreenZoom

* sw320dpでちゃんとレイアウトがなっているかチェックしておく
 * Nexus 4相当


### 複数言語設置絵

* LocaleList.getDefalutでリストが取れる
* 特にアプリ側はやることなさそう
* 言語のResourceがちゃんとなっていれば
* 翻訳サジェスチョンとかまあそこら辺はC絡むかも


## Android NDK/Game/Vulkan Updates

松田 白郎 [@hak](https://twitter.com/hak)

* N Preview 2でVulkan対応したよ
* Nはわりとパフォーマンス向上とか操作性とかそこら辺がメイン
* 通知はゲームアプリでも使える部分
* ゲームはData Saverとか絡んでくる

### 低メモリデバイスへの対応

* 圧縮テクスチャの使用とかテクニック色々
* on Memoryで使う量を減らす

### N security

* セキュリティモデルが新しくなって、/system/lib以下の未公開ライブラリの参照が禁止になった
 * libpng,libcryptoなど

### vulkan

* デバイス側にVulkanのドライバが入っている必要がある
 * N Preview 2から入った??
* Vulkan対応予定のもの
 * Nexus Playr
 * Nexus 9
* Vulkan独自対応してるもの
 * GALAXY S7
 * nVidia Shield TV & Tablet


### NDK

* NDK r11c
 * 最新版
 * Clangがデフォルト・コンパイラ
  * 今までGCCだった
 * SDK Managerからダウンロードできるようになった
 * 開発はAOSPで行うようになった
 * バグ報告はgithub上で行われる
  * github.com/android-ndk/ndk
  * NDKチームは開発チームとして独立しているらしい


### NDK r12 Beta

* Vulkan.h / Vulkan.so 追加
* Vulkan support
* Githubからダウンロードできる


### NDKのリリースサイクルの予定

* Bateは 5週間に一回
* 正式版は Qに一回


### Gamer ID,avatar

* Google+のアカウントが不要になった
* Cloud Saveの機能もあるので使って欲しい


### ビデオ録画 API

* ゲームプレイの動画配信
* ビデオ録画 & シェア
* 実況機能も今後追加予定
 * ゲーム以外でも使えそうなのでチェック


### CardBoard SDK

* 3DオーディオAPIが出たらしい


### Android Studio 2.0

* GDBからLLDBにデバッガが変わった
* GardleでC++コンパイル
 * 完全ではないけど一部


### Vulkan

* ゲーム機にあったパフォーマンスのいいAPIがPCやモバイルでも使えるようにするためのもの
* CPUの負荷が下がる
* GPUはあまり...


### AndroidのVulkan対応

* OpenGL ES 3.1 AEP 相当
* 要ドライバ対応
* 現実的にはOpen GLとの両方の対応が必要そう

### テクスチャーフォーマット

* Vulkanでは標準のテクスチャフォーマットは未定義
* Open GL ES 3.1 AEPがASTCsupportしてる
* ASTCを使えばいいと思われる


### FPL

* Fun propulsion labs
 * Google内の小さなチーム
 * Niantic Labsみたいな位置づけ
 * Google社内でインディーゲームを開発してるチーム
 * hakさんもそこにいる
 * ゲームで実際に使うFrameworkを作って公開している
* [FlatBuffers](https://github.com/google/flatbuffers)
 * メモリアロケーションが何のでGCレス??
* [FlatUI](https://github.com/google/flatui)
* [zooshi](https://github.com/google/zooshi)


## Android N Q&A セッション

荒木 佑一 [@yuichi_araki](https://twitter.com/yuichi_araki) , 松田 白郎 [@hak](https://twitter.com/hak)

### Swift supportについて

* まずない
* Javaをこよなく愛す人達がメインの開発者なので


### Kotlinについて

* 普通に動くので別に何もない...
* いいと思うよ


### Volleyについて

* Google Playの中で使われてた
* 今LegacyをONにしないとつけないし...


### Jack & jillなぜ作るのか

* javaツールチェインを使えなくなるけど、それをカバーするものは内部でもなんか作ってる？？
* Android自体をbuildするのがとても早くなるらしい - jackなら


### Bottom Navigation

* 上だと指届かないよねー
* tabの置き換えではない


### Multi-Windowの用途

* ゲームで二画面とかもありだよね
* ソフトウエアキーボードはどうなるのか
 * 縦横で動作が違うかも
 * 上の画面でキーボード入力する際には下の画面にキーボードが出る
 * 下の画面でキーボード入力する際には上の画面がしまわれてキーボードが出る


### Bazelについて

* Gradleで当分いくはず
* BazelはAndroidに採用されないかも
 * AOSP見てればわかるかもね


### Multi-Window時のPauseについて

* Pauseで止めるべきかどうか
 * 音とかどうするか


### Java8のAPIのBackPort

* 多分されない
* OSSライブラリ使ってね
 * [Lightweight-Stream-API](https://github.com/aNNiMON/Lightweight-Stream-API)


### Bottom Navigationはsupport libに入るか

* まだ対応予定はない
* 要望が多ければ入れるかも


### inboxのようなFABがDesign support libに入るか

* 一度試したけど諦めた
* もう一回やってみる


### jackになったらOracle JDKは不要か？

* 多分そんなことはない
* どこかで必要になると思われる


### エミュレータでクリップボードの共有

* 今共有できない
* 今いい方法がない
* adb shell input text


### jayceの仕様公開はあるか？

* コード読め案件


### Apache Legacyいつまでsupportされるか

* いつまでかわからない
* support終わる前にアナウンスすると思うよ


### テストについて 環境の改善とか

* githubのtestのやつ見て欲しい
 * [android-testing](https://github.com/googlesamples/android-testing)
* mock使ってJUnitで動かすとか


### Android Studioについて

* Google内ではOSX/Linuxが基本使われてる
* Windowsでの検証ができてないことは多い
* ごめんね...


### VectorDrawableについて

* 今後も使って安心
* 機能を削ることはない


### Play Gameについて

* 今はアプリのcategoryをGameにしないと使えない
* 今後もっとフレキシブルにやっていきたいので、categoryがgameじゃなくても使える機能は増やしていきたい


### openCLはsupportするか

* RenderScript使ってほしい
 * 対応頑張ってた人がやめちゃった
* Vulkanで頑張れるはず
 * なので今のところsupport予定はない


### CardBoard SDKのVulkan対応

* 多分何かしらの形でやるはず


### Googleとしてtestはエミュレータ or 端末どっちが推奨なのか

* 普通のアプリならどっちでもいい
* ゲームなら実機


### 低メモリ向けのテスト

* エミュレータでメモリサイズ変えて検証するとか
* GALAXY Nexusで検証するとか...
* Activity保持しないとかONにすればそれに違いことの検証はできそう


### N Preview対象の端末が今後増えるか

* Xperia Z3対応したよね
* 増えるかどうかわからない
* OEMが頑張ってくれれば対象になるかもね


### support lib v4の開発終了はあるか

* 今年中になにかアクションはあるかも


### bug issueとか日本語で対応してくれるのか

* 基本しない
* みんな英語で頑張ってる
* 箇条書きとかでもいいし
* 最悪Google 翻訳でｗ
* 「俺bug見た」みたいな雑な英語でもいいと思う


### Android for workについて

* 実は大きなAPI
* 変更点はわからない...