Unity Editor 上では問題なく firebase database にアクセス出来ていた、なのに Android 実機になったら以下のエラーが。
DllNotFoundException: Unable to load DLL FirebaseCppApp-7_1_0: The specified module could not be found
その時に対処したことです。
かなり迷走したので、そのいきさつも含めて時系列順に書きました。
結果としては「動いたけど、かなり無理やり」といった状況です。
firebase がどういうものかについては以下の記事を参照してください。
エラー再現方法
開発マシンはWindows、unity2019.4.23f1、firebase_unity_sdk_7.1.0 で確認
- プロジェクトを新規作成
- Player Settings の Bundle Identifier を firebase のプロジェクトに合わせる
- google-services.json、GoogleService-Info.plist をコピー
- firebase_unity_sdk_7.1.0/FirebaseDatabase.unitypackage をインポート(おそらく別のパッケージでも同様)
- Build Settings でターゲットを PC → Android にする
- Auto Resolution を Enable
ここまで操作すると、自動起動する Android Resolver がエラーになって進まない。
このエラーを解決しない場合、PC からは firebase にアクセスできるが、Android 実機だとアクセスできない、という状況になってしまう。
解決方法を模索する
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation.
エラーの中にこう書かれているが、JAVA_HOME とは、Windows の環境変数。
この変数、自分で java をインストールすると設定されるのだが、unity2019 が自動インストールしてくれるアンドロイド環境の場合、この環境変数まではインストールされない。
そのため、unity2018 以前から自分で java などをインストールしており、JAVA_HOME が設定されているマシン(Unity玄人)だとこのエラーに遭遇せず、unityは2019から、なんてUnity素人は痛い目を見るんじゃないでしょうか。
私は痛い目をみた
環境変数を設定する
Windows10 の場合、環境変数設定画面までがなかなか遠い。
システム環境変数に追加
変数 | 新規/編集 | 内容 | 例 |
---|---|---|---|
JAVA_HOME | 新規 | bin\java.exe までのパス | C:\Program Files\Unity\Hub\Editor\2019.4.23f1\Editor\Data\PlaybackEngines\AndroidPlayer\OpenJDK |
Path | 編集 | %JAVA_HOME%\bin |
パスが合っていないと上手く動かないので、最後に \ をつけない等も含め、一字一句間違えないように
結果。上手くいかない
上手くいったり、いかなかったり。
(たまたま上手くいった時、次に示す操作をしてしまっていたかもしれない)
Build した後、Force Resolve
エラーを解決しなくてもビルドは可能なので、一旦ビルドする。
その後、Assets/External Dependency Manager/Android Resolver/Force Resolve を実行。
すると…。
結果。なぜか上手くいってしまう
理由を説明できないが、さっきまでエラーだったものが上手く動いてしまう。
上手くいった後、ビルドすれば Android でも firebase にアクセスできる。
よくわからないが問題解決! と、思いきや…
悪夢は終わっていなかった。Unity2019 を再起動したところ、今度はビルドでエラーが出るように…。
JAVA_HOME は設定してようがしてまいがエラーは出る。エラーで読み取れる sdkmanager.bat はその場所に存在する。
コマンドプロンプトで実行すればエラーにならず動いている。
ビルドが通らなくなる理由は限りなくクエスチョン。そして…。
これまた解決方法が謎
一旦JDKのチェックを外し、パスを消す。もう一度JDKにチェックを入れる。
(!のメッセージは警告ではないので、そのままで問題ないと思う)
そして、この後ビルドすると動く。
なんでやねん…。
理解はできませんが、同じような問題&解決した人もいるようです。
unity2019 で一見楽に Android ビルド出来るようになった結果…
Google サードパーティライブラリとのおかしな競合が起こる(のかもしれない)。
Android Studio も入れているのでそのせいかとも思ったのですが、firebase plugin を入れなければ Android Build は通るんですよね…。
過去から色々と(unity 関連を)インストールした PC だと問題ない可能性も。
いざ PC 新調した! なんて時にこの地雷を踏んでしまう事はありえるんじゃないかと思います。
そのうち解決される(2020 は解決済み?)と思いますが、初心者(=私)にはかなり厳しい関門ですね。