「Unityで使用するAndroidのネイティブプラグインの作成」でAndroidネイティブプラグインを使用してゲームアプリを作成しました。今回は、Android携帯上で動作しているゲームアプリをデバッグするために、「Android Device Monitor」を使用します。
- Android携帯:京セラ android one s2
- Androidバージョン:7.1.2
- Android開発環境:Android Studio 4.0
- Unity: 2018.4.26f1 (64-bit)
- Android Device Monitorバージョン:25.2.2
Android Device Monitorの設定
Android Device Monitorは、「Android-sdk-tool」の次に示すディレクトより、「\Android-sdk-tools\tools\monitor.bat」を実行すると起動します。
Android Device Monitorが起動すると次の画面が表示されます。Android携帯がUSBで接続され、開発可能状態になっているとデバイスとして画面に表示されます。
AndroidネイティブプラグインとUnity C#スクリプトの作成
Androidネイティブプラグインプロジェクト「UnityPluginDbg」とゲームアプリプロジェクト「PluginDebug」を作成して、Unityでゲームアプリとして作成します。詳細については「Unityで使用するAndroidのネイティブプラグインの作成」を参照してください。Unity C#スクリプトは「Main Camera」に埋め込みました。
Unity C#スクリプト「UnityDebug.cs」のUpdate関数からAndroidネイティブプラグイン「UnityPluginDbg.java」を呼び出し、呼び出されたFromUnity関数が、”UnityPlugin: “と受け取った文字列を組み合わせてUpdate関数に戻します。
UnityPluginDbg.java
package com.tomosoft.unitydbg; //import com.unity3d.player.UnityPlayer; import android.util.Log; public class UnityPluginDbg { public static String FromUnity(String str) { Log.d("FromUnity",str); // UnityPlayer.UnitySendMessage("UnityTest" , "" , ""); return( "UnityPlugin: " + str); } }
UnityDebug.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class UnityDebug : MonoBehaviour { private static string JAVA_CLASS_NAME = "com.tomosoft.unitydbg.UnityPluginDbg"; int counter = 0; // Start is called before the first frame update void Start() { UnityEngine.Debug.LogWarning("start"); using (AndroidJavaClass androidJavaClass = new AndroidJavaClass(JAVA_CLASS_NAME)) { string text = androidJavaClass.CallStatic<string>("FromUnity", counter.ToString()); UnityEngine.Debug.LogWarning(text); counter++; } } // Update is called once per frame void Update() { UnityEngine.Debug.LogWarning("Update 1xxx"); using (AndroidJavaClass androidJavaClass = new AndroidJavaClass(JAVA_CLASS_NAME)) { string text = androidJavaClass.CallStatic<string>("FromUnity", counter.ToString()); UnityEngine.Debug.LogWarning(text); counter++; } } }
Android携帯で作成したゲームアプリの実行
Unityで作ったゲームアプリのログだけが表示されるようにフィルタを作成します。Android Device Monitor画面左下の「Saved Filter」の横の緑色のプラスボタンをクリックし、次のように設定します。
Unityで作成したゲームアプリを転送して実行すると、次のようにUnityの「Debug.LogWarning」関数やAndroid Studioの「Log.d」関数で作成したメッセージがAndroid Device Monitorの画面に表示されます。ネイティブプラグインからのデバッグ情報はTagが「FromUnity」で青色文字で表示されます。
エラーダイアログ「Could not open Selected VM debug port (8700)・・・」の発生
Android Device Monitorを起動すると次のエラーダイアログが発生する場合があります。
このエラーダイアログが発生するのは、すでにVM debug port (8700)が使用されているためです。Android Studioが起動していないか確認します。
Android Studio でlogcat によるアプリのログ表示
Android StudioのJavaコードでLog クラスを使用すると、logcat に表示されるログメッセージを作成できます。
「Android携帯を使ってCC2541 SensorTagから温度データの取得」に基づきAndroidネイティブプラグインを作成し、UnityにからSensorTagにアクセスしたスクリーンショットを示します。Unity C#スクリプトとAndroid StudioのJavaコードのlogに「SensorTag」を埋め込み、Android Studio のlogcatの検索欄に「SensorTag」を設定すると、データ転送に関連するするログのみが表示されます。
- 「W/Unity: SensorTag ok」:Unity C#スクリプトによるlog
- 「D/SensorTag: onScanner start」:Android StudioのJavaコードによるlog<
/ul>
Android Studio のLogcat でアプリのログが表示されない
次のようにAndroid Studio のLogcat に表示されていない場合、Android端末が接続されていないことが考えられます。
Android端末の「設定」をクリックして、「開発者向けオプション」から「USB設定の選択」を選択します。
「USB設定の選択」画面から次のように「MTP」を選択します。