こんにちは、Androidエンジニアのもりぞーです。今回は Mirrativ の Android アプリで使っているライブラリをご紹介します。
こちらの記事のAndroid版になります! tech.mirrativ.stream
ライブラリ一覧
Google開発ライブラリ
公式ライブラリでありAndroid開発のスタンダードになっているので、Googleが提供しているライブラリは必要に応じて積極的に使うようにしています。
Android Jetpack
Mirrativでは現状以下のライブラリを使っています。
"androidx.appcompat:appcompat" "androidx.annotation:annotation" "androidx.browser:browser" "androidx.cardview:cardview" "androidx.constraintlayout:constraintlayout" "androidx.recyclerview:recyclerview" "androidx.viewpager2:viewpager2" "androidx.lifecycle:lifecycle-livedata-ktx" "androidx.lifecycle:lifecycle-viewmodel-ktx" "androidx.lifecycle:lifecycle-process" "androidx.lifecycle:lifecycle-service" "androidx.lifecycle:lifecycle-common-java8" "androidx.core:core-ktx" "androidx.activity:activity-ktx" "androidx.fragment:fragment-ktx" "androidx.swiperefreshlayout:swiperefreshlayout" "androidx.navigation:navigation-fragment-ktx" "androidx.navigation:navigation-ui-ktx" "androidx.emoji:emoji" "androidx.emoji:emoji-appcompat" "androidx.room:room-runtime" "com.google.android.material:material"
Google Play Billing Library
アプリ内課金を実装するためのライブラリ。
Google Play Core Library
Google Play Store関連の複数の機能があるライブラリ。Google Play In-App Review APIでアプリ内レビューを表示するために使っています。
OSS Licenses Gradle Plugin
OSSライセンス情報を生成するライブラリ。設定画面にあるライセンス情報の表示に使っています。
Firebase(Notification, Crashlytics, Performance, DynamicLinks)
Firebase 関連のライブラリ。通知機能や、クラッシュの調査等で利用しています。
SafetyNet
アプリの不正利用を防止するためのライブラリ。
ExoPlayer
動画を再生するためのライブラリ。 Mirrativは画面配信のアプリですがメディアを再生する機能が2つあり、1つ目はライブ配信の視聴(RTMP)、2つ目は動画アーカイブ(HLS)を見る機能です。RTMPは社内ライブラリ、HLSをExoPlayerを用いて再生しています。
FlexboxLayout
CSS Flexible Box Layout ModuleのようなLayoutを作成できるライブラリ。横幅が違う複数のViewを並べるときに使っています。
UI
Lottie
JSONファイルからベクターアニメーションを簡単に再生してくれるライブラリ。
配信/視聴時のギフトやイベント時の演出など、リッチなアニメーションを表示する場合に利用しています。
Glide
Googleが買収したBumpの画像読み込み用のライブラリ。Google公式ライブラリではないのでコチラに書いています。
Glide Transformations
Glideの画像変換を拡張するためのライブラリ。場所指定の角丸(左上と右上だけ、など)をするときに利用しています。
Fresco
画像読み込み用のライブラリ。GlideだとAnimatedWebpのアニメーションの再生が遅かったので、AnimatedWebpの表示用に利用しています。
通信
Retrofit
type safeなAPI Clientのライブラリ。内部のREST APIとの通信に使っています。
OkHttp
HttpClientライブラリ。RetrofitやGlideでのHTTP通信で使っています。
デバッグツール
Flipper
モバイル用のデバッグツール。よく使っている機能はネットワーク通信の確認で、Android開発者だけではなく、サーバーエンジニアがAPIの疎通確認をするときにも役立っています。詳しくはコチラ。 tech.mirrativ.stream
leakcanary
メモリーリークを検知するためのライブラリ。
Hyperion
デバッグ時のみ動く複数の機能を持ったライブラリ。非開発者からのクラッシュレポートや、デザインチェック時に利用しています。例として、MirrativのQAチームは以下の画像のような形で確認をしています。 ※ 画像中では「LIVE」の部分がリリース版と開発版で同じサイズで表示されていますが、デザイン変更でサイズが小さくなるのが正しい挙動です。このようにして、QAチームと開発チームでコミュニケーションをとっています。
その他
Koin
DIを行うためのライブラリ。
kotlinx.coroutines
非同期処理を行うためのライブラリ。
EventBus
EventのPub/Subを行うためのライブラリ。Fluxアーキテクチャのdispatcherの役割として使っています。
Puree
アプリ上のログに関するデータをサーバーに送信する際に利用しているライブラリ
AppLovin MAX SDK
広告表示用のライブラリ。
WORLD
音声解析用のライブラリ。エモモ(アバター)のリップシンク時の母音推定で利用しています。
libwebrtc
WebRTC通信を行うためのライブラリ。コラボ機能での音声の送受信に使っています。
Gson
Googleが開発したJSONをJavaオブジェクトに変換するためのライブラリ。nullの扱いが微妙なので、kotlinで開発しているなら非推奨となっていますが、書き換えるメリットもあまりないので使い続けています。(Googleのライブラリですが、Android用に作られたわけではないのでココに書いています)
消す予定の物
Apache-Commons
再利用可能なJavaコンポーネントのライブラリ。Kotlinの標準APIで代替できる使い方が多いので使わないようにしています。
RecyclerView Animators
RecyclerViewのアニメーション設定を簡単にするライブラリ。 ListAdapterのアニメーションで問題なかったので、使わないようにしています。
BlurBehind
ViewにBlurを設定できるライブラリ。更新が止まっており、DEPRECATEDになっているので消す予定です。
Android flow layout
FlowLayoutを作成できるライブラリ。ConstraintLayoutにFlowの機能が入ったので消す予定です。
Bolts
非同期処理を行うためのライブラリ。コルーチンに書き換えているので消す予定です。
消した物
Rx Java
リアクティブプログラミングをするためのライブラリ。一部非同期で使っていましたがコルーチンに変更したため消しました。
guava
Googleが開発した再利用可能なJavaのライブラリ。Kotlinの標準APIで代替できるので消しました。
AndroidAnnotations
Viewのボイラープレートコードをなくすライブラリ。DataBindingsで代替できるのと学習コストが無駄なので消しました。
DBFlow
SQLiteを扱うためのライブラリ。Roomで代替できるので消しました。
android-crop
画像をCropするためのライブラリ。クラッシュが発生したり、UIを変更したくなったので自前実装して消しました。
stetho
ネットワーク通信デバッグ用のブリッジライブラリ。Flipperで代替できるので消しました。
おわりに
MirrativのAndroidアプリではできるだけGoogle開発ライブラリを使うようにしており、開発に参加時にライブラリに対する学習コストができるだけかからないことを意識しています。Google提供ではないライブラリは、チームで議論した上で導入していますが、ここ1年くらいは変わっていないです。Android Jetpack自体も日々進化しているので、便利な機能は積極的に導入していくつもりです。この他にもストリーミング時のRTMPや、エモモ(アバター)機能での Unity as a Library を活用してMirrativを開発しています。
今回はライブラリについて語ってみましたが、次回は現在どのようなアーキテクチャで開発しているか書きたいと思います!
We are hiring!
ミラティブでは一緒にアプリを作ってくれる Android エンジニアを募集中です!気軽にご連絡ください!