Android向けアプリのデバッグにMali Graphics Debuggerを使用する方法 (+Unityで作った物にも)


Mali Graphics Debugger

GPUにMaliを使用しているAndroid端末向けのデバッガに、「Mali Graphics Debugger」といものがあります。

今回は、このデバッガの使用方法について教わったのでそれについてまとめてみました。
後半にはUnityで作成したアプリ用の方法についても触れています。

手順

今回はroot化されていないAndroid端末で、32bit版(armeabi-v7a)を対象としておこないました。
ちなみに私の使用したものはGalaxy S6です。

1. ダウンロード

まずARMのサイトから、Mali Graphics Debuggerをダウンロードします。
ダウンロードしたファイルを実行し、必要なファイルをインストール。インストール先はデフォルトのままで大丈夫です。

2. libMGD.soファイルを移動

先程ダウンロードしたフォルダの
'C:\Program Files\ARM\Mali Developer Tools\Mali Graphics Debugger v4.1.0\target\android-non-root\arm\armeabi-v7a'
の中に、libMGD.soというファイルがあるかと思います。
このファイルを
'C:\android\arm\armeabi-v7a'
というフォルダ内に移動します。

3. ポートフォワーディング

Android Studioを立ち上げ、デバッグしたい対象のアプリのファイルを開きます。
Android端末をPCに接続し、Android Studioのコマンドラインで、以下のコマンドを入力します。

adb forward tcp:5002 tcp:5002

4. daemon programをAndroid端末にインストール

daemon programをAndroid端末側にインストールします。
コマンドラインに以下のコマンドを入力してください。

adb install -r C:\Program Files\ARM\Mali Developer Tools\Mali Graphics Debugger v4.1.0\target\android-non-root\MGDDaemon.apk

5. build.gradleを編集

appのbuild.gradleに以下のjniLibs dirを追加します

build.gradle
sourceSets.main.jniLibs.srcDir 'C:\\Android\\arm'

\は円マークに直さないとダメかもしれません

6. MainActivityを編集

アプリのMainActivityに、以下のコードを追加します。

MainActivity.java
static {
        try {
                System.loadLibrary("MGD");
        }
        catch( UnsatisfiedLinkError e ){
                // Feel free to remove this log message.
                Log.e("[ MGD ]", "libMGD.so not loaded.");
        }
}

7. アプリの実行

アプリをAndroid端末へインストールします。
そして、MGD Daemon appから対象のアプリを開いてください。

8. デバッガの起動

PCの方で、
'C:\Program Files\ARM\Mali Developer Tools\Mali Graphics Debugger v4.1.0'
内にあるLaunch.batを起動してください。
起動後、左上のメニューのDebugからConnect to targetを選択することでトレースが開始されます。

Unityの場合

Unityで作成れたアプリの場合ですが、この方のサイトに従って実行したらうまくいきました。

Building a Unity Application with Mali Graphics Debugger Support

英語の読める方なら、このサイトを読めば問題なく実行することができるかと思います。
上記の手順6.の代わりにここに書いてあることをおこなえば大丈夫です。

一応日本語で必要だったところだけまとめます。

1. StandardActivityクラスを作成

上記の手順6.はおこないません。
その代わり、新しくStandardActivity.javaクラスを作成し、以下のコードを記述します。

StandardActivity.java
package test.application;  
import com.unity3d.player.UnityPlayerActivity;  
import android.os.Bundle;  
import android.util.Log;  

public class StandardActivity extends UnityPlayerActivity  
{  
    protected void onCreate(Bundle savedInstanceState)  
    {      
        try  
        {  
            System.loadLibrary("MGD");  
        }  
        catch( UnsatisfiedLinkError e)  
        {  
            Log.i("[ MGD ]", "libMGD.so not loaded.");  
        }  
        super.onCreate(savedInstanceState);  
    }  
}  

2. AndroidManifestの編集

AndroidManifest.xml内のactivityのandroid:nameを書き換えます。

AndroidManifest.xml
activity android:name=”StandardActivity” 

後は上記の手順同様にしていけばデバッグできると思います。