Cooooding!!

Unity(C#)を使ったゲーム開発関連Tipsなど

Native Pluginを作らずにAndroidアプリのメモリ使用量を取得する【Unity】

概要

Androidでアプリ全体のメモリ使用量を取得する場合Native Pluginを作るのが一般的ですが、AndroidJavaClassを使えばNative Plugin無しでも実装できそうだったので実装してみました。

実装

public static long GetMemorySize()
{
    var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    var application = activity.Call<AndroidJavaObject>("getApplication");
    var context = activity.Call<AndroidJavaObject>("getApplicationContext");
    var staticContext = new AndroidJavaClass("android.content.Context");
    var service = staticContext.GetStatic<AndroidJavaObject>("ACTIVITY_SERVICE");
    var activityManager = activity.Call<AndroidJavaObject>("getSystemService", service);
    var process = Process.GetCurrentProcess();
    var pidList = new int[] { process.Id };
    var memoryInfoList = activityManager.Call<AndroidJavaObject[]>("getProcessMemoryInfo", pidList);

    long total = 0;
    foreach(var memoryInfo in memoryInfoList)
    {
        total += memoryInfo.Call<int>("getTotalPss") * 1024;// kB単位なのでByte単位に直す
    }
    return total;
}

実行速度の面ではNative Pluginを作った方がいいと思いますが、ちょっと試すだけならこの方が楽で良さそうです。

環境

  • Unity2019.2.9f1
  • Nexus 5X (Android6.0.1)