Mirrativ tech blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc...)によるブログです

Mirrativ の Android アプリで使っているライブラリを紹介する!

こんにちは、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チームは以下の画像のような形で確認をしています。

f:id:morizo999:20201210200444p:plain
Hyperion
※ 画像中では「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 エンジニアを募集中です!気軽にご連絡ください!

www.mirrativ.co.jp

speakerdeck.com