ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

【UE4 & Android】実機デバッグ実行中のログ確認方法について

はじめに

突然ですが、Android開発時のデバッグ・プロファイリング方法についてまとめようと思います。検証したUE4のバージョンは4.21.2です。

今回は実機実行のログ確認方法についてです。
UE4エディタ上で確認する方法と、Android Debug Monitorというツールを使う方法の2つを紹介します。

ちなみに、iOS開発版はこちらです。
pafuhana1213.hatenablog.com




Session Frontendを使ってログを確認する方法

UE4エディタ上でAndroid実機上のログを確認するためには、UE4のSession FrontendがそのAndroidを認識するようにする必要があります。認識されたAndroid端末は以下の画像のように「自分のセッション」に表示されます。そして、その項目をクリックするとログを確認できるようになります!  
f:id:pafuhana1213:20190219214907p:plain

これから認識する方法について紹介するのですが、以降の説明は adb devices コマンドの結果に対象のAndroid端末が含まれていることを前提とします。「よく分からん!」「認識されてない!」という方は以下のページを見たり、Google先生に相談してください!
api.unrealengine.com

-messaging オプションについて

Session FrontendがAndroidを認識するためには、-messagingコマンドライン引数に追加した状態で実機上で起動させる必要があります。
api.unrealengine.com

と言っても、エディタ右上にあるLaunchボタンやProject Launcher経由で実機実行する場合は -messaging が自動的に追加されます。そのため、特に気にしなくてもSession Frontendで実機を認識します。(…昔は明示的に追加しないと駄目だったような)
f:id:pafuhana1213:20190220001021p:plain
f:id:pafuhana1213:20190220001008p:plain
●Engine\Source\Developer\LauncherServices\Private\Launcher\LauncherWorker.cpp

// game command line
FString CommandLine = FString::Printf(TEXT(" -cmdline=\"%s -Messaging\""),
	*InitialMap);

しかし、作成したパッケージを実機上で実行する場合はこの手は使えません。何故なら、Android OSはコマンドライン引数を実行可能ファイルに渡すことをサポートしていないからです。
そのため、UE4では UE4CommandLine.txt というファイルを経由してコマンドライン引数を渡す方法が用意されています。

UE4CommandLine.txt について

上述の通り、UE4CommandLine.txtを使うことでパッケージの場合でもコマンドライン引数を渡すことができます。更に、このファイルはパッケージインストール後に生成された「 /AndroidのストレージのRoot/UE4Game/Project名/ 」に配置すれば認識されるため、コマンドライン引数を変える度にパッケージ作成をする必要はありません!
f:id:pafuhana1213:20190220002605p:plain
この機能のおかげで「起動時に開くレベルの変更」や「一部機能を制限」などのデバッグ・プロファイリングで必要となる操作を手軽に行うことができます。

UE4CommandLine.txt の書き方

UE4CommandLine.txt には 渡したいコマンドライン引数を書く必要があります。
例えば 「TestProject」というプロジェクトの「Content/Maps フォルダにある LevelA」というレベルを「-Messaging」付きで開きたい場合は以下のように書くことになります。

../../../TestProject/TestProject.uproject /Game/Maps/LevelA -Messaging

Engine\Build\Android\UE4Game\UE4CommandLine.txt.template にサンプルがありますので、こちらも参考になるかと思います。

UE4CommandLine.txt の送り方

コマンドライン引数を書いたら、UE4CommandLine.txt をAndroid上のパッケージのルートフォルダに転送する必要があります。

転送はadb pushコマンドを使います。このコマンドを用いることで、開発PC上にあるファイルをAndroid端末の指定のパスに転送することができます。で、実はUE4にはこのコマンドを使うためのbatファイルが用意されています。

●Engine\Build\Android\UE4Game\PushCommandLine.bat

%ANDROID_HOME%\platform-tools\adb.exe push UE4CommandLine.txt /mnt/sdcard/UE4Game/UE4Game/UE4CommandLine.txt

注意:
/mnt/sdcard/UE4Game/UE4Game/UE4CommandLine.txt の部分は各プロジェクト名に適したパスに変える必要があります。先程例に挙げた「TestProject」の場合は、/mnt/sdcard/UE4Game/TestProject/UE4CommandLine.txtに変えることになります。

PushCommandLine.batと同じフォルダにUE4CommandLine.txt を配置した状態でこのbatファイルを使うことで、UE4CommandLine.txtがAndroid上のパッケージのルートフォルダに転送できます。

これでAndroidパッケージの場合でもコマンドライン引数を指定できるようになりました!

おまけ 1

ちなみに、LaunchボタンやProject Launcherで起動した場合はUE4CommandLine.txtの作成・転送を自動的に行ってくれます。そして、自動生成されるUE4CommandLine.txtに書き込まれる内容は、Project Launcher の Custom Launch ProfileのAdditional Command Line Parametersで編集することができます。
f:id:pafuhana1213:20190220005354p:plain

おまけ 2

Session Frontendで接続後、以下の部分から実機にコンソールコマンドを送ることができます。
f:id:pafuhana1213:20190220011301p:plain

ここまでの参考

wiki.unrealengine.com



Android Debug Monitorを使ってログを確認する方法

Android開発で使用するSDKに含まれる Android Debug Monitor を使うことで実行中のログを確認する方法もあります。この方法のメリット・デメリットは以下の通り。

メリット

  • 「-messaging」をつける必要がない
  • Session Frontendよりも詳細なログを確認可能
  • 起動即クラッシュのように、Session Frontendではログを確認し辛い場合でも有効

デメリット

  • ログの内容が詳細過ぎて見づらい
  • UE4以外のアプリのログも出力される ( 後述のフィルタ機能で対応可能 )
  • Session Frontendではできた「コンソールコマンドの送信」ができない

良し悪しがありますが、サクッとログを見たいときや即クラッシュ調査時には結構便利なのでオススメです。

Android Debug Monitorの使い方

NVPACK\android-sdk-windows\tools\monitor.bat を実行するとAndroid Debug Monitorが起動します。左上に認識されているAndroidバイスのリストがあるので、確認したい端末を選択すると右下にログが流れ始めます。
f:id:pafuhana1213:20190220010227p:plain

しかし、UE4アプリ以外の様々なアプリのログが流れるため、肝心の確認したい情報がすぐ埋もれてしまいます。そこで、UE4アプリに関する情報だけを抽出するためにフィルタ機能を利用します。

(たぶん)左下にあるLog Catタブにある +ボタンを選択するとフィルタの作成画面が表示されます。その画面で以下のように入力してOKを押すと、UE4に関するTagが埋め込まれたログだけを表示するフィルタが出来上がります。
f:id:pafuhana1213:20190220012046p:plain
f:id:pafuhana1213:20190220012118p:plain

これで大分見やすくなったはずです。しかし、フィルタを適用しても追いきれない場合もあります。そんな時は以下の画像にある検索ボックスなどを用いて更に抽出するようにしましょう!
f:id:pafuhana1213:20190220012639p:plain

おまけ Android Debug Monitorでスクショを撮る

f:id:pafuhana1213:20190220012918p:plain
f:id:pafuhana1213:20190220012828p:plain

撮ったスクショはそのままPC上に保存できる!便利!


一旦今回はここまで。次は実行のログ確認方法について書く予定です。