【Android】DroidKaigiで見たセッションで知らなかったこと驚いたことメモ

とても知らないことや驚いたことが多く知見がたまりました！発表者の方、本当に有難うございます。

人によって驚く点や知らなかっ点は異なると思いますので実際に発表が動画が公開されてから見てみてください！自分も他の興味があっても見れなかったセッションがたくさんあるので見ます！

* 基調講演 OSSの動向を捉えた実装方針 [スライド](https://speakerdeck.com/wasabeef/day1-keynote-in-droidkaigi-2016)
	* 幅広くOSSを紹介してくれていました。
	* 昔は端末依存が注目されていたが**今は開発手法が注目されている**
	* こちらは知っているライブラリに個人差が大きいと思うので、スライドを見たほうが良いと思います。
        * 個人的には以下のは知らなかったです
            * [Calligraphy](https://github.com/chrisjenx/Calligraphy)でアプリ全体にフォントを適応できる
            * [ViewAnimator](https://github.com/florent37/ViewAnimator)でアニメーションが楽に作れる


* Advanced RecyclerView Techniques [スライド](https://speakerdeck.com/cephus/advanced-recyclerview-techniques)
	*   サンプルアプリ:https://github.com/cephus/AdvancedRecyclerView
  * ItemDecorationはとてもいじりやすく、**グルーピング表示でタイトルの文字が上に常に出ているような動きも割と簡単にRecyclerViewで実現できる**。カッコ良かったです。 [コード](https://github.com/cephus/AdvancedRecyclerView/blob/master/app/src/main/java/com/codeundone/advancedrecyclerview/decoration/complex/ComplexDecoration.java#L98)
  * RecyclerViewのItemAnimatorはいじるのは時間掛かり過ぎるのでやめたほうがいい(激ムズ wasabeefさんのライブラリを使うと良い)
  * 普通使うならextends SimpleItemAnimatorを継承して使う

* Fragments: Why, How, and What For?[スライド](https://speakerdeck.com/kenodoggy/fragments-why-how-and-what-for)
	* サンプルアプリ:https://github.com/kenodoggy/FragmentSamples
  * **初期化ロジックはonActivityCreatedを使うと良い**(ライフサイクルの関係)
  * DialogFragmentはAlertDialogをラップした使い方がシンプルで良い
  * MasterDetailな表示は(タブレットでは左右に分けて、スマホでは遷移する)AltanativeResource layout-sp600/にレイアウトを置いて、Fragmentでlistとdetailを分けて片方だけ参照する、findViewByIdで存在するかどうかでレイアウトを判定する
* DevToolsKnowledge [スライド](http://www.slideshare.net/shinobuokano7/android-dev-tools-knowledge)
	* とにかくしらないDevToolがあると思います。
	* 人によって知っているもの知らないものの差が大きいと思うのでスライドをみると良いとおもいます。
	* 個人的にはここらへんが知らなかったです
		* materialdoc.com Material Design化するときに良い
		* dexcount-gradle-plugin
			* ビルド終わった後にメソッドの数が見れる	
		* **gradle-versions-plugin**
			* 使っているライブラリに新しいバージョンが有るかどうかをチェックできる
		*  build time summary plugin
			* ビルド時間が見れる
	* 自分が開発したandroid-postfix-pluginを紹介してくれていでありがたかったです。

* Dagger2とRealmを利用したモダンな開発 [スライド](https://speakerdeck.com/funnelbit/droidkaigi2016)
	* Androidのフレームワークから切り離さないとテストしにくい
    * **Dagger2を利用する理由はActivityに依存性の注入がしにくいため**(テストしやすくする)
    * 永続化はRealmとDaggerでうまくやる

* パーミッションモデル過度期[スライド](http://www.slideshare.net/ak_shio_555/ss-58412835)
	* こういうときにどうしたら良いのかを詳しく説明してくれていました
	*  **shouldShowRequestPermissionRationale ←一回拒否されているがまだ許可される可能性がうときにtrueなので、ここで説明してあげると良い**




* 実践！Android Studioプラグイン開発
    * 自分はAndroid Studioプラグイン開発しているのですが、結構体系的に知ることができないので、貴重な資料だと思いました。
    * **プラグイン開発について知らないことめちゃくちゃ多かったです。**
    * Editorクラス便利そう(使っていたかもですが忘れていました。。)
    * 次にプラグイン開発するときは絶対参考にします。


*  Support Libraryノススメ/Support Library Internal[スライド](http://yaraki.github.io/slides/droidkaigi2016/#1)
	* ListViewからRecyclerViewに移行すべきか？ 今動いているなら別にいい ただ新規で作るならNestedScrollができるので便利(CoordinatorLayoutと連携する)
	* CardViewのマージンがAPIレベルによって違う→compatPaddingを使うといい
	* **個人的に大好きな分野なので、CLの送り方やSupport Libraryのビルド方法も教えてくれていたりBottomBehaviorというリリース前の機能を教えてくれたり、とても勉強になりました。**
	* 個人的にどんなプルリクがほしいかなどを懇親会で聞けたりしたのもとても良かったです(大きすぎない日本だけの機種依存のバグなどをissueを上げつつCLを出して直して欲しいそうです。)

* クックパッドにおけるAndroidエンジニアの役割とその変遷[スライド](https://speakerdeck.com/sys1yagi/kutukuhatutoniokeruandroidensiniafalseyi-ge-tosofalsebian-qian)
	* 初期
		* クラッシュしたときの規模感が大きかった。
	* 中期
		* →開発プロセスを構築+ナレッジ共有の仕組みを作る
		* → **リリース毎にKPT**
		* 1リリース20営業日プルリク終了日を設ける
		* 段階公開
		* 変更はissueにして管理する
		* これで十数ヶ月安定的なリリース
	* 最近
		* チャットでの通知を強化などの情報共有の仕組みを強化、**同じ舟に乗って意識を合わせる**。
	* 結果→数十のOSS導入と17回のリリースサイクル維持とクラッシュが1800/dayとかなり減った
	* Dokumiという自動コードレビューツール便利そうです。
	* **zatsuリポジトリで夢などのやりたいことなどを話し合っているようです。ここから議論が発生して、OSSを入れたりしているみたいです。**




* Customizing Theme and Style for Material Design[スライド](http://www.slideshare.net/yanzm/customizing-theme-and-style-for-material-design-droid-kaigi-2016)
	* Styleとかは結構知っていたが、ドキュメントとしてすごく価値があると思います。**マテリアルデザイン対応してViewの色などで困ったとき**はこれを見ればいい感じです。
	* **マテリアルデザインでの文字サイズで日本語はDense scriptなのでTextAppearance.Largeなどと文字のサイズは違うの注意**
	* **TintManagerがあるdrawableのリソースIDが付いていると勝手にtintをつける処理が付いている**
	* **fitSystemWindows="true"はNotificationBarのサイズ分paddingを入れる**
	* 透過ステータスバーはこれを見れば実装できそう！
* Support Library 総復習[スライド](https://speakerdeck.com/androhi/support-library-zong-fu-xi)
	* Support Libraryでほぼすべてのものをカバーしている資料はとてもめずらしいのではないかと思います。
	* MultiDexは解凍すると本当に.dexファイルが二個ある
	* Percent Support Library marginも％で入れられる LinearLayoutと違い一気に左右のやつが設定できるため階層が深くならないので便利
	* v13 Support library **app.FragmentでPreferenceを使いたい場合のみ利用する**

* ライブコーディング・Androidのライブラリを作ってみよう[スライド](http://www.slideshare.net/masatakakono1/android-58450612)
	* とてもわかり易く説明していたと思います。
	* **bintray-releaseプラグインを使うとリリース楽かも**です
	* 自分の昔の発表資料を参考文献に入れていただいていてありがとうございます。

* Android CI: 2016 edition[スライド](https://speakerdeck.com/gyugyu/android-ci-2016-edition)
	* **開発後か新規開発かでアプローチが違う**
		* 稼働中はInstrumentation Test/End-to-end Testで可動を確保しながらリファクタリング
		* 新規開発の場合は:MVP Architectureなどを採用
	* テストについて体系的にどういうアプローチを取るかをいくつか候補を出して説明してくれていて勉強になりました。
  * RecyclerView.Adapter#onAttachActivityでライフサイクル管理は良くない(質問より)

* ChromeとAndroidの過去・現在・未来[スライド](http://www.slideshare.net/shinobuokano7/chromeandroid-58461091)
	* Chrome Custom TabsはIntentで実際は実行されている
	* **Web Manifestでウェブページにメタデータを書く**
		* ここでアプリへの誘導バナーの表示ができる
	* 今後はWebを見ているのかアプリを見ているのかの境界線がなくなっていく。
	* どうやって情報を集めていたのか聞いてみていてまとめていただけそうです。ありがとうございます。
		* →https://github.com/operando/DroidKaigi/issues/23