【Unity】Firebaseを含むプロジェクトのAndroid実機向けビルド

   

こんにちは。今日もUnityを弄ってる.okaです。気付いたらα7IIを買っていました。フルサイズセンサーの乗ったミラーレス一眼は最高ですね。50mm単焦点レンズ欲しい。

さて、去年の夏頃に池尻セレクトハウスとのコラボイベントで使用していた「おさかなアクアリウム」ですが(トップの写真のやつですね)、データベースとしてFirebaseを使っているものの、Firebase SDKはiOSまたはAndroid向けであり、Windows向けにビルドすると動かない(!)ために、Firebase SDKを用いずわざわざapiを実装してjsonで読むという摩訶不思議実装になっています。今考えるとなぜFirebaseを使ったのかよく分かりませんね。

が、Firebase Realtime Databaseを(本来の使い方で)用いることができればより高速、かつ単純なコードで同等のものが実装できることになります。今回はその点に目をつけた(?)弊団体代表にAndroid向けビルドできる?と聞かれた所が地獄の入り口となっております。

What’s 地獄?

まずはFirebaseを用いたデータ取得、魚オブジェクトインスタンス部のコードです。実行環境はUnity 5.6.4です。そろそろUnity2017にしようとずっと思っていたら2018年になってしまいました。2、3、4、5ときて突然2017になるのはベイブレード2002みたいでちょっとウケますね。

余裕で100行切りです。まだ減らせそうですが可読性を考えるとこんなものでしょうか。jsonでやってた時代は前回読んだデータとの比較やら色々やっていたのでこれの2倍以上はありました。

UnityはAndroidビルド環境を整えてあげれば直接apkに書き出し、実機で動作させることが可能です。僕自身、Firebase SDKを用いてコードを書き直して、それをAndroidターゲットでビルドすればあっさり動くと高を括っていました。何が問題って、Google公式のUnity向けAndroidアプリ開発リファレンスにもそう記載されているのが最悪です。

「6.Android 用にビルドします。

[File > Build Settings] メニュー項目を選択します。
[Platform] リストから [Android] を選択します。
[Switch Platform] をクリックし、ターゲット プラットフォームとして [Android] を選択します。
Unity ステータスバーの右下隅にあるスピナー(コンパイル中)アイコンが停止するまで待ちます。
[Build and Run] をクリックします。」
-Unity プロジェクトに Firebase を追加する より-
https://firebase.google.com/docs/unity/setup?hl=ja

結論から言うと、これでは無理です。出てきたapkをAndroid実機にインストールしても、Firebase周りは一切動作しません。ここでまず大混乱です。ここで大量の睡眠時間が消えて行きました。

解決策

ひたすら調べて分かったことは、「実機でFirebaseを動かすためにはFirebaseのjar、aarをビルドに含める必要があるらしい」ということ。当然そんなものはSDKに付属していませんし、そもそも任意のAndroidライブラリを含めた状態でUnity上でapkビルドする方法も不明。UnityからAndroid Studioにエクスポートし、build.gradleファイルに必要そうなライブラリ類を記載してみるも、Unityが吐くファイル類の構成が一般的なAndroidプロジェクトと違うため、ネット上の知識もあまり役立たず、うまく行きませんでした。

そして、Unityに任意のGoogle Play Service関連のapiを追加可能になる、PlayServiceResolverを発見。
PlayServiceResolver – Github

こんなサイトも発見。
Unity(Android)でFirebase対応をPlugin(PlayServicesResolverのaarファイル)で自動化する話

が、上記サイトにあるResolverVer1_2.csの修正は実際には不要でした。そもそもResolverVer1_2.csってどこにあるのかさえ分からない()

PlayServiceResolverを使用するために、インポートするapiを指定するためのコードを書きます。

これをAsset¥Plugins¥Android¥Editor以下に配置し、UnityエディタのAssetsメニュー内にある、Play Service ResolverからResolveします。うまくいけば、しばらくした後成功した通知がダイアログで出ます。僕の場合、環境変数JAVA_HOMEの指定がおかしいというエラーが出ましたが、¥binを抜いたディレクトリ指定にすることで成功しました。

この後はUnityでAndroid向けビルドを行えばOK。Build SystemはGradleにすること。

動いた

これでやっと実機動作しました。ビルドの成功と引き換えに大量の睡眠時間が犠牲になりました。
Realtime Databaseを謳うだけあり、データ追加からの応答がかなり高速で良いですね。データ追加や変更、削除をトリガーに簡単にコードを書けるのも良いです。ただビルドに関する説明があまりに貧弱すぎます。jarの追加が必要なことくらいは公式に書いておいて欲しかった。

今日からは夜ゆっくり眠れます。

TrySailとカメラにお金を吸われています

 - 作品紹介