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」を選択します。