2015年11月23,24日にマウンテンビューで行われたAndroid Dev Summitの視聴メモです。 参加ではなくライブストリーミングを聞きながらメモった内容です。両日とも私用のため午前中のセッションのみです。また、Keynote以外はかなり簡単な紹介なので気になる内容があれば直接動画を見てもらえばと思います(動画ページへのリンクも貼ってます)。 個別動画へのリンク(2日目分でまだアップされてないもの)やまとめ・レポートサイトへのリンク等はあとで追記予定です。 レコーディング動画はこちらに随時アップされますが見直して追記等はしない予定です。 ちなみに個人的には1日目のKeynoteと2日目の最初のセッション(What’s new in Android Studio)と2日目の2番目のセッション(データバインディングの話。初出はI/Oだったらしいですが)は見た方が良いかなと思います。
初日
Keynote
- 9:05am - 9:45am
- スピーカ: Dave Burke & Stephanie Saad Cuthbertson(Andoridのエンジニアチーム)
- 動画
導入的な話(by Dave)
- 以前はPalmOS、WindowsMobile、Symbianとか色々なOSがあって、それぞれのOS用にアプリを提供するのがツラかった。そこからOSSのプラットフォームを作ろうという話になってAndroidが生まれた。
- AndoridではCompatibilityDefinitionDocumentがあって機種間で互換性を保てるようになっている。
- 現在のGoogle検索は50%以上がモバイルから行われている。
- 1.4ビリオンのAndroidアクティブユーザがいる。
- CupCake, Donut, Eclair, Froyo, Gingerbread, Honeycomb, IceCreamSandwich, JellyBean, KitKat, Lollipop, Marshmallowをそれぞれ振り返りそれぞれで何ができるようになったかの紹介。
AndroidStudio2.0リリース(by Stephanie)
※既にリリースされているので関連記事読んだ方が良いと思われます。まだ日本語の記事はないっぽいけど英語だとTechCrunchに記事がありました。公式ブログでも紹介されています。
- プレビュー版のダウンロードはここから
- スピードへのフォーカス
- ビルドスピードが2倍以上早くなる。インクリメンタルビルドだと数秒で終わる。
- エミュレータが早くない、安定しないという意見があったので改善した。
- エミュレータはWindowをドラッグしてリサイズできるようになる。
- カメラやバッテリーステータス等をエミュレートできるようになる。
- Google Play Serviceが含まれるようになる。
- GPUプロファイラ(Early Preview)
- グラフィックインテンシブなアプリ向け。
- GPUのデバッグができる。
- GPUストリームをレコードしてリプレイできる。
- 出たばかりのIntelliJ 15と統合されている
- テストサポートの強化
- UnitTestとAndroidTestを両方同時に走らせることができる?(あんまり詳しくないのでよく分からず)
- GoogleSearchとのDeepLinkの生成やリアルタイムでちゃんとGoogleにIndexされているか確認できるようになる(若干理解が怪しい)
- まだEclipseを使ってる人がいるけど早く移行して欲しい。
- InstantRun(インクリメンタルビルドって言ってたやつ?)の紹介
- リソースやソースを変更したらすぐに反映される
- 1,2秒で反映される
- デモ(あとでもっと詳しいデモがあった)
- Instant Runは全てのエミュレータ、実デバイス、IceCreamSandwithAPI15までの全OSで動く
新バージョン使ったライブコーディング(by Dave)
- ライブコーディングしながら実デバイスにデプロイ
- ホットスワップ(Instant Run)
- リソースとコードが一瞬でデプロイできる例(最初かなりトラブってたw)
- チェスゲームを例に、ビューを3Dにしたり、コマのサイズの変更をライブで行って一瞬で変わっていた。
- DevSummitの今後のセッションの説明をして終了
Android application architecture
- スピーカ: Yigit Boyar & Adam Powell
- 9:45am - 10:30am
- 動画
- Google IOでのトークの特別編で元のはYoutubeにあるみたいなことを言っていたが元の動画は見つからず。
- 内容
アーキテクチャをどうするかをテーマにしたベストプラクティスの話がメインで、様々なトピックに分けて話を進めていった。 ポスト(?)にコメントをできるようなサンプルアプリを例に話をしていた。オフラインでつけたコメントがオンラインになったときにどう反映されるべきか、どう読み込まれるべきか等の内容を、上記画像にあるような図とコードスニペットを交えて説明。バックグランドプロセスの設計の話、UXの話、APIデザインの話、メモリ管理、パフォーマンスの話等、それぞれ概要レベルだけど幅広いトピックをカバー。 最後にはサンプルアプリ上でのデモも行った。
Respecting User Attention: Notification Best Practices
- 11:00am - 11:45am
- スピーカ: Chris Wren(MediaLabのPhDで現在はAndroid System UIチームの人)
- 動画
- 内容
Notification(通知)のベストプラクティスをキャプチャのトピックに分けてユーザ体験の観点から紹介していく話。ライブコーディングではないがコードスニペットを使ってコードの紹介もしていった。コードの全体はこちらにある。話としては通知をどうするべきかがメインだったので、例えば通知は誰からの電話なら通知する等を細かくできるようにするべきとか、何をロックスクリーンに出すべきか、通知はユーザがアクションを取れるものする、Dismissできない通知の扱いをどうするべきか等だった。個人的にはGlobal Dismiss(ある端末で通知をDismissしたら他の端末でもDismissされる)の話が出てて、全アプリで実装してもらいたいと思った。
Keep it Secret, Keep it Safe
- 11:45am - 12:30pm
- スピーカ: Chad Brubaker(AndroidのSecurityチームの人)
- 動画
- 内容
TLSをなぜか使うべきかといった基本的な話から実際にどう使うかといった話、Marshmallowで追加されたStrictMode等の新機能の話、バッドノウハウやセキュリティテストツール(nogotofail)の話等、セキュリティに関連する幅広い話題を扱っていた。- 概要的な話だと、カフェなどで簡単に繋がるけど危ないという話、センシティブな情報のやり取りを行わない場合でも安全じゃない通信を使った場合は攻撃(例えばhttpサイトにアクセスしてXSSのようなことをされたりマルウェアに感染する等といった意味合いだと思われる)をされる可能性はあるといった話。
- HTTPはHTTPSに変更するべしとかJavaSocketならSSLSocketにしようみたいな話をスニペット交えて説明。
- サーバサイドはサービス使うなら殆ど対応してるよって話。
- マシュマロでサポートされたStrictMode等の話を注意点を交えて説明。
- TLSをチェックする際の注意点や設定等での間違えやすいポイント。
- 正しいように見えてダメなコード等を紹介。
- セキュリティ関連のコードはよく分からずにコピペして使わない
- nogotofailという設定ミス等をテストするためのツールの紹介
2日目
What’s new in Android Studio
- 9:05am - 9:45am
- スピーカ: Jamal Eason, Tor Norbye & Xavier Ducrohet
- 動画
- 内容
IDE Enhancement、ビルドシステム、Emulatorの大きく3つのトピックに関する話。IDE EnhancementではGPU Monitor, ネットワークモニター, App Template, テーマエディタ, Vector Asset Studio等、I/O’15以降に追加された新機能の紹介があった。ビルドシステムではdxが4パラで動くようになった等のdxの改善の話やProGuardの改善の話、dx/Shrinkerのベンチマークの話、不要な解像度のアセットを入れずにパッケージングする等の話があり、その後Instant Runの内部的な話とデモがあった。デモではHot Swap(リソースやメソッド内の変更等)やCold Swap(メソッド自体の追加等アプリを終了して再実行が必要になるもの)、データバインディング(後のセッション参照)の話などをしながら進めていた。Emulatorの話ではPerformanceとUsabilityに分けて話をしていた。PerformanceはCPU,GPU,IOのパフォーマンスが上がったいう話。Usabilityではキーボード・ショートカットの追加、GoogleMapでGPSが使えたり場所のエミュレーションもできるデモ、ネットワークも2G,3G等やローミング・SIMが無いケース等様々なエミュレーションができるという紹介、バッテリ残量のエミュレーション、指紋認証のエミュレーション、リサイズやローテートのデモ、PCからファイルをドラッグ・アンド・ドロップするデモ、SMSを送信するデモ等、様々な機能を紹介していた。
Data Binding – write apps faster
- 9:45am - 10:30am
- スピーカ: George Mount & Yigit Boyar
- [動画]()(まだ)
これはKeynoteに次いで大きい発表だった気がするので見た方が良いかも((追記)と思ったらI/Oで既に発表された内容だったらしいw情弱ですいませんw)。Viewやリソースの書き方が大分変わるという話。例えばリソースに@+id/productImage
みたいな書き方に変わって、ソースのオブジェクトから@{prod.image}
みたいなことができるようになる。@{条件 ? VISIBLE : GONE}
みたいにロジックを入れることもできる(複雑なロジックは入れるべきではないとのこと。できるできないじゃなくて多分責務とか可読性の観点から)。
また、上記キャプチャの通りfindViewByIdが不要になるということで、特定のインターフェースを実装したクラスを使ってfindViewById不要な操作ができるようになる(理解怪しいかも)。リソースでonClick使ったメソッド指定も色々なものが追加されて、onLongClickとかonTextChangeといったコールバックが利用できるみたい。この辺を実現するためのアノテーション等含めたソースの書き方やベストプラクティスも紹介していたのでこの動画は見るなり変更を追うなりした方が良さそう。
The Android Build System
- 11:00am - 11:45am
- スピーカ: Xav Ducrochet, Jerome Dochez & Michal Bendowski
- [動画]()(まだ)
- 内容
デーモンモードを使おう、デーモンにメモリを十分割り当てよう、SSDを使おう等といったビルド時のパフォーマンスのチェックリストを紹介(上記キャプチャ)。 その他、単体テスト時等環境ごとのビルド設定の話、NDKやGradleプラグインの拡張の話やテストAPIの話等、話題が多岐に渡っていた。 javacしてからdxまでのフローの話とかGradleの仕組みの話にも触れ意見等がある場合はGitHubのレポジトリを見て欲しいみたいな話をしていた。 InstantRunの内部動作の触りの話もしていた。クラスは一度しかロードされず、新しいクラスローダにより書き換えた箇所のみ反映されるらしい。新たに反映されたものは新しいインスタンスが生成された場合に反映されるので、Singletonを使っている場合等は実行されなかったりするので注意が必要みたい。
Android Testing
- 11:45am - 12:30pm
- スピーカ: Stephan Linzner, Jose Alcérreca & Jan-Felix Schmakeit
- [動画]()(まだ)
- 内容
Androidのテストの自動化に関するトピックを上記のキャプチャにあるように単体テストからUIテスト、パフォーマンスのテストといったレイヤに分けて網羅的に扱う話。例はノートを取るアプリだったけど、あんまりアプリを例にした説明は多くなかった。単体テストでは外部要因を排除してテストできるようにするべきとか、例えばMockを使う等、それをどのように実現するかと言った話やTDDの話等をしていた。 UIテストの話はEspressoの紹介がメインで書き方やデモや注意点等に触れていた。あとはCloud Test Lab等を使って複数デバイスでもテストできるようになっているみたいな話もしていた。 パフォーマンステストの話では1コミットでパフォーマンスが大幅に低下することもあったりするし、それを毎回手動でテストをするのは大変なので、パフォーマンステストも自動化することの重要性を述べていた。Gradleのプラグインでテスト単位でネットワークやグラフィックのパフォーマンスを取得できるらしく、アノテーションを使ったそれらのテストの書き方の紹介などをしていた。 最後にAndroid Testing Codelabや同パフォーマンステストのCodelab、テストのサンプル等の各種リソースの紹介を行っていた。