DroidKaigi 2016で得た知見のまとめ

2日間DroidKaigi 2016に参加し、多くの知見を得ることができたので、忘れない/すぐに実行に移すためのまとめ(メモ)です。
(当日中にまとめたかったのですが、懇親会でそこそこお酒を飲んでしまったため当日は断念し、加えて翌日には予定が入っていたので、今日(2016-02-21)のpostとなってしまいました:droplet:)

## **発表資料**
だいたいの資料を網羅してくれている、[ありがたい記事]((http://unsolublesugar.com/20160218/134940/))がありました。
[DroidKaigi 2016講演資料まとめ #DroidKaigi](http://unsolublesugar.com/20160218/134940/)

※ ここから先の「知見のグループ分け」は、あくまでも今現在の私の状況に基づくものです。

## **すぐに活かせそうな知見**
### **Research**
* [GitHub/trending](https://github.com/trending)
* [Android Weekly](http://androidweekly.net/)
* [Android Arsenal](https://android-arsenal.com/)

ちゃんとWatchしたいです（英語の勉強もかねて）
以前、[Android ArsenalのTwitterアカウント](http://wrs.search.yahoo.co.jp/FOR=Y8RuEBVV3ignz7wK6QBg8AqQOg5qjMTQbys36XsP8K3OLgU1t3c.l6BEi2BL84mBLxVFInddIpLe.suNgKaRCbe3_tyE9JLD8J4DzokgApA0_.tljSNN.FzUw1mTLFUzyjA11zN4czPrqIq3GgAGeztAV.tA3.D7kPfcfsawHiFoTrplxtbdZr6isZuu0WZSn6Kk4Wg6IpexfwEzQGIVpUha4mKHq6QL7fhM3Fei.N0-/_ylt=A2RCPHOITclWKTcA0SaDTwx.;_ylu=X3oDMTEyNmsxbzl0BHBvcwMxBHNlYwNzcgRzbGsDdGl0bGUEdnRpZANqcDAwMjk-/SIG=1212nv9mm/EXP=1456133960/**https%3A//twitter.com/android_arsenal%3Flang=ja)に、拙作の[info-dumper](https://github.com/shikato/info-dumper)をツイートしてもらったことがあるのですが、その際にGitHubスターが20くらい増えたので、Android絡みのライブラリを公開する時には、[Android Arsenal](https://android-arsenal.com/)に紹介してもらう、というのを一つの目標にするのも良さそうです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">info-dumper: Info-dumper is a Stetho plugin which shows your android application&#39;s information.<br> <a href="http://t.co/hzzsJrNbKV">http://t.co/hzzsJrNbKV</a> <a href="https://twitter.com/hashtag/AndroidDev?src=hash">#AndroidDev</a></p>&mdash; The Android Arsenal (@Android_Arsenal) <a href="https://twitter.com/Android_Arsenal/status/653586837882011648">2015, 10月 12</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

*quoted from*
*[OSSの動向を捉えた実装方針](https://speakerdeck.com/wasabeef/day1-keynote-in-droidkaigi-2016)*

### **[Takt](https://github.com/wasabeef/Takt)**
FPSを表示してくれるOSSライブラリです。
ちょうど今、動画関連の案件に関わっているので導入してみたいと思います。
以前にAdvent Calendarで[wasabeefさんの記事](http://qiita.com/wasabeef_jp/items/a98571081f6c3224744a)を読んだ時にも↑のように思い、記事のストックまでしていたにもかかわらず、未だ導入できていなかったので、これを機にちゃんと導入します:droplet:)

[Takt](https://github.com/wasabeef/Takt)

*quoted from* 
*[OSSの動向を捉えた実装方針](https://speakerdeck.com/wasabeef/day1-keynote-in-droidkaigi-2016)*


### **[Android Lint](http://developer.android.com/intl/ja/tools/help/lint.html)**
[Nkznさんの資料](http://www.slideshare.net/Nkzn/androidlint-droidkaigi)にある通り、[Android Lint](http://developer.android.com/intl/ja/tools/help/lint.html)はAndroidアプリ開発におけるGoogleの正解集、もしくはアンチパターンということで、ちゃんとやります。 
(前にCookpadさんの[朝Lint活動の記事](http://techlife.cookpad.com/entry/2015/09/15/190000)を読んだ後にも良さそう、と思い、GitHubに「朝Lint的な活動をする」のようなissueを立てただけで満足してしまっていたので、これを機にちゃんとやります:droplet:)

ちなみにNkznさんの発表関連だと、Android Lintが意外と泥臭い方法でチェックしていたり、[DroidKaigi 2016 アプリ](https://github.com/konifar/droidkaigi2016)がabortOnError falseになっているのでPR送る、あたりのくだりが面白かったです。
(発表当日にちゃんと[PR](https://github.com/konifar/droidkaigi2016/pull/297)が送られmergeされていました) 

*quoted from* 
*[Android Lintで正しさを学ぼう](http://www.slideshare.net/Nkzn/androidlint-droidkaigi)*
*[クックパッドにおけるAndroidエンジニアの役割とその変遷](https://speakerdeck.com/sys1yagi/kutukuhatutoniokeruandroidensiniafalseyi-ge-tosofalsebian-qian)*

### **[MockWebServer](https://github.com/square/okhttp/tree/master/mockwebserver)**
「A scriptable web server for testing HTTP clients」ということで、良さそうなので導入したいです。 

[MockWebServer](https://github.com/square/okhttp/tree/master/mockwebserver)

*quoted from* 
*[僕がテスト書け書けおじさんになった経緯とその過程でやったこと](https://speakerdeck.com/yuyakaido/droidkaigi-2016)*

### **gradle.propertiesへの追記**

```groovy:gradle.properties
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true
```
[こちらの記事](http://qiita.com/konifar/items/d0392b6428a47262ab0b)にもまとまっていますが、これまでgradle.propertiesに追記しようしようと思いつつ、都度忘れ、都度「./gradlew --daemon hoge」みたいにしてたので、これを機に追記します:droplet:

*quoted from* 
*[怖くないgradleでのビルド環境設定とBazel](http://www.slideshare.net/shimadatatsuya/gradlebazel)*

### **ext {...}**
[ExtraPropertiesExtension](http://gradle.monochromeroad.com/docs/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html)

```groovy:build.gradle
ext {
    supportLibVersion = '23.1.1'
}
dependencies {
    compile "com.android.support:design:${supportLibVersion}"
    compile "com.android.support:cardview-v7:${supportLibVersion}"
}
```
*quoted from* 
*[Support Libraryノススメ/Support Library Internal](http://yaraki.github.io/slides/droidkaigi2016/#1)*

### **パッケージ名の省略記法**
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">&lt;a.s.d.w.CoordinatorLayout てスライド書くの賢いわー <a href="https://twitter.com/hashtag/droidkaigi?src=hash">#droidkaigi</a></p>&mdash; Yuki Anzai (@yanzm) <a href="https://twitter.com/yanzm/status/700494851276603392">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

長くなりがちなパッケージ名を短く、かつ、分かりやすく省略できるので、自分も使っていきたいと思いました。
自分が公開している[AndroidCoverageCheckプラグイン](https://github.com/shikato/gradle-android-coverage-check)でも使えそうなので、とりあえず[issue](https://github.com/shikato/gradle-android-coverage-check/issues/20)を立てておきました。
（最初、Layoutファイル上でだと↑の記法が使えるのかと思い試してみたら「aused by: android.view.InflateException: Binary XML file line #36: Error inflating class 〜」ということで普通に怒られてしまいました:droplet:） 

*quoted from* 
*[Support Libraryノススメ/Support Library Internal](http://yaraki.github.io/slides/droidkaigi2016/#1)*


### **規模が大きくなれば「たぶん動くと思うからリリースしようぜ」はダメ**
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">規模が大きくなれば「たぶん動くと思うからリリースしようぜ」はダメ <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a> <a href="https://twitter.com/hashtag/DroidKaigiA?src=hash">#DroidKaigiA</a></p>&mdash; Yoshiaki NAKANISHI (@chun_ryo) <a href="https://twitter.com/chun_ryo/status/700509454299607040">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script> 
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">少人数のころ: “多分動くからリリースしようぜ！” -&gt; &gt;14000 crash / day!!!!!&lt; <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a> <a href="https://twitter.com/hashtag/DroidKaigiA?src=hash">#DroidKaigiA</a></p>&mdash; メタルガルエギモン (@tacksman) <a href="https://twitter.com/tacksman/status/700508936437280769">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

私は最近、アプリ自体の開発はあまりしておらず、ライブラリ的な開発ばかりなのですが、そのライブラリは社内の多くのアプリに組み込まれたりするので、改めて肝に銘じておきたい所です。

*quoted from* 
*[クックパッドにおけるAndroidエンジニアの役割とその変遷](https://speakerdeck.com/sys1yagi/kutukuhatutoniokeruandroidensiniafalseyi-ge-tosofalsebian-qian)*

### **[dokumi](https://github.com/cookpad/dokumi)**
[以前見かけた時](http://techlife.cookpad.com/entry/2015/06/04/dokumi-ja)は、まだiOSのみの対応だった気がするけど、Androidにも対応されたようなので、なるはやで試してみたいです。

*quoted from*
*[クックパッドにおけるAndroidエンジニアの役割とその変遷](https://speakerdeck.com/sys1yagi/kutukuhatutoniokeruandroidensiniafalseyi-ge-tosofalsebian-qian)*


### **同じ船に乗る**
丁度いま、部署横断PJ的なものに関わっているので、スライドにあった以下のポイントは、常に意識しておきたいと思いました。

* 関係者の日々の継続的な会話で意識がズレない
* チャットでのイベントの可視化による議論の活性化
* やりたい事や要望を話せる雰囲気
* 本当にやるべきかを真剣に議論しあえる雰囲気
* 部署横断的に改善を続ける雰囲気

*quoted from* 
*[クックパッドにおけるAndroidエンジニアの役割とその変遷](https://speakerdeck.com/sys1yagi/kutukuhatutoniokeruandroidensiniafalseyi-ge-tosofalsebian-qian)*

### **計測は未給電で**
チャージされているときはデバイスの振る舞いが変わるみたいです。

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*

### **電池のゆとりはこころのゆとり**

計測には、[Battery Historian](https://github.com/google/battery-historian)（Google謹製（golang））が便利そうです。

消費電力の5-7割はアイドル時に消費される傾向（らしい）ということで、バッググラウンドでの消費を減らすのことが大事。
5.0からはJobSchedulerを使い、それ未満ではGCM Network Managerで代用できるらしいです。

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*


### **時間と利用者の反応の指標**

|   遅延時間  |       利用者の反応      |
|:-----------:|:-----------------------:|
|  0 - 100ms  | Instant                 |
| 100 - 300ms | Feel sluggish           |
|  300ms - 1s | Machine is working…   |
|     1s +    | Mental context switch   |
|    10s +    | I'll come back later… |

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*

### **Jankを避ける(減らす)ことが大事**
レンダリングが間に合わなければ**Jank**が発生する(フレームがスキップされる→アニメーションの省略やジャンプが発生→リストがかたついたように見えたり)

#### **ViewのMeasure → Layout → Drawにかかる時間の計測など**
Measure → Layout → Draw の各段階でかかっている時間は[Hierarchy Viewer](http://developer.android.com/intl/ja/tools/help/hierarchy-viewer.html)で確認できる。
Drawに最も時間がかかる状態が一般的なので、Measureが遅い場合は対策の価値がある。
（原因は大抵レイアウトのネスト） 
Drawが遅い場合はOverdrawを疑う。Overdraw→他のViewが描写した領域を別のViewがさらに描写すること。
開発者向けオプションの「**GPU オーバードローをデバッグ**」で確認できる。
ただ、Kitkat以降では単純なOverdrawは自動的に無視してくれるようになったので、Kitkat以降だと、そんなに気にしなくても良いかも。

#### **GPUのプロファイル**
開発者向けオプションの「**GPU レンダリングのプロフィール作成**」。
16msのボーダーに収まっていればOK。

#### **dumpsys gfxinfo**
描写状況を出力してくれる。
Marshmallowから、**Jank**の情報も出力してくれるようになった。

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*


### **[LeakCanary](https://github.com/square/leakcanary)**
こちらも「導入する」みたいなissueだけ登録して、満足してしまっていました:droplet:
多くの発表者が良いと言っていたと思うので、これを機にちゃんと導入します。

*quoted from* 
*[OSSの動向を捉えた実装方針](https://speakerdeck.com/wasabeef/day1-keynote-in-droidkaigi-2016)*
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*

### **「[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)」資料の「最後に」スライドに書かれていたこと**
* 非機能を頑張ろう
 * 非機能を頑張れるかどうかがデベロッパーとしての価値を大きく左右する（気がする）
* 複数の視点で見ることが大事
 * 推測はアテにならない。可視化、計測大事
* 積み重ね大事
 * 部屋の掃除と一緒。毎日少しずつ気をつけていれば綺麗なまま。少しづつでも継続する（継続できることをする）

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*

### **[Bintray](https://bintray.com/)にupload**
自分が公開している[AndroidCoverageCheckプラグイン](https://github.com/shikato/gradle-android-coverage-check)と[info-dumper](https://github.com/shikato/info-dumper)で、またもや[issueだけ登録して満足する、](https://github.com/shikato/info-dumper/issues/10)という状態になっていたので、スライドを参考にして対応します:droplet:

*quoted from* 
*[ライブコーディング・Androidのライブラリを作ってみよう](http://www.slideshare.net/masatakakono1/android-58450612)*

### **リファクタリングと機能追加をわける**
やりがちなので、出来る限り細かい粒度でPRします。
*quoted from* 
*[5 年続く 「はてなブックマーク」 アプリを継続開発する技術](http://www.slideshare.net/YuNobuoka/5-58454512)*


## 将来的に活かせそうな知見 
### **OSS関連の知見**
最近は、ライブラリ開発関連の仕事が多く、あまりOSSを気軽に使えないのですが、アプリを一から作る際には活用したいです。
あと、[Stetho](http://facebook.github.io/stetho/)はdebugビルドのみの導入で良いので使用しているのですが、wasabeefさんの発表中に「良さそう」みたいなツイートが幾つかあって、実際にかなり便利なので、改めて導入しておいて良かったなと感じました。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Stetho、こう言うのが欲しかった感じ。これは使おう。 <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a></p>&mdash; たかさん (@takagerbera) <a href="https://twitter.com/takagerbera/status/700136409554747392">2016, 2月 18</a></blockquote><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script><blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Stetho つなぐと、メモリ使用量の増加とGCのセットが定常的に観測できるが Stetho を切るとちゃんとメモリ使用量が増えなくなるので安心してください <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a></p>&mdash; KeithYokoma (@KeithYokoma) <a href="https://twitter.com/KeithYokoma/status/700137923224563712">2016, 2月 18</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
Stethoは[Custom dump plugin機能](http://qiita.com/shikato/items/50e23e64aacbeb49c172)も便利なので、興味の有る方は使ってみると良いと思います。
(自分も[StethoのCustom dump pluginをOSSとして一つ公開](https://github.com/shikato/info-dumper)しています)

wasabeefさんの発表で紹介されたOSSは以下の記事にまとめられています。
[DroidKaigi 2016 で 紹介された Android開発に役立つ ライブラリ 集](http://qiita.com/hidenorly/items/b3ee7f1df5c53cce2873)

*quoted from* 
*[OSSの動向を捉えた実装方針](https://speakerdeck.com/wasabeef/day1-keynote-in-droidkaigi-2016)*

### **Canvasを使って新しいUIコンポーネントを作りたい**
今までAndroidのCanvasをちゃんと使った事が無かったのですが、[amyu_sanさんの発表/資料](http://www.slideshare.net/mimayuki7/master-of-canvas)が分かりやすすぎて、自分もCanvasを使って何か作りたくなりました。
とりあえず[リポジトリ](https://github.com/shikato/ShikatoUIView)だけ作りました（リポジトリ名は後で多分変えます :octocat: ）
[ShikatoUIView](https://github.com/shikato/ShikatoUIView)  

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ベジエ曲線の組み合わせで玉が落ちるアニメを実装… 芸術だ… <a href="https://twitter.com/hashtag/droidkaigiB?src=hash">#droidkaigiB</a></p>&mdash; かっしー @Andriders (@kassy_kz) <a href="https://twitter.com/kassy_kz/status/700146597112352770">2016, 2月 18</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ベシェ曲線の話、職人感すごい<a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a> <a href="https://twitter.com/hashtag/DroidKaigiB?src=hash">#DroidKaigiB</a></p>&mdash; こにふぁー (@konifar) <a href="https://twitter.com/konifar/status/700146621175074816">2016, 2月 18</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">資料の完成度が高すぎて資料だけで理解できる感じだ<a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a> <a href="https://twitter.com/hashtag/DroidKaigiA?src=hash">#DroidKaigiA</a></p>&mdash; なっぴー (@napplecomputer) <a href="https://twitter.com/napplecomputer/status/700151462060380160">2016, 2月 18</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

*quoted from* 
*[Master of Canvas](http://www.slideshare.net/mimayuki7/master-of-canvas)*

### **サポートライブラリのバグは[b.android.com](https://b.android.com)へ**
[b.android.com](https://b.android.com)

*quoted from* 
*[Support Libraryノススメ/Support Library Internal](http://yaraki.github.io/slides/droidkaigi2016/#1)*

### **compileSdkVersionとsupportLibraryのバージョンは揃える**
今まで、あまり意識したは事はなかったですが、supportLibraryはcompileSdkVersionのバージョンが揃ってる前提で作られてるみたいです。

*quoted from* 
*[Support Libraryノススメ/Support Library Internal](http://yaraki.github.io/slides/droidkaigi2016/#1)*


### **AppCompatなんとかのことは忘れていい**
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">AppCompatなんとかのことは忘れていい <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a></p>&mdash; 明日鍵 (@tomorrowkey) <a href="https://twitter.com/tomorrowkey/status/700489718794813440">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">AppCompatがTextViewみたらAppCompatTextView作ってくれるから基本的にはAppCompatほげほげはつかわなくていい（Custom Viewsの継承元には使う） <a href="https://twitter.com/hashtag/droidkaigi?src=hash">#droidkaigi</a></p>&mdash; いずみん (@izumin5210) <a href="https://twitter.com/izumin5210/status/700489816975085568">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

*quoted from* 
*[Support Libraryノススメ/Support Library Internal](http://yaraki.github.io/slides/droidkaigi2016/#1)*

### **[Cookpadさんのリリースフロー](http://techlife.cookpad.com/entry/2015/02/25/093000)**
[クックパッドモバイルアプリの開発体制とリリースフロー](http://techlife.cookpad.com/entry/2015/02/25/093000)

*quoted from* 
*[クックパッドにおけるAndroidエンジニアの役割とその変遷](https://speakerdeck.com/sys1yagi/kutukuhatutoniokeruandroidensiniafalseyi-ge-tosofalsebian-qian)*

### **[AT&T ARO](https://github.com/attdevsupport/ARO)**
AT&T製の通信最適化ツール。要rooted。
[ARO](https://github.com/attdevsupport/ARO)

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*

### **CPU最適化(?)**
```
dumpsys cpuinfo
```
* [Systrace](http://developer.android.com/intl/ja/tools/help/systrace.html)
* [Rrepn Power Profile](https://developer.qualcomm.com/software/trepn-power-profiler)

*quoted from* 
*[パフォーマンスを追求したAndroidアプリを作るには](https://speakerdeck.com/t_egg/droidkaigi-2016-pahuomansuwozhui-qiu-sitaandroidapuriwozuo-runiha)*


### **DFaaS（造語?）とSTF**
* [AWS Device Farm](https://aws.amazon.com/jp/device-farm/)
* [Cloud Test Lab](https://developers.google.com/cloud-test-lab/)
* [STF](https://github.com/openstf/stf)

*quoted from* 
*[Android CI: 2016 edition](https://speakerdeck.com/gyugyu/android-ci-2016-edition)*

### **テスト用のビルドタイプ**
ProGuardかけてのテストは良さそうです。

*quoted from* 
*[5 年続く 「はてなブックマーク」 アプリを継続開発する技術](http://www.slideshare.net/YuNobuoka/5-58454512)*

### **[JVM上でのユニットテスト](http://tools.android.com/tech-docs/unit-testing-support)**
[Android Gradle Plugin 1.1からAndroidに依存しないテストをJVM上で実施できるようになったこと](http://tools.android.com/tech-docs/unit-testing-support)は知っていたのですが、全部のユニットテストがそれで書けるわけではなさそう、テストやカバレッジのレポートがAndroid Testと分散しそう、そもそもカバレッジがAndorid Test同様簡単に計測できるか分からない、等がいろいろと気になっていたので、これまで全てのテストをAndroid Testとして書いていました。
ですが、何人かの発表者の方々がJVM上でのユニットテストを実施しているようだった、という点と、高速にテストを完了させられるのは、やはり魅力的なので、これからはAndroidに依存しないテストはJVM上でのユニットテストに移行することも考慮していきたいです。

*quoted from* 
*[僕がテスト書け書けおじさんになった経緯とその過程でやったこと](https://speakerdeck.com/yuyakaido/droidkaigi-2016)*
*[Android CI: 2016 edition](https://speakerdeck.com/gyugyu/android-ci-2016-edition)*
*[5 年続く 「はてなブックマーク」 アプリを継続開発する技術](http://www.slideshare.net/YuNobuoka/5-58454512)*



## **興味が満たされた知見**

### **Isntant Runはまだ早くなる余地がある?**
「[Instant Runを実現する仕組み](https://speakerdeck.com/atsushieno/how-instant-run-works-at-droidkaigi2016)」で発表者のAtsushi Enoさん(Xamarinの人?)が、Gradleの上に成り立っているInstant Runは、まだ早くなる余地がある?という夢のある話?をしていました。
[コードを修正したら、即座にアプリに反映されるContinuousのデモ(iOS/Xamarin)](https://pbs.twimg.com/tweet_video/CXb1RaBU0AAEldo.mp4)
[The Evolution of Interactive C#](http://tirania.org/blog/archive/2016/Feb-17.html)

ちなみに他には、Instant RunはDataBindingやKotlinと相性が悪い、次世代ビルドツール候補?の[Bazel](http://bazel.io/)には「インクリメンタル インストール」というInstant Run相当の機能が既にある?、そもそもInstant Runのソースは公開されていないので全部推測で話している(とてもそうとは思えない詳細な発表でした)、などの驚きの話がたくさんありました。

その辺りの詳細は、[Atsushi Enoさんご自身が書いた記事](http://qiita.com/atsushieno/items/141f790a9bbaa93b62c1)に書かれています。

*quoted from* 
*[Instant Runを実現する仕組み ](https://speakerdeck.com/atsushieno/how-instant-run-works-at-droidkaigi2016)*


### **アニメーションFWの整理**
2年くらい前に[Property Animationについての記事](http://techblog.yahoo.co.jp/programming/androidiphone/)を自分で書いていたにもかかわらず、[ViewProprtyAnimation](http://developer.android.com/intl/ja/reference/android/view/ViewPropertyAnimator.html)のことを知らなかったり（[記事中]((http://techblog.yahoo.co.jp/programming/androidiphone/))では[ObjectAnimator](http://developer.android.com/intl/ja/reference/android/animation/ObjectAnimator.html)に触れているのみ）と、自分の中で色々と情報を整理/更新することができました。 

*quoted from* 
*[用途に合わせたアニメーションの実装方法](http://www.slideshare.net/TakaoSumitomo/ss-58409105)*

### **[Bazel](http://bazel.io/)は今年の12月にAndroid Studioに統合される?**
[Bazel Feature Roadmap](http://bazel.io/roadmap.html)によると、今年の12月にAndroid Studioに統合する予定らしいです。
ただ、発表者のusaganikkiさんによると、Roadmapの日付がガンガン更新されており順調に遅れている?ようです。
いずれにせよ、Gradleとのすみ分け等、いろいろと気になる所です。 

*quoted from* 
*[怖くないgradleでのビルド環境設定とBazel](http://www.slideshare.net/shimadatatsuya/gradlebazel)*


### **基本的にはsupport-v4のFragmentを使うのが正しい**
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">suport libraryのメンテナ「基本的にはsuport-v4のfragmentを使うのが正しい」 <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a></p>&mdash; FUJI Goro (@__gfx__) <a href="https://twitter.com/__gfx__/status/700489144510734336">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">通常のFragmentじゃなくてsupportのFragment使いましょう。バグフィックスも入っているので <a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a></p>&mdash; Yoshiaki NAKANISHI (@chun_ryo) <a href="https://twitter.com/chun_ryo/status/700488841459699712">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">昔すげー悩んだけどv4のFragmentのほうがいいのか、初学者にはややこしすぎない？<a href="https://twitter.com/hashtag/DroidKaigi?src=hash">#DroidKaigi</a></p>&mdash; yamamuro (@Reat_hy) <a href="https://twitter.com/Reat_hy/status/700488969453117441">2016, 2月 19</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

自分も昔、すごい悩みました。

*quoted from* 
*[Support Libraryノススメ/Support Library Internal](http://yaraki.github.io/slides/droidkaigi2016/#1)*


## **さいごに**
まだまだ他にも知見はあったように思いますが、まとめるのに疲れてきたので、ここで終了とします :droplet: 
自分が見れなかった発表も[後日公開](https://www.youtube.com/channel/UCgK6L-PKx2OZBuhrQ6mmQZw)されるようなので、時間を見つけてキャッチアップしたいです。
2日とも参加させていただきましたが、両日共に、とても充実した発表ばかりでした。
発表者やスタッフの方々お疲れ様でした:exclamation: