DroidKaigi 2017 で 紹介された Android開発に役立つ ライブラリ 集 と スライドリンクまとめ

# DroidKaigi 2017

DroidKaigi 2017 の 各session で 使われた資料 (後で裏に移動) への リンク を まとめてみた。
また、紹介されていたlibraryなどについてまとめてみた。

[DroidKaigi 2016のはこちら](http://qiita.com/hidenorly/items/b3ee7f1df5c53cce2873)です。

スライドへのリンク情報が不足していますので、ご存知の方教えてください。


# 資料

## Day 1 (Mar 9th, 2017)

* [ウェルカムトーク / Welcome talk](https://www.slideshare.net/mhidaka/droidkaigi-2017-welcometalk-day01) by @mhidaka氏

* [マッチョActivityを改善した話](https://speakerdeck.com/lvla/activitywogai-shan-sitahua) by @lvla0805氏


* [How to apply DDD to Android Application Development](http://y-anz-m.blogspot.jp/2017/03/droidkaigi-2017_9.html) by あんざいゆき（@yanzm）氏

* [逆引き マテリアル デザイン](http://yaraki.github.io/slides/droidkaigi2017/#1) by 荒木佑一氏(@yuichi_araki氏)

* [Data binding in the real world](https://speakerdeck.com/oldergod/the-data-binding-library) by Kevin Pelgrims氏
  * https://github.com/oldergod/DataBindingDemo


* [minneにおけるテスト〜リリース〜リリース後にやっている事の紹介](https://www.slideshare.net/masatakakono1/minne-72969795) by @mapyo氏

* [Android Security 最前線！！](https://speakerdeck.com/yanokuro/androidsecurityzui-qian-xian) by Naoki Yano氏


* [リリース自動化と効率のよいリリースフローを求めて](https://speakerdeck.com/wakwak3125/ririsuzi-dong-hua-falsedao-ru-toxiao-lu-falseliang-iririsuhurowoqiu-mete) by Ryo Sakaguchi氏



* [Don't reset --hard: Strategies for Tackling Large Refactors](https://speakerdeck.com/sienatime/dont-reset-hard-strategies-for-tackling-large-refactors) by Siena Aguayo氏



* [インスペクションとAndroid Lint Custome Ruleによる、単一責任実装の実践](https://www.slideshare.net/cch-robo/android-lintsrppractice) by robo氏



* [Androidリアルタイム通信アプリ作成Tips](https://speakerdeck.com/srym/android-realtime-library) by @fushiroyama氏



* [エラーと戦うためのデバッグ法](https://speakerdeck.com/ymnder/eratozhan-utamefalsedebatugufa) by 山﨑亮氏(やまんだー
@ymnd氏)

* [App Shortcuts in Android Nougat 7.1](https://docs.google.com/presentation/d/15ZbhfE5O1kDLvOcqq7kddk-yD0vMT-dcHc-vCxm2A7E/edit#slide=id.p) by Caren Chang氏
    * https://twitter.com/calren24


* [大規模アプリのリノベーション](https://speakerdeck.com/funnelbit/droidkaigi-2017-renovation) by 北村　涼(@experopero)氏
    * [DroidKaigi 2017 で「大規模アプリのリノベーション」の発表を行いました](http://developer.hatenastaff.com/entry/2017/03/15/171819)

* [Function introduction of Google Play Services](https://speakerdeck.com/syarihu/droidkaigi-2017-function-introduction-of-google-play-services) by @syarihu氏

* [Data Binding on Android ](https://speakerdeck.com/kevinpelgrims/data-binding-on-android) by Kevin Pelgrims (@kevinpelgrims)氏


* [Android定期実行処理入門](https://speakerdeck.com/kazy1991/droidkaigi-2017) by kazy(kazuki yoshida)氏



* Android Resources Refactoring by @konifar 氏
    * https://speakerdeck.com/konifar 以下に公開されるのではないかと思います。


* [トークアプリで絵文字を実装した話](https://speakerdeck.com/futaboooo/tokuapuridehui-wen-zi-woshi-zhuang-sitahua) by @futabooo 氏



* [What is tested by pre-launch (security) reports?]
(https://www.slideshare.net/ak_shio_555/what-is-tested-by-prelaunch-security-reports) by Akihiro Shiota氏



* [実践アニメーション]() by Naoya Yunoue氏
  * https://github.com/citrous/practicalanimation

* [解剖 Kotlin ~バイトコードを読み解く~](https://speakerdeck.com/sys1yagi/jie-pou-kotlin-baitokodowodu-mijie-ku) by @sys1yagi 氏



* [Androidアプリ開発の体力づくり💪](https://speakerdeck.com/operando/androidapurikai-fa-falseti-li-dukuri) by @operandoOS 氏
    * https://drive.google.com/file/d/0B0-W0E8q6FeEeHN6T2d6UTB5bE0/view
    * https://github.com/operando/DroidKaigi/tree/master/2017/muscle_android


* [オフラインファーストなアプリケーション開発](https://speakerdeck.com/zaki50/ohurainhuasutonaapurikesiyonkai-fa) by @zaki50 氏



* [変更に強いEspressoテストコードを効率良く書こう](https://speakerdeck.com/sumio/droidkaigi2017-lets-write-sustainable-espresso-test-rapidly) by 外山純生 (sumio_tym)氏
    * https://github.com/sumio/espresso-sample-for-droidkaigi2017



* [Exploring new Android layouts](https://docs.google.com/presentation/d/1xabw73cQO5MaYGZOAdwYl9PYb9CnnjeuLTjzVHWQySM/edit#slide=id.p) by thagikura氏
    * https://developer.android.com/training/constraint-layout/index.html
    * https://github.com/googlesamples/android-ConstraintLayoutExamples



* [Viewを動的に変化させるアプローチ](http://qiita.com/cattaka/items/e7a269ef4ccf64036df2) by Takao Sumitomo氏



* [How to remodel current testing environment]
(https://speakerdeck.com/jmatsu/how-to-remodel-current-testing-environment) by red_fat_daruma氏



* [React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか](https://www.slideshare.net/Nkzn/react-native-72974450/1) by 中川幸哉（@Nkzn）氏



* [全てSになる〜RxJavaとLWSを持ち込む楽しさ〜](https://www.slideshare.net/ryugoo/s-rxjavalws) by ryugoo氏
    * http://blog.384ta.com/droidkaigi-2017
    * https://github.com/aNNiMON/Lightweight-Stream-API
    * https://github.com/evant/gradle-retrolambda
    * https://github.com/ReactiveX/RxAndroid
    * https://github.com/ryugoo/StreamDemo


* [Reverse engineering is not just for hackers!](https://speakerdeck.com/jonreeve/reverse-engineering-is-not-just-for-hackers) by Jon Reeve氏

* [AccessibilityServiceを使ってアプリの可能性を広げよう](https://speakerdeck.com/litmon/accessibilityservicewoshi-tuteapurifalseke-neng-xing-woguang-geyou) by 門田福男氏



* [Android Bikeを作ろう](https://speakerdeck.com/tnj/lets-make-android-bike) by tnj氏
    * https://www.youtube.com/watch?v=uHM2u2byd30
    * https://github.com/tnj/android-bike-proto



* [What's New in RxJava 2.0](https://speakerdeck.com/hkurokawa/whats-new-in-rxjava-2) by [hydrakecat](https://twitter.com/hydrakecat)氏



* [少し幸せになる技術](https://speakerdeck.com/kamedon/shao-sixing-senisuruji-shu) by kamedon氏



## Day 2 (Mar 10th, 2017)

* [ウェルカムトーク / Welcome](https://www.slideshare.net/mhidaka/droidkaigi-2017-welcometalk-day02) talk by @mhidaka氏



* [Xamarin.Android で始めるクロスプラットフォームモバイルアプリ開発](https://speakerdeck.com/amay077/xamarin-dot-android-teshi-merukurosuhuratutohuomumohairuahurikai-fa-number-droidkaigi-number-droidkaigi1) by @amay077氏
    * http://blog.amay077.net/blog/2017/03/10/had_a_session_about_xamarin_android_in_droidkaigi2017/



* [Android ORMの選び方](http://gfx.hatenablog.com/entry/2017/03/10/141908) by @gfx氏



* [Androidアプリのストレージ戦略 ～AndroidってSDカード使えるんでしょ？～](https://www.slideshare.net/mhidaka/android-73008326) by @mhidaka氏



* [Better Android Intents with Dart & Henson](https://speakerdeck.com/stephanenicolas/dart-and-henson-better-android-intents) by Daniel Molinero Reguera氏
    * https://medium.com/groupon-eng/better-android-intents-with-dart-henson-1ca91793944b



* [How to implement material design animation](https://speakerdeck.com/takahirom/how-to-implement-material-design-animation) by @takahirom氏
    * https://twitter.com/nyanyoni/status/840560764486205447



* [Building my own debugging tool on overlay](https://speakerdeck.com/keithyokoma/build-my-own-debugging-tool-on-overlay) by @KeithYokoma氏



* [未熟なチーム開発](https://speakerdeck.com/kgmyshin/unskilled-team-development-for-droidkaigi) by kgmyshin氏



* [個人で11個のアプリを公開した結果](https://speakerdeck.com/syarihu/droidkaigi-2017-ge-ren-de11ge-falseapuriwogong-kai-sitajie-guo) by @syarihu氏



* Gradle basics by @hotchemi氏
    * https://speakerdeck.com/hotchemi
    * https://github.com/hotchemi



* [How to find problem causes and improve performance](https://speakerdeck.com/muumuumuumuu/how-to-find-problem-causes-and-performance-improvement) by Fukui Atsuko氏



* [Data Bindingで実現するMVVM Architecture](https://speakerdeck.com/star_zero/databindingteshi-xian-surumvvm-architecture) by Kenji Abe(@STAR_ZERO)氏
    * https://github.com/STAR-ZERO/AndroidMVVM



* [Kotlin + RxJava + Dagger2 + Orma + Retrofit で作るAndroidアプリ](https://speakerdeck.com/lvla/kotlin-plus-rxjava2-plus-dagger2-plus-orma-plus-retrofit2-dezuo-ruandroidapuri) by @lvla0805氏
    * https://github.com/lvla/DroidKaigi2017Contributors



* [いまからはじめるAndroid 6.0対応 〜Android 7.0から8.xを見つめて〜](https://speakerdeck.com/yamacraft/imakarahazimeruandroid-6-dot-0dui-ying) by @yamacraft氏
    * http://qiita.com/yamacraft



* [Systemアプリ開発入門](https://speakerdeck.com/shinjikobayashi/systemapurikai-fa-ru-men) by kobashin氏



* [4年続くアプリにおけるチーム開発](https://speakerdeck.com/cutmail/4nian-sok-kuapuriniokerutimukai-fa-number-droidkaigi-2017) by @cutmail氏



* [AndroidTV「もしかして...」 FireTV「俺たち...」 「「全然対応されてない〜〜！！？？」」](https://speakerdeck.com/ogaclejapan/your-app-name) by @ogaclejapan氏



* [Androidで音声認識を使いこなす](https://speakerdeck.com/kakka/20170310) by KAKKA氏



* [Can You Read Your Tests? Clean and Useful Android Testing, with JUnit and Spock!](https://speakerdeck.com/jonreeve/can-you-read-your-tests-clean-and-useful-android-testing-with-junit-and-spock) by Jon Reeve氏



* [Chrome Custom Tabsをさらに使いこなそう](https://speakerdeck.com/sakebook/make-full-use-of-chrome-custom-tabs) by @sakebook氏



* [2つのアプリ、1つの設計のデザイン指針](https://speakerdeck.com/meyco/2tufalseahuri-1tufalse-she-ji-falsetesainzhi-zhen) by meyco氏



* [位置情報を正確にトラッキングする技術](https://speakerdeck.com/mizutori/wei-zhi-qing-bao-wozheng-que-nitoratukingusuruji-shu) by 水鳥敬満([mizutory](https://twitter.com/mizutory))氏
    * https://medium.com/location-tracking-tech
        * [RunKeeperやNike+並みのパフォーマンスを実現する高精度位置情報フィルターの作り方 — 位置情報を正確にトラッキングする技術 in Android (第3回)](https://medium.com/@mizutory/a0bde562e616)
    * https://github.com/mizutori/AndroidLocationStarterKit



* [コマンドなしでぼくはAndroid開発できない話](https://speakerdeck.com/operando/komantonasitehokuhaandroidkai-fa-tekinaihua-1) by @operandoOS氏



* [LayoutInflater - friend or foe?](https://github.com/chrisjenx/DroidKaigi) by chrisjenx氏
    * https://github.com/InflationX/Calligraphy



* [エンジニアが武器にするMaterial Design](https://speakerdeck.com/seto_hi/enziniagawu-qi-nisurumaterial-design) by 瀬戸優之氏



* [Error Handling in RxJava](https://speakerdeck.com/yuyakaido/droidkaigi-2017) by @yuyakaido氏



* [Smoke and Mirrors in Android UI](https://gotocon.com/dl/goto-cph-2016/slides/IsraelFerrerCamacho_SmokeMirrorsTheMagicBehindWonderfulUIInAndroid.pdf) by Israel Camacho @rallat氏
    * https://realm.io/news/gotocph-israel-ferrer-camacho-android-ui/



* [Kotlinを始めようハンズオン](https://speakerdeck.com/ntaro/kotlinwoshi-meyouhanzuon-number-droidkaigi-number-droidkaigi6) by 長澤太郎 @ngsw_taro氏



* [テスト0から目指すクラッシュフリー率99%](https://speakerdeck.com/srym/journey-to-99-percent-crash-free) by @fushiroyama氏
    * https://github.com/srym/vulture



* [ドキッ★脆弱性 onCreate() から onDestroy() まで](https://speakerdeck.com/ken5scal/dokitucui-ruo-xing-oncreate-kara-ondestroy-made) by @ken5scal /鈴木研吾氏



* [CIの導入における選択肢と、最高の環境](https://speakerdeck.com/komatatsu/droidkaigi2017) by komatatsu氏



* [LayoutManagerをつくろう](https://speakerdeck.com/consomme/layoutmanagerwotukurou) by @consomme72氏
    * https://github.com/consomme/DroidKaigi2017Sample

* [fireside chat](https://gist.github.com/ryugoo/df2dcce6e28d180cc4c51c7776c17a4a)


# Key technologies

## framework

### Realm

* https://realm.io/

引用:

> Realm’s developer-friendly platform makes it easy to build reactive apps, realtime collaborative features, and offline-first experiences.

とのこと。reactiveのアプリを作るためのplatform. realtimeなnetworkアプリだけでなく、offlineを考慮している。

引用:

> Realm Mobile Platform
>モバイルアプリでデータ同期を可能にします。リアクティブなアプリをたった10行以下のコードで実現します。Realm Mobile Platformは、Realm Object ServerとRealm Mobile Databaseを統合した製品です。

> Realm Mobile Database
>品質の良いアプリには良いデータベースが必要です。Realm Mobile Databaseを使うことで、わずかな時間でアプリを開発できます。RealmオブジェクトデータベースはSQLiteやCore Dataをよりシンプルな形に置き換えます。そしてオープンソースです。

ともあり、元音は、databseからはじまって、server側のmodelとのリアルタイム同期と、reactiveな要素を取り入れたもののようです。

* 参考
  * https://qiita.com/tags/realm

### React Native

* https://facebook.github.io/react/

> * A JavaScript library for building user interfaces 
> * React makes it painless to create interactive UIs.
> * React will efficiently update and render just the right components when your data changes.

* [Comparing the Performance between Native iOS (Swift) and React-Native](https://medium.com/the-react-native-log/comparing-the-performance-between-native-ios-swift-and-react-native-7b5490d363e2)

## Database

### Orma

Ormaは、Android SQLite databaseに対するObject Relation Mapperで、annotationによるcompile時点でのhelper class生成ができます。これは、ActiveAndroidやGreeDAOやRealmにinspireされています。

> Orma is an ORM (Object-Relation Mapper) for Android SQLiteDatabase, generating helper classes at compile time with annotation processing, inspired in ActiveAndroid, GreenDAO, and Realm.

* 本家
    * https://github.com/gfx/Android-Orma
    * [AndroidのORMに求めること、あるいはOrmaを開発した話](http://gfx.hatenablog.com/entry/2015/11/14/214559)
    * [Android Orma入門](http://gfx.hatenablog.com/entry/2016/01/25/215003)
* 関連
    * [Kotlin + Dagger2 + Orma + Databinding + Android Studio 2.1 に嵌まる](http://qiita.com/chibatching/items/e5a0f5016093abec884b)

# Language

### Kotlin

> Statically typed programming language for the JVM, Android and the browser

* https://kotlinlang.org/
* slack : http://kotlinlang-jp.herokuapp.com/

### Lightweight-Stream-API

Java 7やそれ以前向けに、iteratorsを書き直したStream APIです。

* 本家
 * https://github.com/aNNiMON/Lightweight-Stream-API
* 記事
 * http://qiita.com/tsumuchan/items/8e438a2ea653fa786c23

### Retrolambda

Java 6, 7やAndroid向けにJavaのラムダをサポートするためのgradle plug-in.

* 本家
 * https://github.com/evant/gradle-retrolambda
* 記事
 * http://qiita.com/kamimoo/items/f4b3ef22ca0327e88e32

## DI : Dependency Injection


### RxAndroid

* https://github.com/ReactiveX/RxAndroid

> Android specific bindings for RxJava 2.

* ご参考
    * migration otto (eventbus) to RxJava
http://blog.kaush.co/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/


### RxJava2

* https://github.com/ReactiveX/RxJava

> RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. 

### RxLifecycle

> Lifecycle handling APIs for Android apps using RxJava 

* https://github.com/trello/RxLifecycle

### Vulture

> Vulture is an Android library that let you handle asynchronous callbacks properly within Activity/Fragment's life cycle.
>
> Vulture frees you from the hassle with IllegalStateException when coping with FragmentTransaction#commit() after onSaveInstanceState.


* https://github.com/srym/vulture

### Dagger

AndroidとJava向けの高速dependency injectorです。

* http://square.github.io/dagger/ (original)

* https://google.github.io/dagger/ (forked by Google!)
    * https://github.com/google/dagger

> Dagger is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation of an earlier version created by Square and now maintained by Google.
>
> Dagger aims to address many of the development and performance issues that have plagued reflection-based solutions. 

* 関連
    * Yukiの枝折の[Android: Dagger2](http://yuki312.blogspot.jp/2016/03/android-dagger2.html)
    * [Dagger2 導入Step By Step](http://qiita.com/ko2ic/items/6e140c8e1a3568ced2ee) by @ko2ic 氏

# System

### Google Play

* overview : https://developers.google.com/android/guides/overview
* setup : https://developers.google.com/android/guides/setup

### android-job

* https://github.com/evernote/android-job

> An utility library for Android to run jobs delayed in the background. Depending on the Android version either the JobScheduler, GcmNetworkManager or AlarmManager is getting used. You can find out in this blog post or in these slides why you should prefer this library than each separate API. All features from Android Nougat are backward compatible.

JobSchedulerや, GcmNetworkManager, AlarmManagerに対するutility libraryで、backward compatibilityも考慮されている。なんとevernote製。

Evernote独自ですが、BSDライクなライセンスのようです(注:
使う前に自分で確認してください。)

* 参考
  * https://github.com/operando/JobScheduler-Code-Reading
  * https://github.com/firebase/firebase-jobdispatcher-android
        * The Firebase JobDispatcher is a library for scheduling background jobs in your Android app. It provides a JobScheduler-compatible API that works on all recent versions of Android (API level 9+) that have Google Play services installed. 

## UI

### Android icon animator

https://romannurik.github.io/AndroidIconAnimator/

* 参考
  * http://qiita.com/takahirom/items/3deee8b73e0a2bc1a50b

### Constraint layout

* https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html

### flexbox layout

https://github.com/google/flexbox-layout

> FlexboxLayout is a library project which brings the similar capabilities of CSS Flexible Box Layout Module to Android.

### Android developer portal with tools, libraries, and apps

マテリアルデザイン関連のライブラリーなど

* https://android-arsenal.com/tag/6?sort=created

### font : Calligraphy

> Custom fonts in Android an OK way.
>
>Are you fed up of Custom Views to set fonts? Or traversing the ViewTree to find TextViews? Yeah me too.

https://github.com/InflationX/Calligraphy

### App Shortcuts

* [Exploring Android Nougat 7.1 App Shortcuts](https://www.novoda.com/blog/exploring-android-nougat-7-1-app-shortcuts/)

## Network

### Retrofit/2

* Retrofit
    * AndroidとJava向けのtype-safeなHTTP clientです。
    * http://square.github.io/retrofit/
* Retrofit2
    * Retrofit1とは異なるAPI体型とのこと
    * Gsonなどのserializer/parserが用意されている模様.

> GRADLE
> ```compile 'com.squareup.retrofit2:retrofit:2.2.0'```
> Retrofit requires at minimum Java 7 or Android 2.3.

* 関連
    * [Retrofit2使ってみる](http://qiita.com/hymmr/items/cbb1013617cd43b8c7c4)
    * [Retrofit2 &OkHttp  でAndroidのHTTP通信が快適だにゃん](https://www.slideshare.net/sakura_bird1/retrofit2-okhttpandroidhttp-20160122) by Yukari Sakurai

### Okhttp3

> An HTTP+HTTP/2 client for Android and Java applications

* github : https://github.com/square/okhttp
    *  okhhtp3 : https://github.com/square/okhttp/tree/master/okhttp/src/main/java/okhttp3
* home : http://square.github.io/okhttp/
* wiki : https://github.com/square/okhttp/wiki

>* HTTP/2 support allows all requests to the same host to share a socket.
>* Connection pooling reduces request latency (if HTTP/2 isn’t available).
>* Transparent GZIP shrinks download sizes.
Response caching avoids the network completely for repeat requests.

* 関連
    * [[Android] RxJavaを使わずにOkHttp3でシンプルに通信処理を書いてみる](http://dev.classmethod.jp/etc/android-okhttp3/)
        * Okhttp2と3の違いに関する解説あり。
    * [Android Studio2 で OkHttp3.3.1 を試す](http://qiita.com/LOVELESS/items/3cbc942c66fa1afcc2ac)


### android-async-http

* http://loopj.com/android-async-http/
* https://github.com/loopj/android-async-http

> An asynchronous, callback-based Http client for Android built on top of Apache's HttpClient libraries.

注意：apache httpclientはdeprecated.

### picasso

> A powerful image downloading and caching library for Android

* http://square.github.io/picasso/

## debug

### Timber

https://github.com/JakeWharton/timber

> This is a logger with a small, extensible API which provides utility on top of Android's normal Log class.

* 参考
  * [Logcatのソースへ飛ぶ機能をTimberに盛り込んでみた。](http://qiita.com/shiraji/items/5815bfe667d042051119)

### Steho

http://facebook.github.io/stetho/

> Stetho is a sophisticated debug bridge for Android applications. When enabled, developers have access to the Chrome Developer Tools feature natively part of the Chrome desktop browser. Developers can also choose to enable the optional dumpapp tool which offers a powerful command-line interface to application internals. 

### chuck

https://github.com/jgilfelt/chuck

> An in-app HTTP inspector for Android OkHttp clients 

### Android-Debug-Database

https://github.com/amitshekhariitbhu/Android-Debug-Database

> Android Debug Database is a powerful library for debugging databases and shared preferences in Android applications.

>* See all the databases.
>*     See all the data in the shared preferences used in your application.
>*     Run any sql query on the given database to update and delete your data.
>*     Directly edit the database values.
>*     Directly edit shared preferences.
>*     Delete database rows and shared preferences.
>*     Search in your data.
>*     Sort data.
>*     Download database.


## testing

### espresso

https://developer.android.com/training/testing/ui-testing/espresso-testing.html

## recognition

### voice recognition

* CMU Sphinx : http://cmusphinx.sourceforge.net/

## Others

* [よくチェックするAndroid開発で重要なもののRelease Notesリンクまとめ](http://qiita.com/operandoOS/items/d2feb53cd55e94c4e9a6)
* @y_q1m さんの[「DroidKaigi 2017」に行った](http://qiita.com/y_q1m/items/561947f024b3cd8a2eb5)